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_ATTRIBUTES属性 成员的说明。

[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”。

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

要求

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

另请参阅

ACCESS_MASK

OBJECT_ATTRIBUTES

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