새 기능 설치
메모리에 새 기능을 설치하면 성능이 향상될 수 있습니다. CryptoAPI 함수는 레지스트리에서 DLL을 검색하기 전에 메모리에서 기능을 검색합니다. 기능을 설치하기 전에 DLL을 로드해야 합니다.
CryptInstallOIDFunctionAddress 는 새 기능의 주소를 설치합니다. DLL의 DllMain 함수에 배치해야 합니다.
hModule이 CryptInstallOIDFunctionAddress에 전달되면 설치되면 Crypt32.dll 언로드될 때까지 DLL이 언로드되지 않습니다.
다음 예제에서는 CryptInstallOIDFunctionAddress 함수를 호출합니다.
#include <windows.h>
#include <stdio.h>
#define X509_ENCODE_FUNC_COUNT (sizeof(X509EncodeFuncTable) / \
sizeof(X509EncodeFuncTable[0]))
static BOOL WINAPI OssX509CtlUsageEncode(
IN DWORD dwCertEncodingType,
IN LPCSTR lpszStructType,
IN PCTL_USAGE pInfo,
OUT BYTE *pbEncoded,
IN OUT DWORD *pcbEncoded
);
static const CRYPT_OID_FUNC_ENTRY X509EncodeFuncTable[] = {
X509_ENHANCED_KEY_USAGE, OssX509CtlUsageEncode,
};
BOOL WINAPI DllMain(
HMODULE hModule,
ULONG ulReason,
LPVOID lpReserved)
{
switch (ulReason)
{
case DLL_PROCESS_ATTACH:
if (!CryptInstallOIDFunctionAddress(
hModule,
X509_ASN_ENCODING,
CRYPT_OID_ENCODE_OBJECT_FUNC,
X509_ENCODE_FUNC_COUNT,
X509EncodeFuncTable,
0))
{
printf("Install OID function address failed.");
return FALSE;
}
break;
default:
break;
}
return TRUE;
}
//-------------------------------------------------------------------
// CTL Usage (Enhanced Key Usage) Encode (OSS X509)
//-------------------------------------------------------------------
static BOOL WINAPI OssX509CtlUsageEncode(
IN DWORD /*dwCertEncodingType*/,
IN LPCSTR /*lpszStructType*/,
IN PCTL_USAGE pInfo,
OUT BYTE *pbEncoded,
IN OUT DWORD *pcbEncoded)
{
//Encoding logic goes here.
}