CryptGetDefaultProviderA 함수(wincrypt.h)

중요 이 API는 더 이상 사용되지 않습니다. 신규 및 기존 소프트웨어는 암호화 차세대 API 사용을 시작해야 합니다. Microsoft는 이후 릴리스에서 이 API를 제거할 수 있습니다.
 
CryptGetDefaultProvider 함수는 로컬 컴퓨터 또는 현재 사용자에 대해 지정된 공급자 유형의 기본 CSP(암호화 서비스 공급자)를 찾습니다. dwProvType 매개 변수에 지정된 공급자 형식의 기본 CSP 이름은 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

기본 CSP의 이름을 수신하기 위한 null로 끝나는 문자열 버퍼에 대한 포인터입니다.

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

[in, out] pcbProvName

pszProvName 매개 변수가 가리키는 버퍼의 크기(바이트)를 지정하는 DWORD 값에 대한 포인터입니다. 함수가 반환될 때 DWORD 값에는 저장되거나 버퍼에 저장될 바이트 수가 포함됩니다.

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

반환 값

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

함수가 실패하면 반환 값은 0(FALSE)입니다. 확장된 오류 정보는 GetLastError를 호출합니다.

NTE에 의해 앞에 있는 오류 코드는 사용 중인 특정 CSP에 의해 생성됩니다. 가능한 오류 코드에는 다음이 포함됩니다.

반환 코드 설명
ERROR_INVALID_PARAMETER
매개 변수 중 하나에는 유효하지 않은 값이 포함되어 있습니다. 이는 가장 자주 유효하지 않은 포인터입니다.
ERROR_MORE_DATA
이름의 버퍼가 충분히 크지 않습니다.
ERROR_NOT_ENOUGH_MEMORY
운영 체제에 메모리가 부족합니다.
NTE_BAD_FLAGS
dwFlags 매개 변수에는 인식할 수 없는 값이 있습니다.

설명

이 함수는 현재 로컬 컴퓨터 또는 현재 사용자의 기본값으로 설정된 설치된 CSP를 결정합니다. 이 정보는 사용자에게 표시되는 경우가 많습니다.

예제

다음 예제에서는 PROV_RSA_FULL 공급자 형식에 대한 기본 CSP의 이름을 검색합니다. 이 함수를 사용하는 또 다른 예제는 예제 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
헤더 wincrypt.h
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

CryptSetProvider

CryptSetProviderEx

서비스 공급자 함수