CryptEnumProviderTypesA 함수(wincrypt.h)

중요 이 API는 더 이상 사용되지 않습니다. 신규 및 기존 소프트웨어는 Cryptography Next Generation API 사용을 시작해야 합니다. Microsoft는 향후 릴리스에서 이 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

나중에 사용하도록 예약되며 0이어야 합니다.

[out] pdwProvType

열거된 공급자 유형을 지정하는 DWORD 값의 주소입니다.

[out] szTypeName

열거된 공급자 형식에서 데이터를 수신하는 버퍼에 대한 포인터입니다. 종결 NULL 문자를 포함하는 문자열입니다. 일부 공급자 형식에는 표시 이름이 없으며 이 경우 이름이 반환되지 않으며 pcbTypeName 에서 가리키는 반환된 값은 0입니다.

이 매개 변수는 메모리 할당을 위해 이름의 크기를 가져오는 NULL 일 수 있습니다. 자세한 내용은 알 수 없는 길이의 데이터 검색을 참조하세요.

[in, out] pcbTypeName

pszTypeName 매개 변수가 가리키는 버퍼의 크기(바이트)를 지정하는 DWORD 값에 대한 포인터입니다. 함수가 반환될 때 DWORD 값에는 버퍼에 저장되거나 저장될 바이트 수가 포함됩니다. 일부 공급자 형식에는 표시 이름이 없으며 이 경우 이름이 반환되지 않으며 pcbTypeName 에서 가리키는 반환된 값은 0입니다.

참고 버퍼에서 반환된 데이터를 처리할 때 애플리케이션은 반환된 데이터의 실제 크기를 사용해야 합니다. 실제 크기는 입력에 지정된 버퍼의 크기보다 약간 작을 수 있습니다. (입력에서 버퍼 크기는 일반적으로 가능한 가장 큰 출력 데이터가 버퍼에 맞도록 충분히 크게 지정됩니다.) 출력에서 이 매개 변수가 가리키는 변수는 버퍼에 복사된 데이터의 실제 크기를 반영하도록 업데이트됩니다.
 

반환 값

함수가 성공하면 반환 값은 0이 아닌 값(TRUE)입니다.

함수가 실패하면 반환 값은 0(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
헤더 wincrypt.h
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

CryptEnumProviders

서비스 공급자 함수