1

関数を呼び出して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

4 に答える 4

5

ほとんどの場合、64 ビット アプリケーションから 32 ビット プロセスを開こうとしている、またはその逆です。同じ種類のプロセスでのみ作業できます。

于 2011-08-05T20:52:03.973 に答える
2

BOOL ret = EnumProcessModulesEx(h, &module, モジュールのサイズ, &cbneeded, LIST_MODULES_ALL);

3 番目の引数は、2 番目の引数で渡す HMODULESの配列のサイズであると想定されています。十分な大きさではありません。lpcbNeeded に注意してください。これは、エラーが発生しないために必要な配列の大きさを示しています。

于 2011-08-05T20:53:27.573 に答える
0

さて、何をGetLastError返しますか?編集:私の悪い、私は一生懸命失敗しました..

SendMessageエラーチェックを行い、 、EnableTokenPrivilege、またはそれがエラーの原因ではないことを確認しOpenProcessてください。

于 2011-08-05T20:43:04.400 に答える