Крипто-Про CSP

CPAcquireContext

Функция CPAcquireContext() используется для создания дескриптора криптопровайдера с именем ключевого контейнера, определённым параметром pszContainer .

BOOL WINAPI CPAcquireContext(
  HCRYPTPROV * phProv,
  CHAR * pszContainer,
  DWORD dwFlags,
  PVTABLEPROVSTRUC pVTable
);

Аргументы

phProv
[out] Адрес, по которому функция копирует дескриптор криптопровайдера.
pszContainer
[in] Имя ключевого контейнера. Это указатель на строку, длиной не больше, чем MAX_PATH знаков, включая признак конца строки. Если данный параметр - NULL, то криптопровайдер будет использовать в качестве имени контейнера имя пользователя, вошедшего в систему. Пользователь может получить имя используемого контейнера функцией CPGetProvParam(). Подробнее см. Дополнительные параметры и определения .
dwFlags
[in] Параметр имеет нулевое или одно из следующих значений:
Значение dwFlags Описание
CRYPT_VERIFYCONTEXT Приложение не имеет доступа к закрытым ключам ключевого контейнера. Флаг используется в приложениях, в которых требуется только проверка цифровой подписи. Операции, обычно необходимые в этом случае, – получение дескрипторов открытых ключей, хеширование и проверка подписи. При вызове функции CryptAcquireContext в MS CryptoAPI 2.0 World Wide Web link с этим флагом криптопровайдер не требует от пользователя ввода ключевой информации.
CRYPT_NEWKEYSET Если флаг установлен, то будет создан новый ключевой контейнер с именем, соответствующим pszContainer . Если pszContainer - NULL, то в качестве имени контейнера используется имя пользователя, вошедшего в систему.
CRYPT_MACHINE_KEYSET Флаг может использоваться при вызове функции CryptAcquireContext в MS CryptoAPI 2.0 World Wide Web link c CRYPT_NEW_KEYSET или флагом CRYPT_DELETE_KEYSET. В этом случае ключи будут сохранены в ключе HKEY_LOCAL_MACHINE системного реестра. Флаг предназначен для использования криптопровайдера в составе приложений, не имеющих доступа к пользовательскому разделу реестра (сервис, драйвер и т.д.).
CRYPT_DELETEKEYSET Ключевой контейнер, соответствующий pszContainer , удаляется. Если pszContainer - NULL, то удаляется ключевой контейнер, заданный по умолчанию (см. Дополнительные параметры и определения ). Все ключевые пары в ключевом контейнере также уничтожаются. Когда флаг CRYPT_DELETEKEYSET установлен, значение, возвращенное в phProv , не определено и повторный вызов функции CPReleaseContext() с тем же дескриптором phProv также не определен.
CRYPT_SILENT Флаг, запрещающий криптопровайдеру "КриптоПро CSP" использовать какой-либо пользовательский интерфейс (UI) при выполнении операций с данным контекстом. Если дальнейщие вызовы функций криптопровайдера требуют отображения графического интерфейса, то криптопровайдер возвратит ошибку NTE_SILENT_CONTEXT.
pVTable
[in] Указатель на структуру _VTABLEPROVSTRUC , которая содержит список callback функций, представляемых операционной системой для использования криптопровайдером.

Возвращаемые значения:

При успешном завершении функция возвращает TRUE, в противном случае возвращается FALSE. Если возвращается FALSE, соответствующий код ошибки (см. таблицу) может быть получен через функцию GetLastError().
Коды возврата Описание
ERROR_BUSY Ключевой контейнер с данным именем был создан иным процессом и в настоящее время не может использоваться данным поцессом. Если эта ошибка возникает при обработке контейнера в одном процессе, разрешить коллизию можно вызвав функцию CPReleaseContext().
NTE_BAD_FLAGS Некорректное значение параметра dwFlags .
NTE_BAD_KEYSET Ключевой контейнер не был открыт или не существует.
NTE_BAD_KEYSET_PARAM Используется некорректное значение параметра pszContainer . Ошибка так же может возникнуть при открытии с флагом CRYPT_SILENT и неоднозначности в выборе носителя.
NTE_BAD_SIGNATURE Не прошла проверка цифровой подписи DLL криптопровайдера. DLL или цифровая подпись искажены.
NTE_EXISTS Параметр dwFlags установлен в CRYPT_NEWKEYSET, а ключевой контейнер уже существует.
NTE_KEYSET_ENTRY_BAD Ключевой контейнер, соответствующий pszContainer найден, но искажен.
NTE_KEYSET_NOT_DEF Ключевой контейнер, соответствующий pszContainer, не существует.
NTE_NO_MEMORY Криптопровайдер во время операции исчерпал память.
NTE_TOKEN_KEYSET_STORAGE_FULL Недостаточно места на носителе для сохранения информации.
NTE_SILENT_CONTEXT Операция не может быть выполнена без пользовательского интерфейса.
SCARD_W_REMOVED_CARD Носитель контейнера был удален из считывателя.
SCARD_W_CANCELLED_BY_USER Пользователь прервал операцию.

Требования:

Windows 2000/XP/2003: Необходимо Windows 2000 SP4 или старше с Internet Explorer 6.0 или старше.
Windows NT/95/98/ME: CSP 3.0 не поддерживает (см. КриптоПро CSP 2.0 World Wide Web link ).
Solaris: 9 Update 4 или выше.
FreeBSD: FreeBSD 5.2 или выше
Linux: RedHat 7.3, RedHad 9.0.
Файл описания: Прототип описан в файле wincsp.h.
Ядро Windows NT: IRQL < DISPATCH_LEVEL
Ядро ОС: При использовании в ядре ОС CPAcquireContext допустимо вызывать только с флагами CRYPT_VERIFYCONTEXT|CRYPT_SILENT.

См. также:

CPReleaseContext() ,CPAcquireContext в MS CSP World Wide Web link ,CryptAcquireContext в MS CryptoAPI 2.0 World Wide Web link ,CryptSetProvParam в MS CryptoAPI 2.0 World Wide Web link

Крипто-Про CSP Версия: 3.0 Сборка 3293
Что Вы думаете по поводу данной статьи?
Закажите CD c Крипто-Про CSP