在32位win7上,EnumProcessModules错误299失败
EnumProcessModules failed with error 299 on 32bit win7
我的代码在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。
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- Websocket++ 错误:收到错误handle_transport_init TLS 握手失败
- Netbeans 10:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 构建失败错误:无法使用 qibuild 构建C++ SDK Helloworld
- q网络回复 无状态码或错误,但失败
- 创建服务失败0x6f7存根收到错误数据
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- 如何修复 clang: 错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- 错误:断言失败 (src.type() == CV_8UC1) 在阈值中
- 失败,出现错误 87:参数不正确.如何判断哪个参数不正确?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 加速兽握手:sslv3 警报握手失败错误
- 自定义预期失败的完整错误消息(boost::spirit::x3)
- 从 Linux OMI (omicli) 到 Windows WMI 的连接失败,并出现与 DMTF 相关的错误
- libcurl错误失败的写作已接收到磁盘/应用程序的数据
- std::timed_mutex::try_lock*错误失败