EnumProcessModulesEx не удается вернуть код ошибки 299 (ERROR_PARTIAL_COPY) - PullRequest
1 голос
/ 06 августа 2011

Я вызываю функцию 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;

Ответы [ 3 ]

3 голосов
/ 06 августа 2011

Скорее всего, вы пытаетесь открыть 32-битный процесс из 64-битного приложения или наоборот. Вы можете работать только с процессами одного типа.

2 голосов
/ 06 августа 2011

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

Третий аргумент должен иметь размер массива HMODULES вы передаете во 2-м аргументе.Вы только проходите 1, не достаточно большой.Обратите внимание на lpcbNeeded, он говорит вам, насколько большим должен быть массив, чтобы не получить ошибку.

0 голосов
/ 06 августа 2011

Ну, что возвращает GetLastError?РЕДАКТИРОВАТЬ: мой плохой, я терпел неудачу ..

Выполните проверку ошибок и убедитесь, что это не SendMessage, EnableTokenPrivilege или OpenProcess, который дает вам ошибку.

...