文件和注册表的重定向解决方法

2023-10-27

注册表重定向解决办法:转载http://www.2cto.com/os/201411/350858.html


32位程序如何访问64位的注册表(HKLM/Software)

在调用函数RegCreateKeyEx创建注册表项时,对其第六个参数REGSAM samDesired设置中添加参数KEY_WOW64_64KEY,这样可以实现对64位注册表的访问;

在调用函数RegOpenKeyEx打开注册表项时,要对其第四个参数REGSAM samDesired设置中添加参数KEY_WOW64_64KEY,这样可以实现对64位注册表的访问;

64位程序如何访问32位的注册表(HKLM/Software/Wow6432Node)

在调用函数RegCreateKeyEx创建注册表项时,对其第六个参数REGSAM samDesired设置中添加参数KEY_WOW32_64KEY,这样可以实现对32位注册表的访问;

在调用函数RegOpenKeyEx打开注册表项时,要对其第四个参数REGSAM samDesired设置中添加参数KEY_WOW32_64KEY,这样可以实现对32位注册表的访问;

文件重定向解决办法:

我们可以调用相关的API来关闭和打开这种转向。常用的函数有3个:

Wow64DisableWow64FsRedirection(关闭系统转向),

Wow64RevertWow64FsRedirection (打开系统转向),

Wow64EnableWow64FsRedirection (打开系统转向)。

但是Wow64EnableWow64FsRedirection在嵌套使用的时候不可靠,所以通常用上面的Wow64RevertWow64FsRedirection来打开文件系统转向功能。

执行批处理与代码调用批处理的区别:

(1)在64位系统上直接双击运行批处理文件QQBrowser.reg,

结果会导入到目录 HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser

Windows Registry Editor Version 5.00
HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser
"Version"="7.7.28658.400"
"InstallDir"="{AutoPath}QQ浏览器{/AutoPath}"
"INSTLANG"="2052"
"Exe"="{AutoPath}QQ浏览器{/AutoPath}\\QQBrowser.exe"
"SupplyID"="607"

(2)在64位系统上直接双击运行批处理文件QQBrowser.reg,

结果会导入到目录 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser]
"Version"="7.7.28658.400"
"InstallDir"="{AutoPath}QQ浏览器{/AutoPath}"
"INSTLANG"="2052"
"Exe"="{AutoPath}QQ浏览器{/AutoPath}\\QQBrowser.exe"
"SupplyID"="607"

(3)如果在VC编译的32位程序中调用"regedit.exe /s QQBrowser.reg"命令来实现导入批处理文件,

则结果将导入到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser

Windows Registry Editor Version 5.00
HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser
"Version"="7.7.28658.400"
"InstallDir"="{AutoPath}QQ浏览器{/AutoPath}"
"INSTLANG"="2052"
"Exe"="{AutoPath}QQ浏览器{/AutoPath}\\QQBrowser.exe"
"SupplyID"="607"

(4)如果在VC编译的32位程序中调用"regedit.exe /s QQBrowser.reg"命令来实现导入批处理文件,

则结果也将导入到 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser

Windows Registry Editor Version 5.00
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser
"Version"="7.7.28658.400"
"InstallDir"="{AutoPath}QQ浏览器{/AutoPath}"
"INSTLANG"="2052"
"Exe"="{AutoPath}QQ浏览器{/AutoPath}\\QQBrowser.exe"
"SupplyID"="607"

(5)先删除注册表节点HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent,即删除QQBrowser的父目录Tencent,

然后通过VC编译的32位程序中调用"regedit.exe /s QQBrowser.reg"命令来实现导入批处理文件,

则结果会自动创建并导入 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser

Windows Registry Editor Version 5.00
HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser
"Version"="7.7.28658.400"
"InstallDir"="{AutoPath}QQ浏览器{/AutoPath}"
"INSTLANG"="2052"
"Exe"="{AutoPath}QQ浏览器{/AutoPath}\\QQBrowser.exe"
"SupplyID"="607"

(6)先删除注册表节点HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent,即删除QQBrowser的父目录Tencent,

然后通过VC编译的32位程序中调用"regedit.exe /s QQBrowser.reg"命令来实现导入批处理文件,

则结果会多创建一级Wow6432Node目录,即导入到了 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Wow6432Node\Tencent

<pre name="code" class="html">Windows Registry Editor Version 5.00
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser
"Version"="7.7.28658.400"
"InstallDir"="{AutoPath}QQ浏览器{/AutoPath}"
"INSTLANG"="2052"
"Exe"="{AutoPath}QQ浏览器{/AutoPath}\\QQBrowser.exe"
"SupplyID"="607"
说明:

