首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

64 位系統下 System32 文件系統重定向機制詳解

     編輯:C++ 入門

64 位系統下 System32 文件系統重定向機制詳解

在 64 位 Windows 上,32 位進程訪問 C:\Windows\System32 會被自動重定向到 C:\Windows\SysWOW64;而 64 位進程訪問 System32 看到的是真正的 64 位系統文件。這是為了兼容 32 位應用程式而設計的文件系統重定向器。

重定向規則

進程位數訪問路徑實際訪問路徑說明
32 位C:\Windows\System32C:\Windows\SysWOW64存放 32 位 DLL/EXE
32 位C:\Windows\SysnativeC:\Windows\System32虛擬別名,繞過重定向
64 位C:\Windows\System32C:\Windows\System32直接訪問 64 位文件
64 位C:\Windows\Sysnative不存在僅 32 位進程可見

驗證程式

// 需以 32 位編譯運行
#include <Windows.h>
#include <Shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
    wstring path = L"C:\\Windows\\System32\\notepad.exe";
    if (PathFileExists(path.c_str())) MessageBox(0, L"存在", L"", MB_OK);
    else MessageBox(0, L"不存在", L"", MB_OK);
    path = L"C:\\Windows\\Sysnative\\notepad.exe";
    if (PathFileExists(path.c_str())) MessageBox(0, L"Sysnative 存在", L"", MB_OK);
    else MessageBox(0, L"Sysnative 不存在", L"", MB_OK);
    return 0;
}

常見坑點與對策

  • 32 位程式調用 64 位系統工具(如 bcdedit, diskpart):需用 Sysnative 路徑或啟用「關閉重定向」Wow64DisableWow64FsRedirection。
  • 註冊表重定向:HKLM\Software 同理重定向到 HKLM\Software\Wow6432Node,用 KEY_WOW64_64KEY 旗標訪問 64 位視圖。
  • 環境變數 %SystemRoot%\System32:在 32 位進程中展開為 SysWOW64,需注意腳本路徑。

總結

文件系統重定向是 64 位 Windows 兼容 32 位應用的核心機制。開發者必須理解 進程位數決定看到的視圖,並在需要跨位數訪問系統文件時,使用 Sysnative 別名或 API Wow64DisableWow64FsRedirection 繞過重定向。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved