Création de la nouvelle fonctionnalité
Les fonctions suivantes sont parmi les fonctions CryptoAPI qui peuvent être étendues.
Fonction CryptoAPI | Définir le nom de la fonction OID | Chaîne de nom de fonction 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 » |
Dans une utilisation normale avec un type d’OID et d’encodage existant, le code de la fonction CryptoAPI, lui-même, est utilisé. Si l’une de ces fonctions est appelée avec un type d’OID et d’encodage que le code de la fonction CryptoAPI n’a pas été conçu pour gérer, une nouvelle fonction, contenant la nouvelle fonctionnalité, doit être créée dans une DLL. Cette DLL doit être inscrite dans le Registre ou installée en mémoire.
Quand l’une des fonctions répertoriées est appelée avec le type d’encodage et d’OID nouvellement désigné, le code de la nouvelle DLL est utilisé plutôt que le code fourni dans le cadre de la fonction CryptoAPI.
Le nom de la fonction nouvellement développée peut être le nom répertorié sous « Chaîne de nom de fonction OID » dans le tableau précédent ou un autre nom peut être donné lorsque le nouveau code de fonction est inscrit.
La nouvelle fonction doit utiliser un prototype approprié. Dans tous les cas, à l’exception de CertOpenStore, ce prototype est identique à la fonction CryptoAPI qui appelle la nouvelle fonction. Dans le cas de CertOpenStore , le prototype est le suivant.
#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
);
Notes
Si les prototypes ne correspondent pas, la pile système est endommagée.
En plus de fournir le code de la nouvelle fonction dans une DLL, l’extension des fonctionnalités de CryptEncodeObject ou CryptDecodeObject nécessite une définition de type pour que la nouvelle structure de données C soit placée dans un fichier d’en-tête inclus lorsque le programme de l’utilisateur est compilé.