從作業擷取客戶端憑證。
語法
HRESULT GetClientCertificate(
[out] BG_CERT_STORE_LOCATION *pStoreLocation,
[out] LPWSTR *pStoreName,
[out] byte **ppCertHashBlob,
[out] LPWSTR *pSubjectName
);
參數
[out] pStoreLocation
識別要用來查閱憑證的系統存放區位置。 關於可能的數值,請參見 BG_CERT_STORE_LOCATION 列舉。
[out] pStoreName
包含憑證儲存名稱的空終止字串。 完成後要釋放字串,呼叫 CoTaskMemFree 函式。
[out] ppCertHashBlob
SHA1 雜湊值用來識別憑證。 完成後要釋放 blob,呼叫 CoTaskMemFree 函式。
[out] pSubjectName
包含憑證簡單主體名稱的空終端字串。 主體名稱中的 RDN 順序與證書顯示的順序相反。 若證書中沒有主題名稱,主旨名稱可以為空。 完成後要釋放字串,呼叫 CoTaskMemFree 函式。
返回值
下表列出了一些可能的回傳值。
| 回傳碼 | Description |
|---|---|
|
成功取得證書。 |
|
該工作未指定憑證,或使用者沒有該憑證的權限。 |
|
其中一個參數是 NULL。 |
備註
你可以使用 IBackgroundCopyJobHttpOptions::SetClientCertificateByID 或 IBackgroundCopyJobHttpOptions::SetClientCertificateByName 方法來指定憑證。
範例
以下範例說明如何取得關於客戶端憑證的資訊。 範例假設 pJob 指向一個有效的工作。
#define THUMBPRINT_SIZE 20
HRESULT hr = S_OK;
IBackgroundCopyJob* pJob = NULL;
IBackgroundCopyJobHttpOptions* pHttpOptions = NULL;
GUID JobId;
BG_CERT_STORE_LOCATION StoreLocation;
LPWSTR pStoreName = NULL;
BYTE* pThumbprint = NULL;
LPWSTR pSubjectName = NULL;
// Retrieve a pointer to the IBackgroundCopyJobHttpOptions interface.
hr = pJob->QueryInterface(__uuidof(IBackgroundCopyJobHttpOptions), (void**)&pHttpOptions);
pJob->Release();
if (FAILED(hr))
{
wprintf(L"pJob->QueryInterface failed with 0x%x.\n", hr);
goto cleanup;
}
// Retrieve information about the client certificate set on the job.
hr = pHttpOptions->GetClientCertificate(&StoreLocation, &pStoreName,
&pThumbprint, &pSubjectName);
if (S_OK == hr)
{
wprintf(L"\nLocation: %d\nStore name: %s\nSubject: %s\n",
StoreLocation, pStoreName, pSubjectName);
wprintf(L"Thumbprint: ");
for (DWORD i = 0; i < THUMBPRINT_SIZE; i++)
{
wprintf(L"%x ", pThumbprint[i]);
}
wprintf(L"\n");
CoTaskMemFree(pStoreName);
CoTaskMemFree(pThumbprint);
CoTaskMemFree(pSubjectName);
}
else if (RPC_X_BAD_STUB_DATA == hr)
{
wprintf(L"The job does not specify a client certificate or\n"
L"the user does not have permission to access the certificate.\n");
}
else
{
wprintf(L"pHttpOptions->GetClientCertificate failed with 0x%x.\n", hr);
goto cleanup;
}
cleanup:
if (pHttpOptions)
{
hr = pHttpOptions->Release();
}
需求
| Requirement | 價值觀 |
|---|---|
| 最低支援的用戶端 | Windows Vista |
| 支援的最低伺服器 | Windows 伺服器 2008 |
| 目標平臺 | 窗戶 |
| Header | bits2_5.h(包含 Bits.h) |
| Library | Bits.lib |
另請參閱
IBackgroundCopyJobHttpOptions::RemoveClientCertificate