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


Функция 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 [только классические приложения]
целевая платформа Виндоус
заголовка wincrypt.h
библиотеки Advapi32.lib
DLL Advapi32.dll

См. также

CryptSetProvider

CryptSetProviderEx

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