Criando a nova funcionalidade
As funções a seguir estão entre as funções CryptoAPI que podem ser estendidas.
Função CryptoAPI | Nome da função OID definido | Cadeia de caracteres de nome da função 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" |
Em uso normal com uma OID e um tipo de codificação existentes, o código na função CryptoAPI, em si, é usado. Se uma dessas funções for chamada com um OID e um tipo de codificação que o código na função CryptoAPI não foi projetado para manipular, uma nova função, contendo a nova funcionalidade, deverá ser criada em uma DLL. Essa DLL deve ser registrada no registro ou instalada na memória.
Quando uma das funções listadas é chamada com o OID e o tipo de codificação recém-designados, o código na nova DLL é usado em vez do código fornecido como parte da função CryptoAPI.
O nome da função recém-desenvolvida pode ser o nome listado em "Cadeia de caracteres de nome da função OID" na tabela anterior ou um nome diferente pode ser fornecido quando o novo código de função é registrado.
A nova função deve usar um protótipo apropriado. Em todos os casos, exceto no CertOpenStore, esse protótipo é o mesmo que a função CryptoAPI que chama a nova função. No caso de CertOpenStore , o protótipo é o seguinte.
#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
);
Observação
Se os protótipos não corresponderem, a pilha do sistema será corrompida.
Além de fornecer o código para a nova função em uma DLL, estender a funcionalidade de CryptEncodeObject ou CryptDecodeObject requer uma definição de tipo para que a nova estrutura de dados C seja colocada em um arquivo de cabeçalho incluído quando o programa do usuário é compilado.