2011-10-31 27 views
0

找到「隱藏」 Windows進程我想列舉我的機器上運行的所有進程:在.NET

public int EnumProcesses() 
{ 
    Process[] ProList = Process.GetProcesses(); 
    Proc.iProcessNum = ProList.Length; 
    for (int i = 0; i < ProList.Length; i++) 
    { 
     PrintProcess(ProList[i]); 
    }   
    return 0; 
} 

某些過程(如遊戲與XTrap運行)不會被發現Process.GetProcesses()。不過,任務管理器可以看到它們。我怎樣才能找到這些「隱藏」的過程?


我現在已經拿起它的ProcessID,但processName是「鬼」(真名是ge.exe,但我得到的chrome.exe或其他任何東西)。我試着用

GetModuleFileName() 
GetModuleHandle() 
GetModuleHandleEx() 

爲什麼任務管理器和ProcessExplorer顯示爲真,任何給我一個解決方案。

+0

我刪除了我的答案,但我想分享一個鏈接無論如何事件UAC是不是原因。 http://stackoverflow.com/questions/7143541/how-can-i-hide-my-c-sharp-application-from-taskmanager-processtab/7143617#7143617 –

回答

2

最有可能你的程序是不是有足夠的權限運行得到其他進程的信息。

只有通過以SYSTEM身份執行才能獲得每個進程的名稱,但對於其他人,您可以請求您的應用程序以管理權限運行(通常通過在應用程序清單中指定UAC級別),(您可能還需要啓用進程訪問令牌中的SeDebugPrivilege),這應該允許你看到它們中的大部分。

除此之外,調用到本地的API將讓事情更清晰,因爲有大量的示例代碼已經在使用做這些精確的任務。

EDIT ::

GetModuleFileName僅用於使用在處理模塊(即DLL)和甚至那麼他們必須已經由當前進程加載。你所追求的是:

GetProcessImageFileName 

只要你可以打開具有所需訪問的進程句柄,它應該工作。這裏有一個指向GetProcessImageFileName的msdn文檔的鏈接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms683217%28v=vs.85%29.aspx

請注意,ProcessExplorer加載一個驅動程序,從而可以對系統進行全部訪問,因此它可以找到幾乎所有的東西。 TaskManager使用一些臭名昭着的API來檢索數據。儘管他們進入這裏有點多。