2013-05-27 74 views
1

我的代碼在win7 32bit上運行,但是當我使用EnumProcessModules時,它返回false並且getlasterror()返回錯誤代碼299,它聲明程序是32位,並且此語句不能在64位系統上運行。EnumProcessModules失敗,在32位win7上出現錯誤299

我想知道爲什麼會發生這種情況,爲什麼系統認爲我在64位操作系統上運行?

的代碼我使用:

  HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid); 
     if (hProcess) 
     { 
      HMODULE hMod = NULL; 
      DWORD cbNeeded = 0; 
      if (EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) 
      { 
       //do something here... 
      } 
     } 

dwPid是我要處理的進程的ID。

PS.This錯誤只發生在我的一臺測試機器上,其他的都沒問題。所以這個問題可能與特定的機器或系統配置有關?

+1

您的標題說'EnumProcessModulesEx',並且正文說'EnumProcessModules'。這是什麼?這兩個返回'BOOL',所以我不確定「返回的錯誤代碼爲299」是什麼意思。你的意思是「失敗後,GetLastError返回299」?請[編輯]你的問題,包括你的代碼,並更清楚你的問題。 –

+0

對不起肯,我的錯 – ericchan1336

+0

好吧,你有一半。謝謝。 :-)再次請包括您的代碼。如果我們首先看不到你在做什麼,那很難說出什麼可能是錯誤的。 –

回答

3

雖然你發佈這個問題已經有一段時間了,但我想過試試看。

原因可能是因爲您在您的代碼中使用CreateProcessA ..並突然調用EnumProcessModules.Thus Windows無法創建ModuleInfo到那時,它返回錯誤299(思考它的64位系統..因爲它無法讀取內存)。

其實我也被困在這個,並找出它..在看你的帖子後。 感謝

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425(v=vs.85).aspx CreatProcess備註。它要求調用WaitforInput繼續之前的空閒。;-)

調用線程可以使用WaitForInputIdle函數來等待,直到新的進程已完成初始化,正在等待用戶輸入沒有輸入待處理。這對於父進程和子進程之間的同步很有用,因爲CreateProcess無需等待新進程完成其初始化即可返回。例如,創建過程將在嘗試查找與新過程相關的窗口之前使用WaitForInputIdle。

相關問題