新しい機能の作成
次の関数は、拡張できる CryptoAPI 関数の 1 つです。
CryptoAPI 関数 | OID 関数名の定義 | OID 関数名の文字列 |
---|---|---|
CryptEncodeObject | CRYPT_OID_ENCODE_ OBJECT_FUNC |
"CryptDllEncodeObject" |
CryptDecodeObject | CRYPT_OID_DECODE_ OBJECT_FUNC |
"CryptDllDecodeObject" |
CertOpenStore | CRYPT_OID_OPEN_ STORE_PROV_FUNC |
"CertDllOpenStoreProv" |
CertVerifyCTLUsage | CRYPT_OID_VERIFY_ CTL_USAGE_FUNC |
"CertDllVerifyCTLUsage" |
CertVerifyRevocation | CRYPT_OID_VERIFY_ REVOCATION_FUNC |
"CertDllVerifyRevocation" |
既存の OID とエンコードの種類で通常の使用では、CryptoAPI 関数自体のコードが使用されます。 これらの関数の 1 つが OID で呼び出され、CryptoAPI 関数のコードが処理するように設計されていないエンコードの種類である場合は、新しい機能を含む新しい関数を DLL に作成する必要があります。 その DLL は、レジストリに登録するか、メモリにインストールする必要があります。
リストされている関数の 1 つが新しく指定された OID とエンコードの種類で呼び出されると、CryptoAPI 関数の一部として提供されるコードではなく、新しい DLL 内のコードが使用されます。
新しく開発された関数の名前は、前の表の "OID 関数名文字列" の下に一覧表示されている名前にすることも、新しい関数コードを登録するときに別の名前を指定することもできます。
新しい関数では、適切なプロトタイプを使用する必要があります。 CertOpenStore を除くすべてのケースで、このプロトタイプは新しい関数を呼び出す CryptoAPI 関数と同じです。 CertOpenStore の場合、プロトタイプは次のようになります。
#include <windows.h>
BOOL WINAPI CertDllOpenStoreProv(
IN LPCSTR lpszStoreProvider,
IN DWORD dwEncodingType,
IN HCRYPTPROV hCryptProv,
IN DWORD dwFlags,
IN const void *pvPara,
IN HCERTSTORE hCertStore,
IN OUT PCERT_STORE_PROV_INFO pStoreProvInfo
);
注意
プロトタイプが一致しない場合、システム スタックが破損します。
DLL で新しい関数のコードを提供するだけでなく、 CryptEncodeObject または CryptDecodeObject の機能を拡張するには、新しい C データ構造の型定義を、ユーザーのプログラムのコンパイル時に含まれるヘッダー ファイルに配置する必要があります。