Поделиться через


Функция CryptEnumProviderTypesA (wincrypt.h)

Важно Этот API не рекомендуется использовать. Новое и существующее программное обеспечение должно начать использовать API-интерфейсы шифрования следующего поколения. Корпорация Майкрософт может удалить этот API в будущих выпусках.
 
Функция CryptEnumProviderTypes извлекает первый или следующий типы поставщика служб шифрования (CSP), поддерживаемые на компьютере. Эта функция, используемая в цикле, последовательно извлекает все типы CSP, доступные на компьютере.

К типам поставщиков относятся PROV_RSA_FULL, PROV_RSA_SCHANNEL и PROV_DSS.

Синтаксис

BOOL CryptEnumProviderTypesA(
  [in]      DWORD dwIndex,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     DWORD *pdwProvType,
  [out]     LPSTR szTypeName,
  [in, out] DWORD *pcbTypeName
);

Параметры

[in] dwIndex

Индекс следующего типа поставщика для перечисления.

[in] pdwReserved

Зарезервировано для использования в будущем и должно иметь значение NULL.

[in] dwFlags

Зарезервировано для будущего использования и должно быть равно нулю.

[out] pdwProvType

Адрес значения DWORD , обозначающего перечислимый тип поставщика.

[out] szTypeName

Указатель на буфер, который получает данные из перечисленного типа поставщика. Это строка, включающая завершающий символ NULL . Некоторые типы поставщиков не имеют отображаемых имен, и в этом случае имя не возвращается, а возвращаемое значение, на которое указывает pcbTypeName , равно нулю.

Этот параметр может иметь значение NULL , чтобы получить размер имени для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.

[in, out] pcbTypeName

Указатель на значение DWORD , указывающее размер (в байтах) буфера, на который указывает параметр pszTypeName . При возврате функции значение DWORD содержит количество байтов, хранящихся в буфере. Некоторые типы поставщиков не имеют отображаемых имен, и в этом случае имя не возвращается, а возвращаемое значение, на которое указывает pcbTypeName , равно нулю.

Примечание При обработке данных, возвращаемых в буфере, приложения должны использовать фактический размер возвращаемых данных. Фактический размер может быть немного меньше размера буфера, указанного во входных данных. (На входных данных размеры буфера обычно указываются достаточно большими, чтобы убедиться, что максимально возможные выходные данные помещаются в буфер.) В выходных данных переменная, на которую указывает этот параметр, обновляется с учетом фактического размера данных, скопированных в буфер.
 

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

Если функция выполнена успешно, возвращается ненулевое значение (TRUE).

Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE). Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.

Коды ошибок, предваряемые NTE, создаются конкретным поставщиком служб CSP. Ниже приведены некоторые возможные коды ошибок.

Код возврата Описание
ERROR_NO_MORE_ITEMS
Больше нет элементов для перечисления.
ERROR_NOT_ENOUGH_MEMORY
В операционной системе не хватает памяти.
NTE_BAD_FLAGS
Параметр dwFlags имеет нераспознанное значение.
NTE_FAIL
Что-то не так с регистрацией типа.

Комментарии

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

Примеры

В следующем примере показан цикл со списком всех доступных типов поставщиков служб шифрования.

#include <stdio.h>
#include <windows.h>
#include <Wincrypt.h>
#pragma comment(lib, "advapi32.lib")

void main()
{
    
    // Copyright (C) Microsoft.  All rights reserved.
    // Declare and initialize variables.

    DWORD       dwIndex;
    DWORD       dwType;
    DWORD       cbName;
    LPTSTR      pszName;

    //--------------------------------------------------------------
    //   Print header lines for provider types.

    printf("Listing Available Provider Types:\n");
    printf("Provider type\tProvider Type Name\n");
    printf("_____________\t_____________________________________\n");

    // Loop through enumerating provider types.
    dwIndex = 0;
    while(CryptEnumProviderTypes(
           dwIndex,
           NULL,
           0,
           &dwType,
           NULL,
           &cbName
           ))
    {

        //-----------------------------------------------------------
        //  cbName returns the length of the name of the next
        //  provider type. Allocate memory in a buffer to retrieve
        //  that name.
        if (!(pszName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, cbName)))
        {
           printf("ERROR - LocalAlloc failed.\n");
           exit(1);
        }
        //-----------------------------------------------------------
        //  Get the provider type name.

        if (CryptEnumProviderTypes(
               dwIndex++,
               NULL,
               NULL,
               &dwType,   
               pszName,
               &cbName))     
        {
            printf ("     %4.0d\t%s\n",dwType, pszName);
        }
        else
        {
            printf("ERROR - CryptEnumProviderTypes\n");
            exit(1);
        }
        LocalFree(pszName);
    } // End of while loop.
}

Еще один пример, в котором используется функция CryptEnumProviderTypes , см. в разделе Пример программы C: перечисление поставщиков и типов поставщиков CSP.

Примечание

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

Требования

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

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

CryptEnumProviders

Функции поставщика услуг