Compartilhar via


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

Recupera o certificado do cliente a partir do trabalho.

Sintaxe

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

Parâmetros

[out] pStoreLocation

Identifica o local de um repositório do sistema a ser usado para procurar o certificado. Para obter valores possíveis, consulte a enumeração BG_CERT_STORE_LOCATION .

[out] pStoreName

Cadeia de caracteres terminada em nulo que contém o nome do repositório de certificados. Para liberar a cadeia de caracteres quando terminar, chame a função CoTaskMemFree .

[out] ppCertHashBlob

Hash SHA1 que identifica o certificado. Para liberar o blob quando terminar, chame a função CoTaskMemFree .

[out] pSubjectName

Cadeia de caracteres terminada em nulo que contém o nome da entidade simples do certificado. Os RDNs no nome da entidade estão na ordem inversa do que o certificado exibe. O nome da entidade poderá ficar vazio se o certificado não contiver um nome de entidade. Para liberar a cadeia de caracteres quando terminar, chame a função CoTaskMemFree .

Retornar valor

A tabela a seguir lista alguns dos valores retornados possíveis.

Código de retorno Descrição
S_OK
O certificado foi recuperado com êxito.
RPC_X_BAD_STUB_DATA
O trabalho não especifica um certificado ou o usuário não tem permissões para o certificado.
RPC_X_NULL_REF_POINTER
Um dos parâmetros é NULL.

Comentários

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

Exemplos

O exemplo a seguir mostra como recuperar informações sobre o certificado do cliente. O exemplo pressupõe que pJob aponta para um trabalho 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 Valor
Cliente mínimo com suporte Windows Vista
Servidor mínimo com suporte Windows Server 2008
Plataforma de Destino Windows
Cabeçalho bits2_5.h (inclua Bits.h)
Biblioteca Bits.lib

Confira também

IBackgroundCopyJobHttpOptions

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByID

IBackgroundCopyJobHttpOptions::SetClientCertificateByName