前几天接到zlzlzl老师的提议,制作此工具,以方便为论坛的老人们,现将遇到的一些问题写出来做一记录
首先是扯犊子,win64位环境下操作32位软件会被重定向,由于我所使用的编译器为win32,故无法直接写入64位的注册表。
根据MSDN,以下注册表项也会被重定向。
HKEY_LOCAL_MACHINE\Software
HKEY_USERS\*\Software\Classes
HKEY_USERS\*_Classes
32位进程想要访问64位注册表(或者64位进程想要访问32位注册表),需调用RegEnableReflectionKey和RegDisableReflectionKey关闭与开启注册表重定向,使用RegOpenKeyEx并通过设置samDesired 的KEY_WOW64_32KEY和KEY_WOW64_64KEY标志位来打开想要打开的注册表项
下为32位程序访问64位注册表的操作
#define KEY_WOW64_64KEY 256
#define KEY_WOW64_32KEY 512
typedef bool (__stdcall *RegEnableReflectionKey )(HKEY);
typedef bool (__stdcall *RegDisableReflectionKey)(HKEY);
HINSTANCE libInst = LoadLibrary("Advapi32.dll");
if (!libInst) return false; //Couldn't load library
RegEnableReflectionKey EnableReflectionKey=(RegEnableReflectionKey)GetProcAddress(libInst, "RegEnableReflectionKey");
RegDisableReflectionKey DisableReflectionKey=(RegDisableReflectionKey)GetProcAddress(libInst, "RegDisableReflectionKey");
if(DisableReflectionKey)
{
DisableReflectionKey(p_hKey);
}
#define KEY_WOW64_64KEY 256
#define KEY_WOW64_32KEY 512
::RegOpenKeyEx(p_hKey, p_pSubKey, NULL, KEY_ALL_ACCESS|KEY_WOW64_64KEY, &hkey);
if(EnableReflectionKey)
{
EnableReflectionKey(hkey);
}
粉丝可关注公众号:大学生的电脑课,获取最新动态。博客即将关闭
软件无法下载/安装/其它电脑问题,加企鹅群:709531763
有问题直接群里问,在线的时候有问必答,私聊一般都不看
想学电脑知识可以关注我的公众号[大学生的电脑课],里面没有软件只有教程,SB勿来
~( ̄▽ ̄~)(~ ̄▽ ̄)~
2016年8月6日 下午4:21各种懵逼
2016年8月6日 上午9:59Warning: Undefined variable $author_coun in /www/wwwroot/muruoxi/wp-content/themes/CKoo/functions.php on line 592
姜辰
大师笔记·····
2016年8月5日 下午5:50