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


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

Функция BCryptDuplicateKey создает дубликат симметричного ключа.

Синтаксис

NTSTATUS BCryptDuplicateKey(
  [in]  BCRYPT_KEY_HANDLE hKey,
  [out] BCRYPT_KEY_HANDLE *phNewKey,
  [out] PUCHAR            pbKeyObject,
  [in]  ULONG             cbKeyObject,
  [in]  ULONG             dwFlags
);

Параметры

[in] hKey

Дескриптор ключа для дублирования. Это должен быть дескриптор симметричного ключа.

[out] phNewKey

Указатель на переменную BCRYPT_KEY_HANDLE, которая получает дескриптор повторяющегося ключа. Этот дескриптор используется в последующих функциях, требующих ключа, например BCryptEncrypt. Этот дескриптор должен быть освобожден, если он больше не нужен, передав его в функцию BCryptDekey.

[out] pbKeyObject

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

Эту память можно освободить только после уничтожения дескриптора ключа phNew Key .

[in] cbKeyObject

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

[in] dwFlags

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

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

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

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

Возвращаемый код Описание
STATUS_SUCCESS
Функция была успешной.
STATUS_BUFFER_TOO_SMALL
Размер ключевого объекта, указанного параметром cbKeyObject, недостаточно велик для хранения ключевого объекта.
STATUS_INVALID_HANDLE
Дескриптор ключа в параметре hKey hKey недопустим. Это значение также возвращается, если ключ для дубликата не является симметричным ключом.
STATUS_INVALID_PARAMETER
Один или несколько параметров недопустимы.

Замечания

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

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

Требования

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