Функция 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 |
См. также раздел
Использование версий Nt и Zw собственных процедур системных служб