Criando a nova funcionalidade
As seguintes funções estão entre as funções CryptoAPI que podem ser estendidas.
Função CryptoAPI | Definir nome da função OID | Cadeia de caracteres do 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 um OID existente e tipo de codificação, o código na função CryptoAPI, em si, é usado. Se uma dessas funções é chamada com um OID e 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, deve 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 tipo de codificação e OID recém-designado, 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 "OID function name string" na tabela anterior ou um nome diferente pode ser dado quando o novo código de função é registrado.
A nova função deve utilizar um protótipo adequado. Em todos os casos, exceto para CertOpenStore, este 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 a nova estrutura de dados C a ser colocada em um arquivo de cabeçalho incluído quando o programa do usuário é compilado.