2011-08-05 43 views
1

私は関数EnumProcessModulesExを呼び出していますが失敗します。私は64ビットマシンで走っています。以下にコードを示します。EnumProcessModulesExがエラーコード299(ERROR_PARTIAL_COPY)を返しません。

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; 

答えて

2

BOOL RET = EnumProcessModulesEx(H、&モジュール、はsizeofモジュール、& cbneeded、LIST_MODULES_ALL)。

第三引数は、あなたが2番目の引数に渡しHMODULESの配列の大きさであると考えられます。 1を渡すだけで十分ではありません。 lpcbNeededに注意してください。エラーが発生しないようにするには、配列の大きさがどれだけ大きいかがわかります。

+0

聖なるサバ私はマイルのおかげでそれを逃した。 –

0

よく、何がGetLastError返されますか?編集:私の悪い、私はハードに失敗しました..

SendMessageEnableTokenPrivilege、またはOpenProcessがエラーを起こしていないことを確認してください。

+0

タイトルにはERROR_PARTIAL_COPYと明記されています。 –

3

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

関連する問題