Функция(метод) GrdCreateHandle создает защищенный контейнер.
Синтаксис
Deck of Cards |
---|
|
Card |
---|
| Code Block |
---|
| HANDLE GRD_API GrdCreateHandle(
HANDLE hGrd,
DWORD dwMode,
void *pReserved
); |
Expand |
---|
| hGrd | указатель на область памяти, зарезервированной для защищенного контейнера | dwMode | режим создания контейнера - монопольный или многопоточнный. В качестве значений используются константы GrdCHM_XXXXX | GrdCHM_SingleThread | Контейнер создается для работы в монопольном режиме | GrdCHM_MultiThread | Контейнер может быть использован для одновременной работы с ним из нескольких потоковработы контейнера в многопоточной среде. Начиная с версии 6.31 этот параметр игнорируется и должен быть равен константе GrdCHM_MultiThread, так как всегда используется режим одновременной работы из нескольких потоков. pReserved | зарезервировано. Параметр pReserved должен быть равен NULL |
|
Expand |
---|
title | Возвращаемое значение функции |
---|
| Хэндл защищенного контейнера. Если hGrd был задан равным NULL, то есть функция должна была зарезервировать память для контейнера самостоятельно, а в процессе создания защищенного контейнера возникла ошибка, функция вернет NULL. |
Expand |
---|
| Если hGrd равен NULL, то функция выделяет динамическую память для создания контейнера. В противном случае контейнер будет размещен в памяти по тому адресу, который указан в параметре hGrd. Размер этого блока памяти во избежание ошибок должен быть не меньше значения константы GrdContainerSize. При создании защищенного контейнера, внутри API создается критическая секция, через которую происходит синхронизация обращений к ключу из разных потоков. |
|
Card |
---|
| Code Block |
---|
| public static Handle GrdCreateHandle(GrdCHM Mode)
|
Expand |
---|
| Mode [in] Тип: GrdCHMхэндл, проверка которого будет осуществляться режим работы контейнера в многопоточной среде. Начиная с версии 6.31 этот параметр игнорируется и должен быть равен константе GrdCHM.MultiThread, так как всегда используется режим одновременной работы из нескольких потоков. |
Expand |
---|
title | Возвращаемое значение метода |
---|
| Хэндл защищенного контейнера. Тип: Handle |
Expand |
---|
| Защищённый контейнер всегда создаётся в динамической памяти. При создании защищенного контейнера, внутри API создается критическая секция, через которую происходит синхронизация обращений к ключу из разных потоков. |
| При Card |
---|
| Code Block |
---|
| public static Handle GrdCreateHandle(GrdCHM Mode) |
Expand |
---|
| Mode [in] Тип: GrdCHM режим работы контейнера в многопоточной среде. Начиная с версии 6.31 этот параметр игнорируется и должен быть равен константе GrdCHM.MultiThread, так как всегда используется режим одновременной работы из нескольких потоков. |
Expand |
---|
title | Возвращаемое значение метода |
---|
| Хэндл защищенного контейнера. Тип: Handle |
|
Если hGrd равен NULL, то функция выделяет память под контейнер сама. В противном случае контейнер будет размещен в памяти по тому адресу, который указан в параметре hGrd. Размер этого блока памяти во избежание ошибок должен быть не меньше значения константы GrdContainerSize. Guardant API может вызываться из различных потоков одного и того же приложения. В таких случаях необходимо синхронизировать вызовы, чтобы разные потоки не мешали друг другу. Параметр dwMode указывает, в каком режиме будет работать хэндл, в монопольном или многопоточном. Для удобства определены константы, которые можно использовать в качестве значений параметра dwMode. Защищённый контейнер всегда создаётся в динамической памяти. При создании защищенного контейнера, внутри API создается критическая секция, через которую происходит синхронизация обращений к ключу из разных потоков. |
| Использовать режим многопоточности рекомендуется только в тех случаях, когда работа с ключом действительно будет производиться из нескольких потоков. В остальных случаях следует создавать защищенный контейнер для использования ключа в монопольном режиме. |