Partilhar via


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.