在64位的Windows操作系統中,為了兼容32位程序的運行,64位的Windows操作系統采用重定向機制。目的是為了能讓32位程序在64位的操作系統不僅能操作關鍵文件文夾和關鍵的注冊表並且又要避免與64位程序沖突
在64位的Windows操作系統上,可以運行32位的應用程序,這是通過一個叫做WOW64的模擬器來實現的。WOW64 是一個由操作系統提供的兼容性環境,它使得 32 位應用程序能夠在 Windows 64 位操作系統上運行,在系統的Windows目錄下,存在System32和SysWOW64兩個文件夾:
System32文件夾下存放的是64位DLL
SysWOW64文件夾下存放的是32位DLL
同樣的:
64位的應用程序保存在Program File文件夾下
32位的應用程序保存在Program File(X86)文件夾下
而注冊表相應的也有兩套。
即使指定了絕對路徑,如“%windir%/System32“,根據調用程序的不同,系統會自動重定向到相應的目錄。
禁止系統的重定向的解決辦法是調用下面的API函數
禁用系統重定向用下面的函數:
BOOL Wow64DisableWow64FsRedirection(PVOID OldValue);
恢復系統重定向用下面的函數:
BOOL Wow64RevertWow64FsRedirection(PVOID OldValue);
下面是在C#中對這兩個函數的引用:
// 關閉64位(文件系統)的操作轉向
[DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr); // 開啟64位(文件系統)的操作轉向 [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
省略相關代碼.......
IntPtr oldWOW64State = new IntPtr();
Wow64DisableWow64FsRedirection(ref oldWOW64State); // 關閉64位(文件系統)的操作轉向
省略相關代碼(如系統目錄下的文件操作).....
Wow64RevertWow64FsRedirection(oldWOW64State); // 開啟64位(文件系統)的操作轉向
原文地址:http://www.cnblogs.com/iamlucky/p/5998086.html