КриптоПро CSP  

CPC_LOCK_FUNCS_

Структура настроек блокировок с ожиданием.

Если хотя бы одна из функций rwlock_init, rwlock_destroy, rwlock_wrlock или rwlock_unlock этой структуры не установлена (равна NULL), то провайдер функционирует в режиме без ожидающих блокировок.

При этом ответственность за недопущение параллельного вызова функций, влияющих на глобальное состояние провайдера (CPCAcquireContext, CPCReleaseContext, CPCSetProvParam (PP_USE_HARDWARE_RNG, PP_RANDOM)), приложение берёт на себя.

Кроме того, в этом режиме можно создавать контексты только с флагом CRYPT_NOSERIALIZE, исключающим ожидающие блокировки в данном контексте. (см. CPCAcquireContext).

Функция rwlock_rdlock - опциональна и, в случае её отсуствия, приравнивается к rwlock_wrlock. В случае отсуствия функйии rwlock_rdlock, все операции в рамках одного криптографического контекста будут выполнятся последовательно (однако, операции в разных контекстах будут выполнятся паралельно).

typedef struct CPC_LOCK_FUNCS_ {
CPC_InitRWLock_Callback * rwlock_init;
CPC_DestroyRWLock_Callback * rwlock_destroy;
CPC_RDLockRWLock_Callback * rwlock_rdlock;
CPC_WRLockRWLock_Callback * rwlock_wrlock;
CPC_UnlockRWLock_Callback * rwlock_unlock;
LPVOID lpArg; } CPC_LOCK_FUNCS, *LPCPC_LOCK_FUNCS;

Члены

rwlock_init
Callback-функция для операции инициализации блокировки. Имеет тип CPC_InitRWLock.
rwlock_destroy
Callback-функция для операции уничтожения блокировки. Имеет тип CPC_DestroyRWLock.
rwlock_rdlock
Опциональная Callback-функция для операции разделяемой блокирования (блокировки на чтение). Имеет тип CPC_RDLockRWLock.
rwlock_wrlock
Callback-функция для операции эксклюзивной блокировки (блокировки на запись). Имеет тип CPC_WRLockRWLock.
rwlock_unlock
Callback-функция для операции разблокирования. Имеет тип CPC_UnlockRWLock.
lpArg
Аргумент для Callback-функций.

Примечания

Следует заметить, что одновременный доступ к криптографическим операциям над объеками ключей и хэш-функций приводит к неопределённым криптографческим результатам. Поэтому, при возникновении "соревнований" такого рода, ожидания не происходит. В этих случаях возвращаются ошибки NT_BAD_KEY и NTE_BAD_HASH.

См. также

CPC_CONFIG_