共用方式為


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

包含憑證儲存名稱的空終止字串。 完成後要釋放字串,呼叫 CoTaskMemFree 函式。

[out] ppCertHashBlob

SHA1 雜湊值用來識別憑證。 完成後要釋放 blob,呼叫 CoTaskMemFree 函式。

[out] pSubjectName

包含憑證簡單主體名稱的空終端字串。 主體名稱中的 RDN 順序與證書顯示的順序相反。 若證書中沒有主題名稱,主旨名稱可以為空。 完成後要釋放字串,呼叫 CoTaskMemFree 函式。

返回值

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

回傳碼 Description
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();
  }

需求

Requirement 價值觀
最低支援的用戶端 Windows Vista
支援的最低伺服器 Windows 伺服器 2008
目標平臺 窗戶
Header bits2_5.h(包含 Bits.h)
Library Bits.lib

另請參閱

IBackgroundCopyJobHttpOptions

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByID

IBackgroundCopyJobHttpOptions::SetClientCertificateByName