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


Функция 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, указывающий требуемые атрибуты для нового дескриптора. Дополнительные сведения об атрибутах см. в описании элемента атрибутов в 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 в параметре Параметры.

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

Для вызовов драйверов в режиме ядра NtXxx и ZwXxx версии подпрограммы Windows Native System Services могут вести себя по-разному в том, как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между NtXxx и ZwXxx версиями подпрограммы см. в разделе Using Nt and Zw Versions of the Native System Services Routines.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 2000.
целевая платформа Всеобщий
заголовка ntifs.h (include Ntdef.h, Ntifs.h, Fltkernel.h)
библиотеки Ntoskrnl.lib
IRQL PASSIVE_LEVEL

См. также

ACCESS_MASK

OBJECT_ATTRIBUTES

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