КриптоПро CSP  

CPCAcquireContext

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

DWORD CPCAPI CPCAcquireContext(
  HCRYPTMODULE hCSP,
  HCRYPTPROV * phProv,
  CHAR * pszContainer,
  DWORD dwFlags,
  PVTABLEPROVSTRUC pVTable
);

Аргументы

hCSP
[in] Указатель на таблицу функций криптопровайдера. Получается при помощи функции CPCCreateProvider()
phProv
[out] Адрес, по которому функция копирует дескриптор криптопровайдера.
pszContainer
[in] Имя ключевого контейнера. Так как в режиме ядра ОС использование закрытых ключей на носителях невозможно, параметр всегда равен NULL.
dwFlags
[in] Параметр имеет нулевое или одно из следующих значений:
Значение dwFlags Описание
CRYPT_VERIFYCONTEXT Приложение не имеет доступа к закрытым ключам ключевого контейнера. Флаг используется в приложениях, в которых требуется только проверка цифровой подписи. Операции, обычно необходимые в этом случае, получение дескрипторов открытых ключей, хэширование и проверка подписи. При вызове функции CryptAcquireContext в MS CryptoAPI 2.0 World Wide Web link с этим флагом криптопровайдер не требует от пользователя ввода ключевой информации. Параметр pszContainer игнорируется, но рекомендуется устанавливать его значение в NULL.
CRYPT_SILENT Флаг, запрещающий криптопровайдеру "КриптоПро CSP 3.9" использовать какой-либо пользовательский интерфейс (UI) при выполнении операций с данным контекстом. Если дальнейшие вызовы функций криптопровайдера требуют отображения графического интерфейса, то криптопровайдер возвратит ошибку NTE_SILENT_CONTEXT.
CRYPT_NOSERIALIZE Флаг, запрещающий криптопровайдеру "КриптоПро CSP 3.9" использовать ждущие блокировки при операциях создания/удаления объектов в данном контексте. При этом ответственность за недопущение параллельного вызова таких функций берёт на себя приложение. Параллельные обращения к таким функциям над одним и тем же контекстом возвращают ошибку.
CRYPT_TOKEN_SHARED Флаг контекста взаимодействия с ключевым носителем в режиме разделения секрета, флаг предназначен для взаимодействия с функциональными ключевыми носителями по протоколам, разработанным ООО КриптоПРО.
pVTable
[in] Указатель на структуру _VTABLEPROVSTRUC , которая содержит список callback функций, представляемых операционной системой для использования криптопровайдером.

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

При успешном завершении функция возвращает 0 (S_OK), в противном случае возвращается соответствующий код ошибки (см. таблицу).
Коды возвратаОписание
ERROR_INVALID_PARAMETERОдин из параметров содержит некорректное значение. Чаще всего это некорректный указатель.
ERROR_BUSYКлючевой контейнер с данным именем был создан иным процессом и в настоящее время не может использоваться данным процессом. Если эта ошибка возникает при обработке контейнера в одном процессе, разрешить коллизию можно вызвав функцию CPCReleaseContext().
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Пользователь прервал операцию.

Требования:

Ядро FreeBSD: 7/8/9 или выше
Ядро Linux: ядро 2.4.x/2.6.x/3.0.х/3.2.х или выше
Ядро Solaris: 10/11 или выше.
Ядро Windows 2000 или выше: Необходимо Windows 2000 SP4 или старше.
Файл описания: Прототип описан в файле wincspc.h.
Ядро ОС: При использовании в ядре ОС CPCAcquireContext допустимо вызывать только с флагами CRYPT_VERIFYCONTEXT|CRYPT_SILENT.

См. также

CPCReleaseContext() ,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