Поделиться через


Функция BCryptDuplicateHash (bcrypt.h)

Функция BCryptDuplicateHash дублирует существующий хэш или код проверки подлинности сообщений (MAC). Повторяющийся объект содержит все состояния и данные, содержащиеся в исходном объекте в точке дублирования.

Синтаксис

NTSTATUS BCryptDuplicateHash(
  [in]  BCRYPT_HASH_HANDLE hHash,
  [out] BCRYPT_HASH_HANDLE *phNewHash,
  [out] PUCHAR             pbHashObject,
  [in]  ULONG              cbHashObject,
  [in]  ULONG              dwFlags
);

Параметры

[in] hHash

Дескриптор хэша или MAC-объекта для дублирования.

[out] phNewHash

Указатель на значение BCRYPT_HASH_HANDLE, которое получает дескриптор, представляющий повторяющийся хэш-объект или ОБЪЕКТ MAC.

[out] pbHashObject

Указатель на буфер, который получает повторяющийся хэш-объект или объект MAC. Параметр cbHashObject содержит размер этого буфера. Требуемый размер этого буфера можно получить путем вызова функции BCryptGetProperty для получения свойства BCRYPT_OBJECT_LENGTH. Это обеспечит размер хэш-объекта для указанного алгоритма.

При освобождении дубликата хэш-дескриптора освободит эту память.

[in] cbHashObject

Размер в байтах буфера pbHashObject.

[in] dwFlags

Набор флагов, изменяющих поведение этой функции. В настоящее время флаги не определены, поэтому этот параметр должен быть равен нулю.

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

Возвращает код состояния, указывающий на успешность или сбой функции.

Возможные коды возврата включают в себя, но не ограничиваются следующими.

Возвращаемый код Описание
STATUS_SUCCESS
Функция была успешной.
STATUS_BUFFER_TOO_SMALL
Размер хэш-объекта, указанного параметром cbHashObject, недостаточно велик для хранения хэш-объекта.
STATUS_INVALID_HANDLE
Хэш-дескриптор в параметре hHash недопустим.
STATUS_INVALID_PARAMETER
Один или несколько параметров недопустимы.

Замечания

Эта функция полезна при вычислении хэша или MAC через блок общих данных. После обработки общих данных хэш-объект или объект MAC можно дублировать, а затем уникальные данные можно добавить в отдельные объекты.

В зависимости от того, какие режимы процессора поддерживает поставщик, BCryptDuplicateHash можно вызывать из пользовательского режима или режима ядра. Вызывающие серверы режима ядра могут выполняться в PASSIVE_LEVELIRQL или DISPATCH_LEVEL IRQL. Если текущий уровень IRQL DISPATCH_LEVEL, то дескриптор, предоставленный в параметре hHash hHash, должен быть производным от дескриптора алгоритма, возвращаемого поставщиком, который был открыт с помощью флага BCRYPT_PROV_DISPATCH, а все указатели, передаваемые в функцию BCryptDeskKey, должны ссылаться на неупакованную (или заблокированную) память.

Чтобы вызвать эту функцию в режиме ядра, используйте Cng.lib, которая входит в состав пакета средств разработки драйверов (DDK). Windows Server 2008 и Windows Vista: для вызова этой функции в режиме ядра используйте Ksecdd.lib.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows Vista [классические приложения | Приложения UWP]
минимальный поддерживаемый сервер Windows Server 2008 [классические приложения | Приложения UWP]
целевая платформа Виндоус
заголовка bcrypt.h
библиотеки Bcrypt.lib
DLL Bcrypt.dll