BCryptOpenAlgorithmProvider 함수(bcrypt.h)

BCryptOpenAlgorithmProvider 함수는 CNG 공급자를 로드하고 초기화합니다.

구문

NTSTATUS BCryptOpenAlgorithmProvider(
  [out] BCRYPT_ALG_HANDLE *phAlgorithm,
  [in]  LPCWSTR           pszAlgId,
  [in]  LPCWSTR           pszImplementation,
  [in]  ULONG             dwFlags
);

매개 변수

[out] phAlgorithm

CNG 공급자 핸들을 수신하는 BCRYPT_ALG_HANDLE 변수에 대한 포인터입니다. 이 핸들 사용을 마치면 BCryptCloseAlgorithmProvider 함수에 전달하여 해제합니다.

[in] pszAlgId

요청된 암호화 알고리즘을 식별하는 null로 끝나는 유니코드 문자열에 대한 포인터입니다. 표준 CNG 알고리즘 식별자 또는 등록된 다른 알고리즘의 식별자 중 하나일 수 있습니다.

[in] pszImplementation

로드할 특정 공급자를 식별하는 null로 끝나는 유니코드 문자열에 대한 포인터입니다. 암호화 기본 공급자의 등록된 별칭입니다. 이 매개 변수는 선택 사항이며 필요하지 않은 경우 NULL 일 수 있습니다. 이 매개 변수가 NULL이면 지정된 알고리즘의 기본 공급자가 로드됩니다.

참고pszImplementation 매개 변수 값이 NULL이면 CNG는 pszAlgId 매개 변수로 지정된 알고리즘에 대해 등록된 각 공급자를 우선 순위에 따라 열려고 시도하고 성공적으로 열린 첫 번째 공급자의 핸들을 반환합니다. 핸들의 수명 동안 모든 BCrypt*** 암호화 API는 성공적으로 열린 공급자를 사용합니다.
 
Windows Server 2008 및 Windows Vista: CNG는 Microsoft CNG 공급자로 대체하려고 시도합니다.

다음은 미리 정의된 공급자 이름입니다.

의미
MS_PRIMITIVE_PROVIDER
"Microsoft 기본 공급자"
기본 Microsoft CNG 공급자를 식별합니다.
MS_PLATFORM_CRYPTO_PROVIDER
L"Microsoft Platform Crypto Provider"
Microsoft에서 제공하는 TPM 키 스토리지 공급자를 식별합니다.

[in] dwFlags

함수의 동작을 수정하는 플래그입니다. 이 값은 0이거나 다음 값 중 하나 이상의 조합일 수 있습니다.

의미
BCRYPT_ALG_HANDLE_HMAC_FLAG
공급자는 지정된 해시 알고리즘을 사용하여 HMAC( 해시 기반 메시지 인증 코드 ) 알고리즘을 수행합니다. 이 플래그는 해시 알고리즘 공급자에서만 사용됩니다.
BCRYPT_PROV_DISPATCH
공급자를 비페이지 메모리 풀에 로드합니다. 이 플래그가 없으면 공급자가 페이징된 메모리 풀에 로드됩니다. 이 플래그를 지정하면 모든 종속 개체가 해제되기 전에 반환된 핸들을 닫아서는 안 됩니다.
참고 이 플래그는 커널 모드에서만 지원되며 공급자에 대한 후속 작업을 디스패치 수준에서 처리할 수 있습니다. 공급자가 디스패치 수준에서 호출되는 것을 지원하지 않는 경우 이 플래그를 사용하여 열 때 오류가 반환됩니다.
 
Windows Server 2008 및 Windows Vista: 이 플래그는 Microsoft 알고리즘 공급자에서만 지원되며 해시 알고리즘대칭 키암호화 알고리즘에 대해서만 지원됩니다.
BCRYPT_HASH_REUSABLE_FLAG
재사용 가능한 해시 개체를 만듭니다. 개체는 BCryptFinishHash를 호출한 직후에 새 해시 작업에 사용할 수 있습니다. 자세한 내용은 CNG를 사용하여 해시 만들기를 참조하세요.

Windows Server 2008 R2, Windows 7, Windows Server 2008 및 Windows Vista: 이 플래그는 지원되지 않습니다.

반환 값

함수의 성공 또는 실패를 나타내는 상태 코드를 반환합니다.

가능한 반환 코드에는 다음이 포함되지만 이에 국한되지는 않습니다.

반환 코드 설명
STATUS_SUCCESS
함수가 성공했습니다.
STATUS_NOT_FOUND
지정된 알고리즘 ID에 대한 공급자를 찾을 수 없습니다.
STATUS_INVALID_PARAMETER
하나 이상의 매개 변수가 유효하지 않습니다.
STATUS_NO_MEMORY
메모리 할당 오류가 발생했습니다.

설명

알고리즘 공급자를 찾고 로드하고 초기화하는 데 필요한 작업의 수와 유형으로 인해 BCryptOpenAlgorithmProvider 함수는 비교적 시간이 많이 걸리는 함수입니다. 따라서 알고리즘 공급자를 반복해서 열고 닫는 대신 두 번 이상 사용할 알고리즘 공급자 핸들을 캐시하는 것이 좋습니다.

BCryptOpenAlgorithmProvider 는 사용자 모드 또는 커널 모드에서 호출할 수 있습니다. 커널 모드 호출자는 PASSIVE_LEVELIRQL에서 실행되어야 합니다.

커널 모드에서 이 함수를 호출하려면 DDK(드라이버 개발 키트)의 일부인 Cng.lib를 사용합니다. Windows Server 2008 및 Windows Vista: 커널 모드에서 이 함수를 호출하려면 Ksecdd.lib를 사용합니다.

Windows 10 CNG는 더 이상 암호화 구성에 대한 모든 업데이트를 따르지 않습니다. 새 기본 공급자를 추가하거나 알고리즘 공급자의 기본 설정 순서를 변경하는 것과 같은 특정 변경 내용을 다시 부팅해야 할 수 있습니다. 이 때문에 새로 구성된 공급자를 사용하여 BCryptOpenAlgorithmProvider 를 호출하기 전에 다시 부팅해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 bcrypt.h
라이브러리 Bcrypt.lib
DLL Bcrypt.dll

추가 정보

BCryptCloseAlgorithmProvider