none
为何有些操作系统的服务进程的全路径获取的不对 RRS feed

  • 问题

  •   做一个简单的进程浏览器,简单来说就是使用::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",然后再加特殊处理,比 如加上系统盘符之类的吗?
    前无古人,后无来者
    2010年1月23日 14:13

答案

  • API 是没错的,你拿到的路径\SystemRoot\ 是环境变量。转换一下就可以得到绝对路径了。
    你可以通过GetEnvironmentVariable 函数转换环境变量。
    • 已标记为答案 Nancy Shao 2010年1月25日 10:30
    2010年1月23日 14:42
    版主