我的代码在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。这个错误只发生在我的一台测试机器上,其他的都很好。那么这个问题可能与特定的机器或系统配置有关吗?
答案 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。