gpt4 book ai didi

c++ - EnumProcessModules 在 32 位 win7 上失败并出现错误 299

转载 作者:行者123 更新时间:2023-11-30 02:54:53 30 4
gpt4 key购买 nike

我的代码在win7 32bit上运行,但是当我使用EnumProcessModules时,它返回false,getlasterror()返回错误代码299,声明程序是32bit的,这条语句不能运行在 64 位系统上。

我想知道为什么会这样,为什么系统会认为我在 64 位操作系统上运行?

我使用的代码:

         HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
if (hProcess)
{
HMODULE hMod = NULL;
DWORD cbNeeded = 0;
if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
{
//do something here...
}
}

dwPid 是我要操作的进程的id。

PS.这个错误只发生在我的一台测试机上,其他都很好。那么这个问题可能与特定机器或系统配置有关?

最佳答案

虽然你发布这个问题已经有一段时间了。但我想试一试。

原因可能是因为您在代码中使用了 CreateProcessA.. 并突然调用 EnumProcessModules。因此 windows 到那时无法创建 ModuleInfo。它返回错误 299(认为它是 64 位系统.. 因为它失败了读取内存)。

实际上我也被困在这个问题上并想通了......在看了你的帖子之后。谢谢

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspxCreatProcess 备注.. 它要求在继续之前调用 WaitforInput Idle。;-)

调用线程可以使用 WaitForInputIdle 函数等待,直到新进程完成初始化并等待用户输入,没有输入挂起。这对于父进程和子进程之间的同步很有用,因为 CreateProcess 返回时不会等待新进程完成其初始化。例如,创建进程将在尝试查找与新进程关联的窗口之前使用 WaitForInputIdle。

关于c++ - EnumProcessModules 在 32 位 win7 上失败并出现错误 299,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16767093/

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