gpt4 book ai didi

winapi - OpenProcess 错误 87 参数无效

转载 作者:行者123 更新时间:2023-12-05 09:25:16 26 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序从当前目录中的 MinGW 发行版执行 make.exe,并使用其 STDOUT 数据和退出代码。我有一个处理 STDOUT 的句柄,我从中获取数据,使用 CreatePipe 创建。当我在该管道上收到 ERROR_HANDLE_EOF 时,我假设该进程已退出并尝试获取其退出代码:

if(session->pid == 0) return;
HANDLE hp = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_TERMINATE, TRUE, session->pid);
if(hp == NULL) {
printf("OpenProcess(%i) failed, error: %i\n",
session->pid, (int)GetLastError());
return;
}

我的代码适用于我测试过的所有其他 MinGW 实用程序(如 pwd、ls 等),我可以毫无问题地获得 STDOUT 和退出代码。但是当我在 make 上尝试时,上面的代码显示以下消息:

“OpenProcess(2032) 失败,错误:87”

我在谷歌上搜索了错误代码 87,它显示“参数无效”。我看不出像 2032 这样的正进程 ID 有什么无效的地方。有什么想法吗?

最佳答案

您应该使用 CreateProcess 中的句柄,而不是对 PID 使用 OpenProcess

OpenProcess 仅在进程对象仍然存在时才有效。当您调用 OpenProcess 时,如果进程对象已不存在 - 结果是使用无效参数的调用。

您使用其他实用程序获得的成功要么是由于竞争条件(有时可能会失败),要么是您使子进程的原始句柄保持打开状态。

关于winapi - OpenProcess 错误 87 参数无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com