做一个简单的进程浏览器,简单来说就是使用::CreateToolhelp32Snapshot函数、::Process32First、 OpenProcess、EnumProcessModules、GetModuleFileNameEx函数。在使用 GetModuleFileNameEx获取进程文件的全路径时,一般的应用程序的路径都能获取正确,但是有三个操作系统的服务进程获取总是不对。下面三 个:
csrss.exe 获取到的路径:"\??\C:\WINDOWS\system32\csrss.exe"
smss.exe 获取到的路径:"\SystemRoot\System32\smss.exe"
winlogon.exe 获取到的路径: "\??\C:\WINDOWS\system32\winlogon.exe"
我到网上下载一些源码,发现也同样存在这样的问题。可以以为是OpenProcess的权限问题,但是后来一测试发现OpenProcess那一步是成功 的。
我看了Process Explorer软件,它获取的是正确的路径。难道它获取的也是"\SystemRoot\System32\smss.exe",然后再加特殊处理,比 如加上系统盘符之类的吗?
前无古人,后无来者