ZwOpenProcess 函数 (ntddk.h)

ZwOpenProcess 例程打开进程对象的句柄,并设置对此对象的访问权限。

语法

NTSYSAPI NTSTATUS ZwOpenProcess(
  [out]          PHANDLE            ProcessHandle,
  [in]           ACCESS_MASK        DesiredAccess,
  [in]           POBJECT_ATTRIBUTES ObjectAttributes,
  [in, optional] PCLIENT_ID         ClientId
);

参数

[out] ProcessHandle

指向 HANDLE 类型的变量的指针。 ZwOpenProcess 例程将进程句柄写入此参数指向的变量。

[in] DesiredAccess

个ACCESS_MASK 值,该值包含调用方请求的进程对象的访问权限。

[in] ObjectAttributes

指向 OBJECT_ATTRIBUTES 结构的指针,该结构指定要应用于进程对象句柄的属性。 在 Windows Vista 及更高版本的 Windows 中,此结构的 ObjectName 字段必须设置为 NULL。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,此字段可以作为选项指向对象名称。 有关更多信息,请参见下面的“备注”部分。

[in, optional] ClientId

指向用于标识其进程要打开的线程的客户端 ID 的指针。 在 Windows Vista 及更高版本的 Windows 中,此参数必须是指向有效客户端 ID 的非 NULL 指针。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,此参数是可选的,如果 ObjectAttributes 指向的OBJECT_ATTRIBUTES结构指定对象名称,则可以设置为 NULL。 有关更多信息,请参见下面的“备注”部分。

返回值

如果调用成功,ZwOpenProcess 将返回STATUS_SUCCESS。 可能的返回值包括以下错误状态代码。

返回代码 说明
STATUS_INVALID_PARAMETER_MIX
在 Windows Vista 和更高版本的 Windows 中,调用方提供对象名称或未能提供客户端 ID。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,调用方同时提供对象名称和客户端 ID。
STATUS_INVALID_CID
指定的客户端 ID 无效。
STATUS_INVALID_PARAMETER
请求的访问权限对进程对象无效。
STATUS_ACCESS_DENIED
无法授予请求的访问权限。

备注

在 Windows Vista 和更高版本的 Windows 中, ClientId 参数必须指向标识其进程要打开的线程的客户端 ID。 此外,ObjectAttributes 指向的结构的 ObjectName 字段必须设置为 NULL

在 Windows Server 2003、Windows XP 和 Windows 2000 中,调用方可以选择提供客户端 ID 或对象名称 (,但不能同时提供) 。 如果 ObjectAttributes 指向的结构的 ObjectName 字段包含指向对象名称的非 NULL 指针,ClientId 必须为 NULL

注意 如果在用户模式下调用此函数,则应使用名称“NtOpenProcess”而不是“ZwOpenProcess”。
 
对于内核模式驱动程序的调用,Windows Native System Services 例程的 NtXxxZwXxx 版本在处理和解释输入参数的方式可能有所不同。 有关例程 的 NtXxxZwXxx 版本之间的关系的详细信息,请参阅 使用本机系统服务例程的 Nt 和 Zw 版本

要求

   
最低受支持的客户端 在 Windows 2000 和更高版本的 Windows 中可用。
目标平台 通用
标头 ntddk.h (包括 Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 符合性规则 HwStorPortProhibitedDDIs (storport) PowerIrpDDis (wdm)

另请参阅

ACCESS_MASK

OBJECT_ATTRIBUTES

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