C++ EnumProcessModulesEx返回错误代码299失败(错误\u部分\u副本)

C++ EnumProcessModulesEx返回错误代码299失败(错误\u部分\u副本),c++,winapi,windows-7,64-bit,getlasterror,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; EnableTokenP

我正在调用函数
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;

那么,
GetLastError
返回什么?编辑:我的坏,我努力失败了


进行错误检查,确保不是
SendMessage
EnableTokenPrivilege
OpenProcess
导致错误。

那么,
GetLastError
返回什么?编辑:我的坏,我努力失败了


进行错误检查,确保不是
sendmages
EnableTokenPrivilege
OpenProcess
导致错误。

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

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

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

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

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


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

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

您可以阅读以下文档:

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


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

您可以阅读以下文档:

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