Обязательный параметр, может быть равен CSP_FAST_CODE_DEFAULT ,
CSP_FAST_CODE_NO , CSP_FAST_CODE_USER при вызове
функции CPSetProvParam . В
первых двух случаях считывание указателей не производится, в
последнем считываются новые указатели на функции переключения.
CSP_FAST_CODE_USER применяется
только в режиме ядра ОС! При использовании в функции CPGetProvParam , в параметре
возвращаются флаги, определяющие набор провереных на включенный код
функций. Указание, какие функции проверять на включенный код,
передается во флагах dwFlags . Если в режиме ядра
пользовательские функции захвата были установлены, не забудьте
снять их перед завершением работы Вашего драйвера! В противном
случае драйвер провайдера будет по-прежнему пытаться обращаться по
старым адресам при выполнении криптографических операций. При
остановке Вашего драйвера следует вызвать CPSetProvParam с параметром
PP_FAST_CODE, установив в структуре UsesFunctions=CSP_FAST_CODE_DEFAULT . Если
применен флаг CRYPT_FAST_CODE_GET_SETFN, при выходе CSP_FAST_CODE_GET_SETFN будет
установлен в 1, если провайдер может использовать быстрый код, и 0
- иначе. Если установлен флаг CRYPT_FAST_CODE_ALL_FUNCTIONS , будут
проверяться все функции, и на выходе будут установлены все флаги
CSP_FAST_CODE_E_ECB , CSP_FAST_CODE_E_CBC , CSP_FAST_CODE_E_OFB , CSP_FAST_CODE_E_CFB , CSP_FAST_CODE_D_ECB , CSP_FAST_CODE_D_CBC , CSP_FAST_CODE_D_OFB , CSP_FAST_CODE_D_CFB , CSP_FAST_CODE_MD_ECB ,
CSP_FAST_CODE_GR3411SP ,
CSP_FAST_CODE_GR3411H ,
CSP_FAST_CODE_GR3411HV ,
CSP_FAST_CODE_HASH , CSP_FAST_CODE_IMIT , CSP_FAST_CODE_MULT , в 1, если
соответствующая функция использует быстрый код, и 0 - иначе. В
режиме пользователя следует вместо флага
CRYPT_FAST_CODE_ALL_FUNCTIONS использовать
CRYPT_FAST_CODE_ALL_USER_FUNCTIONS, а в режиме ядра ОС -
CRYPT_FAST_CODE_ALL_KERNEL_FUNCTIONS. На выходе флаг CSP_FAST_CODE_ALL_FUNCTIONS
равен 1, если быстрый код работает во всех выбранных функциях, и 0
если хотя бы одна из выбранных функций не сработала. Поведение
невыбранных флагов неопределено.
kernel_fpu_begin
Указатель на функцию захвата SSE2. Используется только в режиме
ядра ОС! Функция должна возвращать 1, если захват удался, 0, если
захват не удался. На вход функции будет подаваться указатель на
буфер, необходимый для сохранения значений регистров, управляющих
флагов, и другой информации. Размер буфера передается во втором
параметре. Стандартно он не превышает 512 байт. Третий параметр -
условное значение, равное числу байт, передаваемых для быстрого
шифрования. Третий параметр нужен для вычисления, выгодно ли
захватывать SSE2.
kernel_fpu_end
Указатель на функцию освобождения SSE2. Используется только в
режиме ядра ОС! Первые два параметра как у kernel_fpu_begin.
Функция возвращает 1, если удалось освободить SSE2, и 0 в противном
случае. Если функция kernel_fpu_begin вернула 0, то kernel_fpu_end
вызываться не будет!
Windows
2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet
Explorer 6.0 или старше. Windows
NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP
2.0 ). Solaris: 9
Update 4 или выше. FreeBSD:
FreeBSD 5.2 или выше Linux: RedHat
7.3, RedHad 9.0. Файл описания:
Прототип описан в файле WinCryptEx.h. Ядро Windows
NT: IRQL < DISPATCH_LEVEL