当前位置: 首页 > news >正文

Windows64下32位程序文件系统重定向

Windows64下32位程序文件系统重定向

在默认情况下,64位环境运行32位程序,会为这个程序启用文件系统重定向。就是这个32位程序访问文件系统时(如 CreateFile/WinVerifyTrust 等操作),会把 C:\Windows\System32 文件夹重定向到 C:\Windows\Syswow64 等。

什么是 WOW64

WOW64 是 "Windows 32-bit on Windows 64-bit" 的缩写。

  • 它是一个 Windows 操作系统的子系统,负责在 64 位版本的 Windows 上运行 32 位的应用程序。
  • 它提供了一套兼容性层,使得 32 位程序能够调用 64 位系统的内核功能,从而无需修改就能在 64 位 Windows 上运行。

文件系统重定向 (File System Redirection)

为了实现64位系统兼容32位程序,WOW64 引入了文件系统重定向机制。当 32 位程序运行在 64 位 Windows 上时,WOW64 子系统会自动将其对 C:\Windows\System32 的访问重定向C:\Windows\SysWOW64 目录。

  • C:\Windows\System32:存放 64 位的系统文件和 DLL。
  • C:\Windows\SysWOW64:存放 32 位的系统文件和 DLL。

为什么要这么做?

这是为了防止 32 位程序错误地加载 64 位的 DLL,因为 32 位程序无法与 64 位的 DLL 进行交互,强行加载会导致程序崩溃。通过自动重定向,32 位程序总能找到为其架构编译的正确版本的系统文件。

一共提供了3个相关函数:

// 启用重定向
BOOLEAN Wow64EnableWow64FsRedirection(BOOLEAN Wow64FsEnableRedirection);
// 禁用重定向
BOOL Wow64DisableWow64FsRedirection([out] PVOID *OldValue);
// 恢复重定向状态为OldValue指定的值
BOOL Wow64RevertWow64FsRedirection([in] PVOID OldValue);

注意

  • 每次调用 Wow64DisableWow64FsRedirection 函数都必须具有对 Wow64RevertWow64FsRedirection 函数的匹配调用。
  • 禁用重定向会破坏 WOW64 子系统提供的兼容性保障。应该只在绝对必要的代码段中禁用它,并在操作完成后立即恢复。
  • 避免在整个进程生命周期内禁用:绝对不要在 main 函数开始时禁用,直到程序结束才恢复。这会导致进程中的所有文件操作都绕过重定向,极有可能引发难以预料的错误和崩溃。
  • 线程级别的操作:这个函数的效果是线程级别的,而不是进程级别的。这意味着如果你在一个线程中禁用了重定向,其他线程的重定向行为不会受到影响。
  • 错误处理:总是检查函数的返回值。如果禁用或恢复操作失败,你的后续文件操作可能会不符合预期。
  • 适用于 32 位进程:这个函数在 64 位进程中调用是无效的,因为 64 位进程本身就直接运行在原生系统上,不存在重定向的问题。

示例

#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0501#ifdef NTDDI_VERSION
#undef NTDDI_VERSION
#endif
#define NTDDI_VERSION 0x05010000#include <Windows.h>void main(){HANDLE hFile = INVALID_HANDLE_VALUE;//  Disable redirection immediately prior to the native API//  function call.if( Wow64EnableWow64FsRedirection(FALSE) ) {//  Any function calls in this block of code should be as concise//  and as simple as possible to avoid unintended results.hFile = CreateFile(TEXT("C:\\Windows\\System32\\Notepad.exe"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//  Immediately re-enable redirection. Note that any resources//  associated with OldValue are cleaned up by this call.if ( FALSE == Wow64EnableWow64FsRedirection(TRUE) ){//  Failure to re-enable redirection should be considered//  a critical failure and execution aborted.return;}}// The handle, if valid, can be used as usual without// leaving redirection disabled.if( INVALID_HANDLE_VALUE != hFile )  {// Use the file handle}}
http://www.jsqmd.com/news/51276/

相关文章:

  • 2025年Q4内容审核公司推荐,全链路防护+弹性人力池测评榜
  • 2025 最新温州包车公司推荐!商务 / 旅游 / 团建包车权威榜单:品牌甄选,20 年驾龄司机护航 + 全程安全保障
  • 论文格式要求
  • 深扒Pickle反序列化
  • 框架架构设计师备考第61天——嵌入式架构架构模式操作便捷的系统数据库中间件
  • Nessus Professional 10.11 Auto Installer for Windows - Nessus 自动化安装程序
  • CS501 TYPEC转DP芯片 支持8K60HZ高速信号转换芯片
  • 2025北京留学机构有哪些地方
  • 2025西安网站建设公司推荐3家口碑好的网站制作公司 (5)
  • 2025年靠谱的西安外贸网站建设行业内最具实力的三家公司
  • 2025厦门留学机构哪家好一点的
  • 2025广州留学机构有哪些地方好
  • 2025北京留学机构排行榜最新
  • 2025年蒸馏分离装置生产厂家权威推荐榜单:蒸发器/薄膜蒸发器/薄膜蒸发设备源头厂家精选
  • SRE核心工作流与实践指南:从故障预防到持续优化
  • docker 启用 ipv6
  • 详细介绍:2025年前端必备:@antfu/eslint-config让代码质量提升300%
  • 2025年硅油色膏实力厂家权威推荐榜单:PVC色膏/环氧色膏/丙烯酸色膏源头厂家精选
  • 2025 年 11 月铣床厂家权威推荐榜:立式铣床/摇臂铣床/炮塔铣床/数控铣床/升降台铣床/精密铣床/多功能铣床/万能铣床/手摇铣床,高效精准加工利器精选
  • 2025年11月热泵、电锅炉中央空调推荐榜绿色供暖源头厂家选择指南
  • 运维监控厂商格局重塑:2025可观测技术如何重构企业IT运维效能?
  • Rust 创建环境配置:IDE 选择与深度优化实践
  • 2025 年 11 月镀膜材料厂家权威推荐榜:真空镀膜材料,光学镀膜材料,PVD镀膜材料,磁控溅射镀膜材料,专业品质与创新技术深度解析
  • MATLAB中主成分分析(PCA)与相关性分析的实现
  • 【2025-11-25】连岳摘抄
  • 【C++升华篇】学习C++就看这篇--->AVLtree深度剖析模拟建立
  • 2025 年 11 月漏水检测服务权威推荐榜:精准无损声学/红外/超声波技术,专业提供管道/地暖/中央空调/屋顶等室内外漏水检测上门服务
  • 2025年自动打包机生产商权威推荐榜单:自动捆扎机/纸箱自动捆扎机/纸箱自动打包机源头厂家精选
  • 2025年压接电压降定做厂家权威推荐榜单:线束电压降测试仪‌/电压降测试仪‌/线束电压降‌源头厂家精选
  • 为什么说NumPy 中的“广播”机制的“广播”一词非常形象?