Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Следующие функции являются одними из функций CryptoAPI, которые можно расширить.
Функция CryptoAPI | Определение имени функции OID | Строка имени функции 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" |
При обычном использовании с существующим OID и типом кодировки используется код непосредственно в функции CryptoAPI. Если одна из этих функций вызывается с OID и типом кодировки, которые не могут быть обработаны функцией CryptoAPI, то должна быть создана новая функция, содержащая эту новую функциональность, в библиотеке DLL. Эта библиотека DLL должна быть зарегистрирована в реестре или установлена в памяти.
Если одна из перечисленных функций вызывается с новым типом OID и кодировкой, код в новой библиотеке DLL используется вместо кода, предоставленного в рамках функции CryptoAPI.
Имя недавно созданной функции может быть именем, перечисленным в разделе "Строка имени функции OID" в предыдущей таблице или другое имя можно указать при регистрации нового кода функции.
Новая функция должна использовать соответствующий прототип. Во всех случаях, кроме CertOpenStore, этот прототип совпадает с функцией CryptoAPI, которая вызывает новую функцию. В случае CertOpenStore прототип выглядит следующим образом.
#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
);
Заметка
Если прототипы не соответствуют, системный стек будет поврежден.
Помимо предоставления кода для новой функции в библиотеке DLL, расширение функциональности CryptEncodeObject или CryptDecodeObject требует определения типа для новой структуры данных C, которая должна быть помещена в заголовочный файл, включаемый при компиляции программы пользователя.