(1)和(2)由于是在64位操作系统上,所以直接双击运行批处理文件,相当执行64位DOS应用程序,所以会如期导入到指定的目录下;

(3)但通过VC编译的32位程序来调用"regedit.exe /s QQBrowser.reg“命令实现导入批处理文件,结果却不如所料,虽然指定导入到HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser,但实际却导入到了HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser,

要想导入到HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser,必须在导入之前关闭重定向,导入完成之后回复重定向。

解决(3)和(6)的异常,都需要在导入之前先关闭重定向,代码如下:

//判断操作系统是否x64
BOOL IsWow64()
{
	BOOL bIsWow64 = FALSE;
	typedef BOOL(WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
	LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "IsWow64Process");
	if (NULL != fnIsWow64Process)
	{
		fnIsWow64Process(GetCurrentProcess(), &bIsWow64);
	}

	return bIsWow64;
}

//注册回调,用于跟WOW64相关的操作
void InitDriver(lpFunc func, LPVOID lpParam)
{
	if (NULL == func)
	{
		return;
	}

	if (IsWow64())
	{
		PVOID oldValue = NULL;
		BOOL IssysWow64 = IsWow64();

		//关闭WOW64重定向(在导注册表时很重要,避免文件被写到Wow6432Node)
		if (IssysWow64)
		{
			typedef BOOL(WINAPI *LPFN_Wow64DisableWow64FsRedirection)(PVOID *OldValue);
			LPFN_Wow64DisableWow64FsRedirection fnWow64DisableWow64FsRedirection;

			fnWow64DisableWow64FsRedirection = (LPFN_Wow64DisableWow64FsRedirection)GetProcAddress(
				GetModuleHandle(TEXT("kernel32")), "Wow64DisableWow64FsRedirection");

			if (fnWow64DisableWow64FsRedirection != NULL)
			{
				fnWow64DisableWow64FsRedirection(&oldValue);
			}
		}

		//当关闭重定向后,32位会导入到64位系统的64位节点下,例如:
		//预计导入节点:[HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser]
		//实际导入节点:[HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser]
		func(lpParam);

		//恢复WOW64重定向
		if (IssysWow64)
		{
			typedef	BOOL(WINAPI *LPFN_Wow64RevertWow64FsRedirection)(PVOID OlValue);
			LPFN_Wow64RevertWow64FsRedirection fnWow64RevertWow64FsRedirection;
			fnWow64RevertWow64FsRedirection = (LPFN_Wow64RevertWow64FsRedirection)GetProcAddress(
				GetModuleHandle(TEXT("kernel32")), "Wow64RevertWow64FsRedirection");

			if (fnWow64RevertWow64FsRedirection != NULL)
			{
				fnWow64RevertWow64FsRedirection(oldValue);
			}
		}
	}
	else
	{
		//32位会重定向导入到64位系统的32位节点WOW6432Node下,例如:
		//预计导入节点:[HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQBrowser]
		//实际导入节点:[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Tencent\QQBrowser]
		func(lpParam);
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件和注册表的重定向解决方法 的相关文章

  • Flex4,textArea控件的htmlText属性

    它现在包含Text布局框架 Text Layout Framework TLF 而TLF可以作为许多 Spark text组件的基础 例如RichText RichEditableText TextArea和 TextInput等组件 以及
  • 突发奇想把云服务器刷成了黑群晖 ...

    大家好 我是鸟哥 一个半路出家的程序员 前两天准备把自己10年前买的戴尔电脑刷成黑群晖改造成一台家庭存储服务器 折腾了几天后结果把电脑刷成了蓝屏 彻底报废了 后来又突发奇想 准备把手头上的服务器刷成黑群晖 本以为是无法成功的事 结果却很顺利
  • Ubuntu安装Docker

    一 安装条件 1 操作系统要求 需要以下 Ubuntu 版本之一的 64 位版本 Ubuntu Kinetic 22 10 Ubuntu Jammy 22 04 LTS Ubuntu Focal 20 04 LTS Ubuntu Bioni
  • Oracle数据库预警信息阈值设置以及预警信息自动邮件发送到管理员邮箱

    当数据库处于不理想状态时 默认情况下会通过EM发出预警 也可以通过邮件发送给管理员 要设置电子邮件通知 可在EM上 1任何 Database Control 页中 单击页眉和页脚区中的 Setup 设置 链接 2 在 Setup 设置 页中
  • 工作遇到的问题:mybatis注解@Param和分页count

    目录 mybatis注解 Param 分页Count mybatis注解 Param 基于mybatis注解写sql 出现了一个对象映射问题 一开始我没用 Param 因为当时只有一个入参所以没写springboot是能识别到的 但是我后来
  • boost1.79编译

    系列文章目录 文章目录 系列文章目录 前言 一 编译 1 使用vs2019 命令行 用管理员身份运行 2 执行命令 2 第二种方法 3 boost编译动态库 参考 前言 boost自带一套编译工具bjam bjam本身是跨平台的 并且也要自
  • uni-app 后台升级 静默升级 uniapp 后台更新 静默更新 在线升级

    uni app开发到一段落了 最后的app更新好好搞一下 完美的收尾 哈哈哈 在uni app的文档中可以看到内置了HTML5 引擎 这样我们就可以通过JS语法直接调用Native Java接口通道 可调用几乎所有的系统原生Java API
  • ZIP 软件包管理

    ZIP 也是计算机文件的压缩的算法 原名 Deflate 真空 发明者为菲利普 卡兹 Phil Katz 他于 1989 年 1 月公布了该格式的资料 ZIP 通常使用后缀名 zip 主流的压缩格式包括 tar rar zip war gz
  • C#软件加序列号激活、试用期限

    道高一尺 魔高一丈 程序员想尽各种办法给软件加密 用户就想尽各种办法对软件破解 现在做软件试用限制 那么就讨论下软件的试用限制 总体来说 限制的方法有这么几种 1 时间限制 2 次数限制 以时间限制为例 主要是用户从安装之日起 限制用户使用
  • 2023华为OD机试真题【预定酒店/自定义排序】

    题目描述 放暑假了 小明决定到某旅游景点游玩 他在网上搜索到了各种价位的酒店 长度为n的 数组A 他的心理价位是x元 请帮他筛选出k个最接近x元的酒店 n gt k gt 0 并由低到高打印酒店的价格 输入描述 第一行 n k x 第二行
  • Github域名加上1s,在线VS Code阅读源码神器诞生

    近日 一款域名为 github1s 开源项目诞生了 正如他的名字所说 只要在 github 地址上面加上 1s 就能秒级用在线 VS Code 打开 github 项目 这可以说为开发者带来了巨大的便利 我们来看看这个项目打开后长什么样子
  • go get或go mod tidy报错 fatal: could not read Username for

    go get git xxxxx net CPC protocol module git xxxxx net CPC protocol git ls remote q origin in Users admin go pkg mod cac
  • STM32 基础系列教程 24 - USB_HID_key

    前言 学习stm32 USB接口使用 学会用CUBE工具快速创建USB设备工程及调试 关于usb的相关知道请读者提前准备并学习 当然如果不想深究其中原理的话 跟着本文来操作就可以实现基于USB的设备开发了 需要提示的是 stm32在使用us
  • 【蓝屏解决】笔记本频繁蓝屏,错误代码IRQL_NOT_LESS_OR_EQUAL

    问题发现 笔记本近期频繁蓝屏 最初几天会出现一次 后面10分钟左右就出现一次蓝屏情况 解决方案 Step1 找到崩溃日志 Win10 的崩溃日志保存在 C Windows Minidump 里 Step2 下载Debugging Tools
  • AIX系统启动

    复杂度2 5 机密度3 5 最后更新2021 04 23 AIX的启动过程粗略来看 大概是这样的 其中有通过硬件 微码 只能调整少量设置 完成的过程 也有通过操作系统软件 可修改 完成的功能 to be continue 关于SMS的介绍在
  • springmvc框架定时器功能实现和service注入问题解决

    1 在SpringMVC配置文件中添加 xmlns task http www springframework org schema task http www springframework org schema task http ww
  • PHP九大全局变量

    POST 用于接收post提交的数据 GET 用于获取url地址栏的参数数据 FILES 用于文件就收的处理img 最常见 COOKIE 用于获取与setCookie 中的name 值 SESSION 用于存储session的值或获取ses
  • Vue实现Markdown文件内容显示及代码块高亮

    用到的插件有 marked highlight js github markdown css 安装命令 安装 marked npm install marked 安装 highlight js npm install highlight j
  • 电脑往服务器传文件方法,电脑怎么给云服务器传文件

    电脑怎么给云服务器传文件 内容精选 换一换 简要介绍DNSmasq提供DNS缓存和DHCP服务功能 作为域名解析服务器 DNSmasq可以通过缓存DNS请求来提高对访问过的网址的连接速度 作为DHCP服务器 DNSmasq可以用于为局域网电

随机推荐

  • iframe加载完成事件

    获取到iframe加载的前提条件 1 iframe必须在body的下方 如 body append 2 IE下和其他浏览器下的iframe加载完成后执行事件 var iframe document getElementById player
  • 运行ddddocr项目,报错 DLL load failed: 找不到指定的模块

    我的环境是python3 7 9的 from onnxruntime pybind11 state import noqa ImportError DLL load failed 找不到指定的模块 看了网上什么改这改那的 太麻烦了 后来发现
  • 2.搭建一个spring-boot项目(git项目)

    很多同学在搭建一个springboot项目的时候会遇到很多问题 闲来无事我就自己搭建了一个基础的框架 大家可以自己看看 框架主要包括 初始化配置 数据库配置 Mysql mybatis plus JPA 自动生成代码 logback 基本上
  • Grafana 安装(Centos7)

    一 联网安装 1 Grafana安装 1 下载grafana wget https dl grafana com oss release grafana 8 0 3 1 x86 64 rpm wget https dl grafana co
  • java stream 多个filter_跟光磊学Java开发-流式编程

    使用Stream API操作集合 假设现在有一批名字数据 需要筛选出姓张的人后来需求又变了 需要筛选出姓张 而且名字长度大于等于3的人 使用传统方式操作集合只要操作集合都不得不需要使用循环遍历元素每次筛选后都需要使用新的集合存储元素 pac
  • jdbc的练习:建立一个连接数据库的类

    import java sql public class DatabaseConnection String driver com mysql jdbc Driver String url jdbc mysql localhost 3306
  • 【Pytorch深度学习实战】(8)双向循环神经网络(BiRNN)

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • c语言:char *c;测试

    include
  • html图片列表选择器,CSS 列表

    CSS 列表 从某种意义上讲 不是描述性的文本的任何内容都可以认为是列表 人口普查 太阳系 家谱 参观菜单 甚至你的所有朋友都可以表示为一个列表或者是列表的列表 由于列表如此多样 这使得列表相当重要 所以说 CSS 中列表样式不太丰富确实是
  • Laravel 图片不显示解决方案

    转自 https blog csdn net qq 18951197 article details 93163149 图片文件存储位置为 项目目录 storage app public 1 在项目目录下执行命令创建过软链接 php art
  • ELF文件查看利器之objdump用法

    Android在NDK开发工具中提供了objdump 用来帮助开发者查看编译后目标文件的组成结构和具体内容 常用的有以下几个功能选项 1 a或者 archive headers 这个参数起到的作用和ar命令相似 用来看一个 a静态库文件中包
  • OpenStack--部署nova控制节点与计算节点

    官方部署文档 https docs openstack org mitaka zh CN install guide rdo common get started compute html 1 安装并配置 nova 控制节点 官方安装文档
  • ISP算法学习之LSC(镜头阴影校正)

    LSC Lens Shading Correction 是ISP算法中的一个重要组成部分 用于校正镜头遮挡 lens shading 现象 镜头遮挡是由于镜头和图像传感器的光学特性导致的图像亮度不均匀的现象 通常 图像的中心部分较亮 而边缘
  • 破解软件的原理是什么(软件被破解公开)

    到底魔高一丈吗 还是路的高度是一丈 破解与破解之间就像矛盾和矛盾 从第一个软件上线之日起 这就成为了永恒的话题 即使是牛群也不可避免地破译了自己的软件 这不是技术问题 而是信息化时代的产物 软件基于二进制文件存储在系统中 运行时系统平台必须
  • rsync推拉复制同步脚本编写(详细)内附jenkins通过rsync脚本部署到tomcat

    本处基于saltstack的配置目录里分解rsync的tar包 倒序讲解 root master rsync ls rsyncd tar gz 后两个是推复制rsyncd tui master tar gz rsync tui slave
  • JDBC连接MySQL数据库

    文章目录 前言 一 怎么链接数据库 二 使用步骤 https img blog csdnimg cn 91945baa8c094d48890a557614f46fd7 png x oss process image watermark ty
  • stm32定时器详解

    目录 一 时基配置 定时器定时周期计算 二 捕获 比较通道配置 定时器捕获比较模式说明 三 中断优先级配置 四 开启中断与定时器相关函数 链接 一 时基配置 定时器时基配置主要是配置定时器周期 即分频系数和自动重载寄存器 比如现在我需要配置
  • 土壤湿度计检测模块 土壤湿度传感器 机器人智能小车

    https item taobao com item htm spm a1z09 2 0 0 67002e8dtYpcae id 522556171397 u rklgtpkf6bb 土壤湿度模块是一个简易的水分传感器可用于检测土壤的水分
  • 组件路由传参【vue3】

    大家对于vue3也已经不太陌生了 但是在路由传参中会遇到一点小问题 不知大家是否也遇到过 一起来看一下 首先是我们熟悉的vue路由传参 无非就是个router来进行的操作 首先就是导入vue router 这里一定要导入4版本的 不然vue
  • 文件和注册表的重定向解决方法

    注册表重定向解决办法 转载http www 2cto com os 201411 350858 html 32位程序如何访问64位的注册表 HKLM Software 在调用函数RegCreateKeyEx创建注册表项时 对其第六个参数RE