OpenProcess 函数 (processthreadsapi.h)

打开现有的本地进程对象。

语法

HANDLE OpenProcess(
  [in] DWORD dwDesiredAccess,
  [in] BOOL  bInheritHandle,
  [in] DWORD dwProcessId
);

参数

[in] dwDesiredAccess

对进程对象的访问。 针对进程的安全描述符检查此访问权限。 此参数可以是一个或多个 进程访问权限

如果调用方已启用 SeDebugPrivilege 特权,则会授予请求的访问权限,而不考虑安全描述符的内容。

[in] bInheritHandle

如果此值为 TRUE,则此进程创建的进程将继承句柄。 否则,进程不会继承此句柄。

[in] dwProcessId

要打开的本地进程的标识符。

如果指定的进程是系统空闲进程 (0x00000000) ,则函数将失败,最后一个错误代码为 ERROR_INVALID_PARAMETER。 如果指定的进程是系统进程或客户端服务器 Run-Time 子系统 (CSRSS) 进程之一,则此函数将失败,最后一个错误代码是 ERROR_ACCESS_DENIED 其访问限制阻止用户级代码打开它们。

如果使用 GetCurrentProcessId 作为此函数的参数,请考虑使用 GetCurrentProcess 而不是 OpenProcess 来提高性能。

返回值

如果函数成功,则返回值是指定进程的打开句柄。

如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。

注解

若要打开另一个本地进程的句柄并获取完全访问权限,必须启用 SeDebugPrivilege 特权。 有关详细信息,请参阅 更改令牌中的权限

OpenProcess 函数返回的句柄可用于需要进程句柄的任何函数(如 wait 函数),前提是请求了适当的访问权限。

完成句柄后,请务必使用 CloseHandle 函数将其关闭。

示例

有关示例,请参阅 拍摄快照和查看进程

要求

要求
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 processthreadsapi.h (包括 Windows Server 2003 上的 Windows.h、Windows Vista、Windows 7、Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

AssignProcessToJobObject

CloseHandle

CreateProcess

CreateRemoteThread

DuplicateHandle

GetCurrentProcess

GetCurrentProcessId

GetExitCodeProcess

GetModuleFileNameEx

GetPriorityClass

进程和线程函数

进程

ReadProcessMemory

SetPriorityClass

SetProcessWorkingSetSize

TerminateProcess

VirtualProtectEx

WriteProcessMemory