Freigeben über


IBackgroundCopyJobHttpOptions::GetClientCertificate-Methode (bits2_5.h)

Ruft das Clientzertifikat aus dem Auftrag ab.

Syntax

HRESULT GetClientCertificate(
  [out] BG_CERT_STORE_LOCATION *pStoreLocation,
  [out] LPWSTR                 *pStoreName,
  [out] byte                   **ppCertHashBlob,
  [out] LPWSTR                 *pSubjectName
);

Parameter

[out] pStoreLocation

Gibt den Speicherort eines Systemspeichers an, der zum Suchen des Zertifikats verwendet werden soll. Mögliche Werte finden Sie in der BG_CERT_STORE_LOCATION-Enumeration .

[out] pStoreName

Null-terminierte Zeichenfolge, die den Namen des Zertifikatspeichers enthält. Um die Zeichenfolge frei zu geben, rufen Sie die CoTaskMemFree-Funktion auf.

[out] ppCertHashBlob

SHA1-Hash, der das Zertifikat identifiziert. Rufen Sie die CoTaskMemFree-Funktion auf, um das Blob nach Abschluss des Vorgangs frei zu geben.

[out] pSubjectName

Null-terminierte Zeichenfolge, die den einfachen Antragstellernamen des Zertifikats enthält. Die RDNs im Antragstellernamen befinden sich in umgekehrter Reihenfolge gegenüber der Anzeige des Zertifikats. Der Antragstellername kann leer sein, wenn das Zertifikat keinen Antragstellernamen enthält. Um die Zeichenfolge frei zu geben, rufen Sie die CoTaskMemFree-Funktion auf.

Rückgabewert

In der folgenden Tabelle sind einige der möglichen Rückgabewerte aufgeführt.

Rückgabecode Beschreibung
S_OK
Das Zertifikat wurde erfolgreich abgerufen.
RPC_X_BAD_STUB_DATA
Der Auftrag gibt kein Zertifikat an, oder der Benutzer verfügt nicht über Berechtigungen für das Zertifikat.
RPC_X_NULL_REF_POINTER
Einer der Parameter ist NULL.

Hinweise

Sie verwenden die IBackgroundCopyJobHttpOptions::SetClientCertificateByID - oder IBackgroundCopyJobHttpOptions::SetClientCertificateByName-Methode , um das Zertifikat anzugeben.

Beispiele

Im folgenden Beispiel wird gezeigt, wie Informationen zum Clientzertifikat abgerufen werden. Im Beispiel wird davon ausgegangen, dass pJob auf einen gültigen Auftrag verweist.

#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();
  }

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile bits2_5.h (Bits.h einschließen)
Bibliothek Bits.lib

Weitere Informationen

IBackgroundCopyJobHttpOptions

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByID

IBackgroundCopyJobHttpOptions::SetClientCertificateByName