syswow64与system32路径 映射

  最近,在工作中对古董代码考古挖掘,在此基础上添加新功能。在考古的调试时,发现对于 C:\windows\system32路径下某文件是否存在的判断总是错误,但实际情况是该文件确实存在。经过一阵Google,确认windows操作系统有系统文件映射的一个概念。

  windows\syswow64与windows\system32路径之间有映射关系,windows7系统对于这种映射的设置默认是开启的,即对于system路径的访问,默认是windows\syswow64,而不是windows\system32,除非关掉映射。

  一顿操作后,终于搞定,代码如下。原代码是c++/cli的,考虑到使用的人不多,改造成C#的,在此留个爪。

 

//关闭64位(文件系统)的操作转向
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
extern bool Wow64DisableWow64FsRedirection(IntPtr ptr);
//开启64位(文件系统)的操作转向
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);



IntPtr lastState = new IntPtr();
//关闭系统文件映射
if(Wow64DisableWow64FsRedirection(lastState ))
{
    //对 C:\windows\system32路径下的文件判断    
    if(File.Exists(Environment.SystemDirectory + "\\xxxx.sys"))
    {
         //dosomething....        
    }
}
//开启系统文件映射
Wow64RevertWow64FsRedirection(lastState);

 

posted @ 2020-09-29 15:09  danny_gao_1024  阅读(417)  评论(0)    收藏  举报