2

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

我想知道为什么会发生这种情况,为什么系统认为我在 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.这个错误只发生在我的一台测试机器上,其他都很好。那么这个问题可能与特定的机器或系统配置有关吗?

4

1 回答 1

3

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

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

实际上,我也被困在这一点上并想通了..在看了你的帖子之后。谢谢

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

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

于 2015-01-11T11:25:58.793 回答