Partager via


Méthode IBackgroundCopyJobHttpOptions ::GetClientCertificate (bits2_5.h)

Récupère le certificat client à partir du travail.

Syntaxe

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

Paramètres

[out] pStoreLocation

Identifie l’emplacement d’un magasin système à utiliser pour rechercher le certificat. Pour connaître les valeurs possibles, consultez l’énumération BG_CERT_STORE_LOCATION .

[out] pStoreName

Chaîne terminée par null qui contient le nom du magasin de certificats. Pour libérer la chaîne lorsque vous avez terminé, appelez la fonction CoTaskMemFree .

[out] ppCertHashBlob

Hachage SHA1 qui identifie le certificat. Pour libérer l’objet blob lorsque vous avez terminé, appelez la fonction CoTaskMemFree .

[out] pSubjectName

Chaîne terminée par null qui contient le nom d’objet simple du certificat. Les RDN dans le nom de l’objet sont dans l’ordre inverse de ce que le certificat affiche. Le nom de l’objet peut être vide si le certificat ne contient pas de nom d’objet. Pour libérer la chaîne lorsque vous avez terminé, appelez la fonction CoTaskMemFree .

Valeur retournée

Le tableau suivant répertorie certaines des valeurs de retour possibles.

Code de retour Description
S_OK
Le certificat a été récupéré.
RPC_X_BAD_STUB_DATA
Le travail ne spécifie pas de certificat ou l’utilisateur n’a pas d’autorisations sur le certificat.
RPC_X_NULL_REF_POINTER
L’un des paramètres est NULL.

Remarques

Vous utilisez la méthode IBackgroundCopyJobHttpOptions ::SetClientCertificateByID ou IBackgroundCopyJobHttpOptions ::SetClientCertificateByName pour spécifier le certificat.

Exemples

L’exemple suivant montre comment récupérer des informations sur le certificat client. L’exemple suppose que pJob pointe vers un travail valide.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
Serveur minimal pris en charge Windows Server 2008
Plateforme cible Windows
En-tête bits2_5.h (include Bits.h)
Bibliothèque Bits.lib

Voir aussi

IBackgroundCopyJobHttpOptions

IBackgroundCopyJobHttpOptions ::RemoveClientCertificate

IBackgroundCopyJobHttpOptions ::SetClientCertificateByID

IBackgroundCopyJobHttpOptions ::SetClientCertificateByName