IBackgroundCopyJobHttpOptions::GetClientCertificate 方法 (bits2_5.h)
从作业中检索客户端证书。
语法
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
包含证书存储区名称的以 Null 结尾的字符串。 若要在完成后释放字符串,请调用 CoTaskMemFree 函数。
[out] ppCertHashBlob
用于标识证书的 SHA1 哈希。 若要在完成后释放 Blob,请调用 CoTaskMemFree 函数。
[out] pSubjectName
以 Null 结尾的字符串,其中包含证书的简单使用者名称。 使用者名称中的 RDN 与证书显示的顺序相反。 如果证书不包含使用者名称,则使用者名称可以为空。 若要在完成后释放字符串,请调用 CoTaskMemFree 函数。
返回值
下表列出了一些可能的返回值。
返回代码 | 说明 |
---|---|
|
已成功检索证书。 |
|
作业未指定证书,或者用户对证书没有权限。 |
|
其中一个参数为 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();
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows Vista |
最低受支持的服务器 | Windows Server 2008 |
目标平台 | Windows |
标头 | bits2_5.h (包括 Bits.h) |
Library | Bits.lib |
另请参阅
IBackgroundCopyJobHttpOptions::RemoveClientCertificate