Partilhar via


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.