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

时间:2013-05-27 05:55:53

标签: c++ winapi windows-7

我的代码在win7 32bit上运行,但是当我使用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。

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

1 个答案:

答案 0 :(得分:3)

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

原因可能是因为您在代码中使用了CreateProcessA ..并突然调用了EnumProcessModules.Thus窗口无法在那时创建ModuleInfo。它返回错误299(认为它是64位系统..因为它失败阅读记忆。)

实际上我也被困在这里,并且在看完你的帖子后想出来了。 感谢

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

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