Функция SCardGetCardTypeProviderNameA (winscard.h)

Функция SCardGetCardTypeProviderName возвращает имя модуля (библиотека динамической компоновки), который содержит поставщик для заданного имени карта и типа поставщика.

Синтаксис

LONG SCardGetCardTypeProviderNameA(
  [in]      SCARDCONTEXT hContext,
  [in]      LPCSTR       szCardName,
  [in]      DWORD        dwProviderId,
  [out]     CHAR         *szProvider,
  [in, out] LPDWORD      pcchProvider
);

Параметры

[in] hContext

Дескриптор, идентифицирующий контекст resource manager. Контекст диспетчера ресурсов можно задать с помощью предыдущего вызова SCardEstablishContext. Это значение может иметь значение NULL , если вызов SCardGetCardTypeProviderName не направляется в определенный контекст.

[in] szCardName

Имя типа карта, с которым связано это имя поставщика.

[in] dwProviderId

Идентификатор поставщика, связанного с этим типом карта.

Значение Значение
SCARD_PROVIDER_PRIMARY
1
Функция извлекает имя основного поставщика услугсмарт-карта в виде строки GUID.
SCARD_PROVIDER_CSP
2
Функция извлекает имя поставщика служб шифрования.
SCARD_PROVIDER_KSP
3
Функция извлекает имя поставщика хранилища ключей (KSP) смарт-карта.
SCARD_PROVIDER_CARD_MODULE
0x80000001
Функция извлекает имя модуля карта.

[out] szProvider

Строковая переменная для получения имени поставщика после успешного выполнения этой функции.

[in, out] pcchProvider

Указатель на значение DWORD . При входе pcchProvider предоставляет длину буфера szProvider в символах. Если это значение равно SCARD_AUTOALLOCATE, то szProvider преобразуется в указатель на указатель байтов и получает адрес блока памяти, содержащего строку. Этот блок памяти должен быть освобожден путем вызова SCardFreeMemory.

В выходных данных это значение представляет фактическое количество символов в переменной szProvider, включая признак конца null.

Возвращаемое значение

Эта функция возвращает различные значения в зависимости от того, успешно или неудачно.

Код возврата Описание
Успешно
SCARD_S_SUCCESS.
Failure
Код ошибки. Дополнительные сведения см. в разделе Возвращаемые значения смарт-карты.

Комментарии

Эта функция не перенаправляется, но вызов функции в сеансе удаленного рабочего стола не приведет к ошибке. Это означает только, что результат будет получен с удаленного компьютера, а не с локального компьютера.

После успешного выполнения этой функции значение в szProvider можно использовать в качестве третьего параметра в вызове CryptAcquireContext.

Примеры

В следующем примере показано, как получить имя поставщика для указанного контекста чтения. В примере предполагается, что hContext является допустимым дескриптором, полученным при предыдущем вызове функции SCardEstablishContext .

LPTSTR szProvider = NULL;
LPTSTR szCardName = _T("WindowsCard");
DWORD  chProvider = SCARD_AUTOALLOCATE;
LONG   lReturn = SCARD_S_SUCCESS;

// Retrieve the provider name.
// hContext was set by SCardEstablishContext.
lReturn = SCardGetCardTypeProviderName(hContext,
                                       szCardName,
                                       SCARD_PROVIDER_CSP,
                                       (LPTSTR)&szProvider,
                                       &chProvider);
if (SCARD_S_SUCCESS == lReturn)
{
    BOOL fSts = TRUE;
    HCRYPTPROV hProv = NULL;
  
  // Acquire a Cryptographic operation context.
    fSts = CryptAcquireContext(&hProv,
                               NULL,
                               szProvider,
                               PROV_RSA_FULL,
                               0);
    // Perform Cryptographic operations with smart card
    // ...

    // Free memory allocated by SCardGetCardTypeProviderName.
    lReturn = SCardFreeMemory(hContext, szProvider);
}

Примечание

Заголовок winscard.h определяет SCardGetCardTypeProviderName в качестве псевдонима, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header winscard.h
Библиотека Winscard.lib
DLL Winscard.dll

См. также раздел

SCardEstablishContext

SCardFreeMemory

SCardSetCardTypeProviderName