Функция ZwDuplicateObject (ntifs.h)

Подпрограмма ZwDuplicateObject создает дескриптор, который является дубликатом указанного исходного дескриптора.

Синтаксис

NTSYSAPI NTSTATUS ZwDuplicateObject(
  [in]            HANDLE      SourceProcessHandle,
  [in]            HANDLE      SourceHandle,
  [in, optional]  HANDLE      TargetProcessHandle,
  [out, optional] PHANDLE     TargetHandle,
  [in]            ACCESS_MASK DesiredAccess,
  [in]            ULONG       HandleAttributes,
  [in]            ULONG       Options
);

Параметры

[in] SourceProcessHandle

Дескриптор исходного процесса для дублируемого дескриптора.

[in] SourceHandle

Повторяющийся дескриптор.

[in, optional] TargetProcessHandle

Дескриптор целевого процесса, который получает новый дескриптор. Этот параметр является необязательным и может быть указан как NULL, если флаг DUPLICATE_CLOSE_SOURCE установлен в разделе Параметры.

[out, optional] TargetHandle

Указатель на переменную HANDLE, в которую подпрограмма записывает новый повторяющийся дескриптор. Повторяющийся дескриптор действителен в указанном целевом процессе. Этот параметр является необязательным и может быть указан как NULL, если повторяющийся дескриптор не создается.

[in] DesiredAccess

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

[in] HandleAttributes

Объект ULONG, указывающий требуемые атрибуты для нового дескриптора. Дополнительные сведения об атрибутах см. в описании элемента Attributes в OBJECT_ATTRIBUTES.

[in] Options

Набор флагов для управления поведением операции дублирования. Присвойте этому параметру значение ноль или побитовое ИЛИ одного или нескольких следующих флагов.

Имя флага Описание
DUPLICATE_SAME_ATTRIBUTES Вместо использования параметра HandleAttributes скопируйте атрибуты из исходного дескриптора в целевой дескриптор.
DUPLICATE_SAME_ACCESS Вместо использования параметра DesiredAccess скопируйте права доступа из исходного дескриптора в целевой дескриптор.
DUPLICATE_CLOSE_SOURCE Закройте исходный дескриптор.

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

ZwDuplicateObject возвращает STATUS_SUCCESS, если вызов выполнен успешно. В противном случае возвращается соответствующий код состояния ошибки.

Комментарии

Исходный дескриптор вычисляется в контексте указанного исходного процесса. Вызывающий процесс должен иметь PROCESS_DUP_HANDLE доступ к исходному процессу. Дублирующийся дескриптор создается в таблице дескрипторов указанного целевого процесса. Вызывающий процесс должен иметь PROCESS_DUP_HANDLE доступ к целевому процессу.

По умолчанию дублирующийся дескриптор создается с атрибутами, указанными параметром HandleAttributes , и с правами доступа, указанными в параметре DesiredAccess . При необходимости вызывающий объект может переопределить одно или оба значения по умолчанию, установив флаги DUPLICATE_SAME_ATTRIBUTES и DUPLICATE_SAME_ACCESS в параметре Options .

Если вызов этой функции происходит в пользовательском режиме, следует использовать имя NtDuplicateObject вместо ZwDuplicateObject.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.

Требования

Требование Значение
Минимальная версия клиента Windows 2000.
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntdef.h, Ntifs.h, Fltkernel.h)
Библиотека Ntoskrnl.lib
IRQL PASSIVE_LEVEL

См. также раздел

ACCESS_MASK

OBJECT_ATTRIBUTES

Использование версий Nt и Zw собственных процедур системных служб