2011-08-05 25 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);

該第三參數被認爲是HMODULES的陣列您在第二參數傳遞的大小。你只能通過1,不夠大。請注意lpcbNeeded,它告訴你該數組需要多大以避免出錯。

+0

聖鯖魚我錯過了一英里的感謝。 –

0

那麼,GetLastError返回什麼?編輯:我的壞,我失敗了..

做錯誤檢查,並確保它不是SendMessage,EnableTokenPrivilegeOpenProcess這給你的錯誤。

+0

閱讀標題它明確指出ERROR_PARTIAL_COPY。 –

3

很可能你試圖從64位應用程序打開32位進程,反之亦然。您只能使用相同類型的進程。