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

要接收新句柄的目标进程的句柄。 此参数是可选的,如果“选项”中设置了DUPLICATE_CLOSE_SOURCE标志,则可以指定为 NULL。

[out, optional] TargetHandle

指向 HANDLE 变量的指针,例程在该变量中写入新的重复句柄。 重复的句柄在指定的目标进程中有效。 此参数是可选的,如果未创建重复句柄,则可以将其指定为 NULL。

[in] DesiredAccess

一个 ACCESS_MASK 值,该值指定新句柄的所需访问权限。

[in] HandleAttributes

一个 ULONG,指定新句柄的所需属性。 有关属性的详细信息,请参阅 OBJECT_ATTRIBUTESAttributes 成员的说明。

[in] Options

一组标志,用于控制重复操作的行为。 将此参数设置为零,或设置为以下一个或多个标志的按位 OR。

标志名称 说明
DUPLICATE_SAME_ATTRIBUTES 将属性从源句柄复制到目标句柄,而不是使用 HandleAttributes 参数。
DUPLICATE_SAME_ACCESS 将访问权限从源句柄复制到目标句柄,而不是使用 DesiredAccess 参数。
DUPLICATE_CLOSE_SOURCE 关闭源句柄。

返回值

如果调用成功,ZwDuplicateObject 将返回STATUS_SUCCESS。 否则,它将返回相应的错误状态代码。

注解

源句柄是在指定源进程的上下文中计算的。 调用进程必须具有对源进程的 PROCESS_DUP_HANDLE 访问权限。 重复句柄是在指定目标进程的句柄表中创建的。 调用进程必须具有对目标进程的 PROCESS_DUP_HANDLE 访问权限。

默认情况下,使用 HandleAttributes 参数指定的属性以及 DesiredAccess 参数指定的访问权限创建重复句柄。 如有必要,调用方可以通过在 Options 参数中设置DUPLICATE_SAME_ATTRIBUTESDUPLICATE_SAME_ACCESS标志来替代一个或两个默认值。

如果在用户模式下调用此函数,则应使用名称“NtDuplicateObject”而不是“ZwDuplicateObject”。

对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

要求
最低受支持的客户端 Windows 2000。
目标平台 通用
标头 ntifs.h (包括 Ntdef.h、Ntifs.h、Fltkernel.h)
Library Ntoskrnl.lib
IRQL PASSIVE_LEVEL

另请参阅

ACCESS_MASK

OBJECT_ATTRIBUTES

使用本机系统服务例程的 Nt 和 Zw 版本