次の方法で共有


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
パラメーターの 1 つが 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

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByID

IBackgroundCopyJobHttpOptions::SetClientCertificateByName