Creación de la nueva funcionalidad

Las siguientes funciones se encuentran entre las funciones CryptoAPI que se pueden extender.

Función CryptoAPI Definición del nombre de la función OID Cadena de nombre de función 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"

 

En uso normal con un tipo de codificación y OID existente, se usa el código de la función CryptoAPI. Si se llama a una de estas funciones con un tipo de OID y codificación que el código de la función CryptoAPI no se diseñó para controlar, se debe crear una nueva función que contenga la nueva funcionalidad en un archivo DLL. Ese archivo DLL debe estar registrado en el Registro o instalado en la memoria.

Cuando se llama a una de las funciones enumeradas con el tipo de codificación y OID recién designado, el código del nuevo archivo DLL se usa en lugar del código proporcionado como parte de la función CryptoAPI.

El nombre de la función recién desarrollada puede ser el nombre que aparece en "Cadena de nombre de función OID" en la tabla anterior o se puede asignar un nombre diferente cuando se registra el nuevo código de función.

La nueva función debe usar un prototipo adecuado. En todos los casos excepto CertOpenStore, este prototipo es el mismo que la función CryptoAPI que llama a la nueva función. En el caso de CertOpenStore , el prototipo es el siguiente.

#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
);

Nota:

Si los prototipos no coinciden, se dañará la pila del sistema.

 

Además de proporcionar el código para la nueva función en un archivo DLL, extender la funcionalidad de CryptEncodeObject o CryptDecodeObject requiere una definición de tipo para que la nueva estructura de datos de C se coloque en un archivo de encabezado incluido cuando se compile el programa del usuario.