创建新功能
以下函数是可以扩展的 CryptoAPI 函数之一。
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 函数中的代码本身。 如果其中一个函数是使用 OID 调用的,并且未设计 CryptoAPI 函数中的代码编码类型,则必须在 DLL 中创建包含新功能的新函数。 该 DLL 必须在注册表中注册或安装在内存中。
使用新指定的 OID 和编码类型调用其中一个列出的函数时,将使用新 DLL 中的代码,而不是作为 CryptoAPI 函数的一部分提供的代码。
新开发函数的名称可以是上表中“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 数据结构的类型定义放在标头文件中。