我需要获取新创建进程的句柄。
OpenProcess()
有一个 HANDLE
返回类型。但这需要一个过程PID
.
我尝试将
PI.hProcess
传递给函数。在CreateProcessW()
之后,所有PI
的成员的值为0
我尝试使用 if:
进行简单的错误处理STARTUPINFOW SI = { sizeof(SI) };
PROCESS_INFORMATION PI;
if (!::CreateProcessW(L"Dummy", NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &SI, &PI))
{
std::wcout << L"Failed to create a process";
}
在输出窗口中输出
"Failed to create a process"
。我在 Process Explorer 中看不到进程,并且 PI 的所有值仍然是 0
PI.hProcess
这是进程的 handle - 这是
OpenProcess()
返回的值(但访问标志与 PROCESS_ALL_ACCESS
不同)。
PI.dwProcessId
这是进程的 ID - 这是您可以传递给
OpenProcess()
的值。
(...以及您似乎正在寻找的价值。)
PID = CreateProcess(...)
这将返回一个 boolean 值:如果进程已创建,则不等于
FALSE
;如果创建进程失败,则不等于 FALSE
。
如果该值为
FALSE
,则 PI.dwProcessId
和 PI.hProcess
包含 invalid 值。
请注意,Windows API 使用 (typedef-) 类型
BOOL
来存储布尔值(而不是类型 bool
),并使用大写常量 TRUE
和 FALSE
。另请注意,类型 BOOL
可以容纳多个值,并且任何不等于 FALSE
的值都表示“true”。因此,使用 == TRUE
进行比较并不是一个好主意。