Erstellen der neuen Funktionalität
Die folgenden Funktionen gehören zu den CryptoAPI-Funktionen, die erweitert werden können.
CryptoAPI-Funktion | Name der OID-Funktion definieren | OID-Funktionsnamenzeichenfolge |
---|---|---|
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 der normalen Verwendung mit einem vorhandenen OID- und Codierungstyp wird der Code in der CryptoAPI-Funktion selbst verwendet. Wenn eine dieser Funktionen mit einem OID- und Codierungstyp aufgerufen wird, der code in der CryptoAPI-Funktion nicht behandelt wurde, muss eine neue Funktion, die die neue Funktionalität enthält, in einer DLL erstellt werden. Diese DLL muss in der Registrierung registriert oder im Arbeitsspeicher installiert sein.
Wenn eine der aufgeführten Funktionen mit dem neu festgelegten OID- und Codierungstyp aufgerufen wird, wird der Code in der neuen DLL anstelle des Codes verwendet, der als Teil der CryptoAPI-Funktion bereitgestellt wird.
Der Name der neu entwickelten Funktion kann der Name sein, der unter "OID-Funktionsnamenzeichenfolge" in der vorherigen Tabelle aufgeführt ist, oder ein anderer Name kann angegeben werden, wenn der neue Funktionscode registriert wird.
Die neue Funktion muss einen entsprechenden Prototyp verwenden. In allen Fällen mit Ausnahme von CertOpenStore ist dieser Prototyp identisch mit der CryptoAPI-Funktion, die die neue Funktion aufruft. Im Fall von CertOpenStore ist der Prototyp wie folgt.
#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
);
Hinweis
Wenn die Prototypen nicht übereinstimmen, wird der Systemstapel beschädigt.
Zusätzlich zum Bereitstellen des Codes für die neue Funktion in einer DLL erfordert das Erweitern der Funktionalität von CryptEncodeObject oder CryptDecodeObject eine Typdefinition für die neue C-Datenstruktur, die in einer Kopfzeilendatei platziert werden soll, wenn das Programm des Benutzers kompiliert wird.