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


Функция 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 , должен быть производным от дескриптора алгоритма, возвращенного поставщиком, который был открыт с помощью флага BCRYPT_PROV_DISPATCH , а все указатели, передаваемые в функцию BCryptDetadataKey , должны ссылаться на неупакованную (или заблокированную) память.

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

Требования

Требование Значение
Минимальная версия клиента Windows Vista [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2008 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header bcrypt.h
Библиотека Bcrypt.lib
DLL Bcrypt.dll