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 函数。

返回值

下表列出了一些可能的返回值。

返回代码 说明
S_OK
已成功检索证书。
RPC_X_BAD_STUB_DATA
作业未指定证书,或者用户对证书没有权限。
RPC_X_NULL_REF_POINTER
其中一个参数为 NULL

注解

使用 IBackgroundCopyJobHttpOptions::SetClientCertificateByIDIBackgroundCopyJobHttpOptions::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

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByID

IBackgroundCopyJobHttpOptions::SetClientCertificateByName