Creazione della nuova funzionalità
Le funzioni seguenti sono tra le funzioni CryptoAPI che possono essere estese.
Funzione CryptoAPI | Nome funzione OID definisci | Stringa del nome della funzione 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" |
In uso normale con un tipo OID e codifica esistente, viene usato il codice nella funzione CryptoAPI stesso. Se una di queste funzioni viene chiamata con un tipo OID e codifica che il codice nella funzione CryptoAPI non è stato progettato per gestire, una nuova funzione, contenente la nuova funzionalità, deve essere creata in una DLL. Tale DLL deve essere registrata nel Registro di sistema o installata in memoria.
Quando una delle funzioni elencate viene chiamata con il nuovo tipo di codifica e OID designato, il codice nella nuova DLL viene usato anziché il codice fornito come parte della funzione CryptoAPI.
Il nome della funzione appena sviluppata può essere il nome elencato in "stringa nome funzione OID" nella tabella precedente o in un nome diverso quando viene registrato il nuovo codice di funzione.
La nuova funzione deve usare un prototipo appropriato. In tutti i casi, ad eccezione di CertOpenStore, questo prototipo è lo stesso della funzione CryptoAPI che chiama la nuova funzione. Nel caso di CertOpenStore , il prototipo è il seguente.
#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
Se i prototipi non corrispondono, lo stack di sistema verrà danneggiato.
Oltre a fornire il codice per la nuova funzione in una DLL, estendere la funzionalità di CryptEncodeObject o CryptDecodeObject richiede una definizione di tipo per la nuova struttura di dati C da inserire in un file di intestazione incluso quando il programma dell'utente viene compilato.