Compartir a través de


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

Recupera el certificado de cliente del trabajo.

Sintaxis

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

Parámetros

[out] pStoreLocation

Identifica la ubicación de un almacén del sistema que se va a usar para buscar el certificado. Para conocer los valores posibles, consulte la enumeración BG_CERT_STORE_LOCATION .

[out] pStoreName

Cadena terminada en NULL que contiene el nombre del almacén de certificados. Para liberar la cadena cuando termine, llame a la función CoTaskMemFree .

[out] ppCertHashBlob

Hash SHA1 que identifica el certificado. Para liberar el blob cuando haya terminado, llame a la función CoTaskMemFree .

[out] pSubjectName

Cadena terminada en NULL que contiene el nombre de sujeto simple del certificado. Los RDN del nombre del firmante están en el orden inverso de lo que muestra el certificado. El nombre del firmante puede estar vacío si el certificado no contiene un nombre de sujeto. Para liberar la cadena cuando termine, llame a la función CoTaskMemFree .

Valor devuelto

En la tabla siguiente se enumeran algunos de los posibles valores devueltos.

Código devuelto Descripción
S_OK
Recuperó correctamente el certificado.
RPC_X_BAD_STUB_DATA
El trabajo no especifica un certificado o el usuario no tiene permisos para el certificado.
RPC_X_NULL_REF_POINTER
Uno de los parámetros es NULL.

Comentarios

Use el método IBackgroundCopyJobHttpOptions::SetClientCertificateByID o IBackgroundCopyJobHttpOptions::SetClientCertificateByName para especificar el certificado.

Ejemplos

En el ejemplo siguiente se muestra cómo recuperar información sobre el certificado de cliente. En el ejemplo se supone que pJob apunta a un trabajo válido.

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

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado bits2_5.h (incluya Bits.h)
Library Bits.lib

Consulte también

IBackgroundCopyJobHttpOptions

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByID

IBackgroundCopyJobHttpOptions::SetClientCertificateByName