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 中 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_ATTRIBUTES和DUPLICATE_SAME_ACCESS标志来替代一个或两个默认值。
如果在用户模式下调用此函数,则应使用名称“NtDuplicateObject”而不是“ZwDuplicateObject”。
对于来自内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxx 和 ZwXxx 版本在处理和解释输入参数的方式上的行为可能有所不同。 有关例程的 NtXxx 和 ZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000。 |
目标平台 | 通用 |
标头 | ntifs.h (包括 Ntdef.h、Ntifs.h、Fltkernel.h) |
Library | Ntoskrnl.lib |
IRQL | PASSIVE_LEVEL |