最近,在工作中对古董代码考古挖掘,在此基础上添加新功能。在考古的调试时,发现对于 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);
原文:https://www.cnblogs.com/danny-gao/p/13749744.html