找到“hidden"Windows进程在.net中

本文关键字:进程 net Windows hidden quot 找到 | 更新日期: 2023-09-27 18:12:54

我正在尝试枚举我的机器上运行的所有进程:

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()

为什么任务管理器和进程管理器可以显示为true, Any给我一个解决方案

找到“hidden"Windows进程在.net中

很可能你的程序没有足够的权限来获取其他进程的信息。

只有作为SYSTEM执行才能获得每个进程名,但对于其他进程名,您可以请求应用程序以管理权限运行(通常通过在应用程序清单中指定UAC级别),(您可能还需要在进程访问令牌中启用SeDebugPrivilege),这应该允许您看到大多数进程名。

除此之外,调用本机API将使事情更清楚,因为已经有许多示例代码用于完成这些任务。

编辑::

GetModuleFileName仅用于进程模块(即dll),即使这样,它们也必须由当前进程加载。你要找的是:

GetProcessImageFileName

只要您能够打开具有所需访问权限的进程句柄,它就应该工作。下面是GetProcessImageFileName的msdn文档链接:http://msdn.microsoft.com/en-us/library/windows/desktop/ms683217%28v=vs.85%29.aspx

注意,ProcessExplorer加载了一个驱动程序,因此对系统有完全的访问权,因此它几乎可以发现所有的东西。TaskManager使用一些臭名昭著的api来检索数据。不过这里讲得有点多了