在32位win7上,EnumProcessModules错误299失败

EnumProcessModules failed with error 299 on 32bit win7

本文关键字:错误 失败 EnumProcessModules 32位 win7      更新时间:2023-10-16

我的代码在win7 32位上运行,但是当我使用EnumProcessModules时,它返回false并且getlasterror()返回错误码299,这声明程序是32位的,并且该语句不能在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。

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

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

原因可能是因为你在代码中使用了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。

相关文章: