EnumProcessModulesEx无法返回错误代码299(ERROR_PARTIAL_COPY)

时间:2011-08-05 20:39:06

标签: c++ winapi windows-7 64-bit getlasterror

我正在调用函数EnumProcessModulesEx但它失败了。我在64位机器上运行。以下是代码:

wchar_t* dest = new wchar_t[100];
int index = SendMessage(processes, LB_GETCURSEL, 0, 0);
SendMessage(processes, LB_GETTEXT, index, (LPARAM)dest);
HMODULE module;
unsigned long cbneeded;
EnableTokenPrivilege(hWnd, SE_DEBUG_NAME);
HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, 0, _wtoi(dest));
int errorcode = GetLastError();
BOOL ret = EnumProcessModulesEx(h, &module, sizeof module, &cbneeded, LIST_MODULES_ALL);
int err = GetLastError();
wchar_t* name = new wchar_t[MAX_PATH];
GetModuleBaseName(h, module, name, sizeof name);
MessageBox(hWnd, name, L"Process Name", 0);
delete dest;
delete name;

4 个答案:

答案 0 :(得分:3)

最有可能的是你试图从64位应用程序打开32位进程,反之亦然。您只能使用相同类型的流程。

答案 1 :(得分:2)

  

BOOL ret = EnumProcessModulesEx(h,& module,sizeof module,& cbneeded,LIST_MODULES_ALL);

第三个参数应该是您在第二个参数中传递的HMODULES的数组的大小。你只通过1,不够大。注意lpcbNeeded,它告诉你数组需要多大才能得到错误。

答案 2 :(得分:1)

如果目标平台是x86,则可以尝试将其更改为x64。

您可以阅读文档:https://docs.microsoft.com/en-us/windows/win32/api/psapi/nf-psapi-enumprocessmodules

如果从在WOW64上运行的32位应用程序调用此函数,则它只能枚举32位进程的模块。如果该进程是64位进程,则此函数将失败,并且最后一个错误代码是ERROR_PARTIAL_COPY(299)。

答案 3 :(得分:0)

嗯,GetLastError返回什么?编辑:我的坏,我努力了......

进行错误检查,并确保错误检查不是SendMessageEnableTokenPrivilegeOpenProcess