Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Извлекает сертификат клиента из задания.
Синтаксис
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, определяющий сертификат. Чтобы освободить большой двоичный объект после завершения, вызовите функцию CoTaskMemFree .
[out] pSubjectName
Строка, завершающая значение NULL, содержащая простое имя субъекта сертификата. RDNs в имени субъекта находятся в обратном порядке от того, что отображает сертификат. Имя субъекта может быть пустым, если сертификат не содержит имени субъекта. Чтобы освободить строку при завершении, вызовите функцию CoTaskMemFree .
Возвращаемое значение
В следующей таблице перечислены некоторые возможные возвращаемые значения.
| Код возврата | Description |
|---|---|
|
Успешно получен сертификат. |
|
Задание не указывает сертификат или у пользователя нет разрешений на сертификат. |
|
Одним из параметров является 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 |
| целевая платформа | Виндоус |
| Header | bits2_5.h (include Bits.h) |
| Library | Bits.lib |
См. также
IBackgroundCopyJobHttpOptions::RemoveClientCertificate