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