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


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

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

Синтаксис

BOOL CryptGetDefaultProviderA(
  [in]      DWORD dwProvType,
  [in]      DWORD *pdwReserved,
  [in]      DWORD dwFlags,
  [out]     LPSTR pszProvName,
  [in, out] DWORD *pcbProvName
);

Параметры

[in] dwProvType

Тип поставщика, для которого необходимо найти имя CSP по умолчанию.

Ниже перечислены определенные типы поставщиков.

[in] pdwReserved

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

[in] dwFlags

Определены следующие значения флагов.

Значение Значение
CRYPT_USER_DEFAULT
0x00000002
Возвращает CSP контекста пользователя по умолчанию указанного типа.
CRYPT_MACHINE_DEFAULT
0x00000001
Возвращает CSP компьютера по умолчанию указанного типа.

[out] pszProvName

Указатель на символьный строковый буфер, заканчивающийся значением NULL, для получения имени поставщика служб CSP по умолчанию.

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

[in, out] pcbProvName

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

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

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

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

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

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

Код возврата Описание
ERROR_INVALID_PARAMETER
Один из параметров содержит недопустимое значение. Чаще всего это недопустимый указатель.
ERROR_MORE_DATA
Буфер для имени недостаточно велик.
ERROR_NOT_ENOUGH_MEMORY
В операционной системе не хватает памяти.
NTE_BAD_FLAGS
Параметр dwFlags имеет нераспознанное значение.

Комментарии

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

Примеры

В следующем примере извлекается имя поставщика CSP по умолчанию для типа поставщика PROV_RSA_FULL. Другой пример, в котором используется эта функция, см. в разделе Пример программы C: перечисление поставщиков И типов поставщиков CSP.

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

void main()
{

    DWORD       cbProvName=0;
    LPTSTR      pbProvName=NULL;
    // Copyright (C) Microsoft.  All rights reserved.
    // Get the length of the RSA_FULL default provider name.
    if (!(CryptGetDefaultProvider(
         PROV_RSA_FULL, 
         NULL, 
         CRYPT_MACHINE_DEFAULT,
         NULL, 
         &cbProvName))) 
    { 
      printf("Error getting the length of the default "
          "provider name.\n");
      exit(1);
    }

    // Allocate local memory for the name of the default provider.
    if (!(pbProvName = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, 
        cbProvName)))
    {
        printf("Error during memory allocation for "
            "provider name.\n");
        exit(1);
    }

    // Get the default provider name.
    if (CryptGetDefaultProvider(
        PROV_RSA_FULL, 
        NULL, 
        CRYPT_MACHINE_DEFAULT,
        pbProvName,
        &cbProvName)) 
    {
        printf("The default provider name is %s\n",pbProvName);
    }
    else
    {
        printf("Getting the name of the provider failed.\n");
        exit(1);
    }

    // Free resources when done.
    LocalFree(pbProvName);

}

Примечание

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

Требования

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

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

CryptSetProvider

CryptSetProviderEx

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