无法获取所创建进程的句柄或PID

问题描述 投票:0回答:1

我需要获取新创建进程的句柄。

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

c++ windows winapi pid handle
1个回答
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
进行比较并不是一个好主意。

© www.soinside.com 2019 - 2024. All rights reserved.