在64位的Windows系统下运行32位的C#程序如何控制重定向
2024-08-22
21
前言
在64位的Windows操作系统中,为了兼容32位程序的运行,并且让32位程序在64位的操作系统中不仅能操作关键文件文夹和关键的注册表,并且又要避免与64位程序的冲突,64位的操作系统采取了重定向机制。
32位和64位相关的系统目录
在64位的Windows操作系统中,通过WOW64的模拟器来实现运行32位的应用程序。WOW64 是一个由操作系统提供的兼容性环境,它使得 32 位应用程序能够在 Windows 64 位操作系统上运行,在系统的Windows目录(C:\Windows)下,存在System32和SysWOW64两个文件夹:
- System32文件夹下存放的是64位DLL
- SysWOW64文件夹下存放的是32位DLL
同样Program File也存在两个文件夹:
- 64位的应用程序安装后,保存在C:\Program File文件夹下
- 32位的应用程序安装后,保存在C:\Program File(X86)文件夹下
而注册表相应的也有两套。
比如SOFTWARE目录:
- 64位的应用程序注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE
- 32位的应用程序注册表路径:HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node
重定向的影响
即使指定了绝对路径,如“%windir%/System32“,根据调用程序的不同,32位程序和64位程序,系统会自动重定向到相应的目录。
禁止重定向API
为什么要禁止重定向
有时候,我们在32位的程序中,希望访问到64位程序的目录,如C:\Windows\System32,如果不禁用重定向,虽然输入的目录是C:\Windows\System32但实际访问的目录会被重定向到C:\Windows\SysWow64目录。反过来,64位系统要访问32位程序的目录也是一样。
如何重定向
禁止或回复系统的重定向的解决办法是调用下面的API函数
//禁用系统重定向API
BOOL Wow64DisableWow64FsRedirection(PVOID OldValue);
//恢复系统重定向API
BOOL Wow64RevertWow64FsRedirection(PVOID OldValue);
在C#中,需要使用DllImport导入对这两个函数,代码如下:
// 关闭重定向API
[DllImport(Kernel32.dll, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
//恢复重定向API
[DllImport(Kernel32.dll, CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
程序中调用如下:
// 关闭重定向
IntPtr oldWOW64State = new IntPtr();
Wow64DisableWow64FsRedirection(ref oldWOW64State);
......
//做完需要的操作后,恢复重定向
Wow64RevertWow64FsRedirection(oldWOW64State);
本文地址:https://www.cfnotes.com/archives/144
更新于:25天前赞一波!3
相关文章
- 微信小程序内容安全检测(敏感词、敏感图)
- 微信小程序订阅消息
- 小程序客服会话
- 获取用户授权的手机号【微信小程序】
- 系统的讲解网站的优化
- EasyWechat 4.x 微信小程序订阅消息
- 小程序测试号、公众号测试号
- EasyWechat 4.x 微信小程序企业付款到零钱
- EasyWechat 3.x 小程序客服消息自动回复
- TP6.0 基础控制器初始化方法中的重定向无效
- TP6.0 系统服务的使用和理解
- EasyWeChat 生成小程序码报错 cURL错误 60
- Windows 系统 PhpStorm 2020无限试用30天
- IIS配置HTTP 301重定向到HTTPS实测有效
- 微信小程序 wx.requestPayment({}) 唤起微信支付
- windows 安装 redis 详细步骤
- windows 下 PHP 的 redis 扩展安装
- Windows中通过BAT写注册表给exe增加管理员权限运行
- Windows 下 exe 服务注册到 service 服务中
- 在 Windows 上安装 Composer
文章评论
全部评论