用GetModuleFileNameEx去winlogon进程的文件名,取出的结果是
\??\C:\WINNT\system32\winlogon.exe
注意前面有“\??\”
二进制查看,是5c 3f 3f 5c取其它进程的文件名,就没有这个问题,只有winlogon有问题。是什么原因?
(为什么发了帖子,经常看不到?)

解决方案 »

  1.   

    你GetModuleFileNameEx的handle to process是怎么得到的?
    OpenProcess()打开时一定要具有大于或等于PROCESS_QUERY_INFORMATION和PROCESS_VM_READ的权限
      

  2.   

    你GetModuleFileNameEx的handle to process是怎么得到的?
    ---------------
    先EnumProcesses,枚举出进程id,再对每个id OpenProcessOpenProcess()打开时一定要具有大于或等于PROCESS_QUERY_INFORMATION和PROCESS_VM_READ的权限
    --------
    我是这样写的
    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessID);
    取其它进程都正常,只有winlogon前面有\??\
      

  3.   

    The path can have the prefix "\\?\", depending on how the module was loaded.
    msdn
      

  4.   

    所有用户进程能访问的object都是以\??\开头的,用WinObj可以看到的。
      

  5.   

    可以参考msdn中createfile的说明
      

  6.   

    \??\C:是文件分区对应的设备名,C:是设备的符号链接名,可能winlogon运行的时候,C:这个符号链接还没有创建,为了确保能找到它,直接使用设备名\??\C:去定位文件