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

标签 c++ winapi windows-7

我的代码在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。

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

最佳答案

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

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

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

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

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

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

相关文章:

c++ - 用ASCII算法简单画图

c++ - 绘制具有透明度的位图

delphi - 如何将 ISO 639-1 代码转换为语言 ID

iis-7 - php.ini 未被 Windows 7 安装读取

delphi - 来自 Delphi 2006 的 EXE : Buttons/Checkbox/Radios not visible until mouse is hovered (on Vista/Win7)

c++ - VS2017 C++ 调试器跳过代码行

c++ - C++ 纯虚函数调用的性能可变性

c++ - 类内部的全局变量和局部函数变量

delphi - 如何让系统托盘图标默认在Win7/8中更显眼

c++ - Windows 7 中的 QBSDK (QuickBooks)