首页 > 其他分享 >64bit系统下操作注册表的注意事项 ZZ

64bit系统下操作注册表的注意事项 ZZ

时间:2023-07-31 12:36:31浏览次数:41  
标签:ZZ KEY HKEY 64bit 32bit WOW64 注册表


前一篇 注册表重定向

64bit系统下操作注册表的注意事项

 (2010-03-19 17:50:54)

 

 

1、注册表位置

       64bit系统(Windows Server 2008 R2只有64bit系统)的注册表分32 位注册表项和64位注册表项两部分。

       在64bit系统下,通过regedit中查看到指定路径下的注册表项均为64位注册表项,而32位注册表项被重定位到:HKEY_LOCAL_MACHINE\Software\WOW6432Node。

       应用程序操作注册表的时候也分32bit方式和64bit方式。运行于64bit系统下的32bit应用程序默认操作32位注册表项(即被重定向到WOW6432Node下的子项);而64bit应用程序才是操作的直观子项。

       比如,同在64bit系统下,使用如下代码访问注册表:

              ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Software\\Sobey\\MPC "), 0, KEY_ALL_ACCESS, &hKey)

       如果应用程序为32bit子系统,那么实际访问的注册表位置为:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC(使用regedit工具软件对应的位置);

       而如果应用程序为64bit子系统,那么实际访问的注册表位置将会是:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC(使用regedit工具软件对应的位置)。


       2、程序编写

       编程过程中,可以使用KEY_WOW64_64KEY和KEY_WOW64_32KEY明确的指定操作64位注册表项或者32位注册表项。例如,

       在32bit子系统应用程序中,可以用如下方式明确指定访问64bit注册表项,程序代码:

              ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Software\\Sobey\\MPC "), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY,&hKey)

              注意关键字KEY_WOW64_64KEY;

       这种方式写入的注册表项将会确切的位于位置:HKEY_LOCAL_MACHINE\SOFTWARE\Sobey\MPC(使用regedit工具软件对应的位置)。

       在64bit子系统应用程序中,可以用如下方式明确指定访问32bit注册表项,程序代码:

              ::RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("Software\\Sobey\\MPC\\Test"), 0, KEY_ALL_ACCESS |KEY_WOW64_32KEY, &hKey)

              注意关键字KEY_WOW64_32KEY

       这种方式写入的注册表项将会确切的位于位置:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Sobey\MPC(使用regedit工具软件对应的位置)。

 

       3、特别提醒

       上述说明只针对HKEY_LOCAL_MACHINE主键而言,HKEY_CURRENT_USER主键下没有类似情况;当访问HKEY_CURRENT_USER主键时,明确指定KEY_WOW64_64KEY和KEY_WOW64_32KEY标志也没有意义。

         总之,尽可能使用HKEY_CURRENT_USER主键来保存用户配置吧。

 

       4、参考文档

         如何通过使用 64 位版本 Windows 查看系统注册表

         Accessing anAlternate Registry View

         Registry Redirector in x64 / IA64

KEY_WOW64_64KEYand KEY_WOW64_32KEY


This is really about Win32 on Win64, or Windows on Windows, or shortfor WOW.

MSDN has many information about 64 bits Windows here (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/64bitwindows.asp).One particular piece information about registry is htere (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win64/win64/registry_redirector.asp).For the most part, there are two registry hives, 64 bit hive and 32bit hive.Applications running under WOW use 32bit hive, and native 64 bitapplications use 64 bit hive.

If an application running under WOW wants to use 64 bit hive, it has tospecify KEY_WOW64_64KEY in RegOpenKeyEx/RegCreateKeyEx. This is documented here(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/registry_key_security_and_access_rights.asp).

If a registry handle hKey is opened with KEY_WOW64_64KEY under WOW, and youwant to open its subkey, you still have to pass KEY_WOW64_64KEY toRegOpenKeyEx. The WOW system does not remember hKey is opened withKEY_WOW64_64KEY. If you don't pass KEY_WOW64_64KEY to RegOpenKeyEx, WOW willtry to open the subkey in 32bit hive, and will likely fail to find the subkeyif the subkey does not exist in 32bit hive.

KEY_WOW64_32KEY is about native 64 bit applications use 32bit hive. And ithas to follow the same rule.


前一篇 注册表重定向




标签:ZZ,KEY,HKEY,64bit,32bit,WOW64,注册表
From: https://blog.51cto.com/u_16156420/6907010

相关文章

  • csc工具一般使用说明zz
    csc工具一般使用说明。工具CSC.exe是.net用来编译.cs文件的命令工具。它的路径默认在framework安装路径下。如:C:\WINDOWS\Microsoft.NET\Framework\版本\csc.exe常用的情况如下:编译File.cs以产生File.exe:cscFile.cs编译File.cs以产生File.dll:csc/target:libraryFile......
  • 01、spdlog源码阅读——registry注册表
    注册表具有唯一标识,用于管理多个日志//Copyright(c)2015-present,GabiMelman&spdlogcontributors.//DistributedundertheMITLicense(http://opensource.org/licenses/MIT)#pragmaonce//Loggersregistryofuniquename->loggerpointer//Anattempttocr......
  • 浅谈AFL++ fuzzing(上):如何用进行有效且规整的fuzzing
    适用于白盒fuzzinginputcorpus收集语料库对于模糊测试工具而言,我们需要为其准备一个或多个起始的输入案例,这些案例通常能够很好的测试目标程序的预期功能,这样我们就可以尽可能多的覆盖目标程序。收集语料的来源多种多样。通常目标程序会包含一些测试用例,我们可以将其做位我......
  • CF613E Puzzle Lover 思考--zhengjun
    题很简单,一遍写对却比较困难。犯的错误:预处理\({base}^i\)时应该要处理到\(\max\{n,m\}\);去重的时候(reduce函数)特判\(m=1,2\)。代码#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintN=2e3+10,mod=1e9+7,base=23333;intn,m;chara......
  • ProFuzzBench搭建
    概述论文:ProFuzzBench-ABenchmarkforStatefulProtocolFuzzing会议:2021年第30届ACMSIGSOFT软件测试与分析国际研讨会(ISSTA)项目地址:https://github.com/profuzzbench/profuzzbenchProFuzzBench是网络协议状态模糊化的基准。它包括一套用于流行协议(如TLS、SSH、SMTP、FT......
  • 关于AJAZZ机械键盘的一些备忘录
    使用说明按键作用Fn+Ins调节灯光模式(整体明暗)(常亮)Fn+上下方向键灯光亮暗Fn+Del滚动灯光Fn+Home按的按键会亮并向两边扩散/按下的按键会亮Fn+PgUp/PgDn灯光动效Fn+End灯光亮灭性状Fn++/-控制流速度......
  • CF449D Jzzhu and Numbers
    有一个很蠢但是很好写的做法。就是你先令\(t_i\)为与起来恰好为\(i\)的方案数,然后\(g_i\)为与起来子集中有\(i\)的方案数。然后\(g_S=\sum\limits_{T\subseteqS}t_T\),反演一下变成\(t_{S}=\sum\limits_{T\subseteqS}(-1)^{|S|-|T|}g_{T}\)。注意到可以\(O(w)\)枚......
  • debug go fuzz test
    Listallpackagegolist./...Runtestcasedlvtest--build-flags='api/tests/fuzz'---test.run^FuzzGetNodes$dlvtestapi/tests/fuzz---test.runFuzzGetNodes-test.v dlvdebugfuncsbapi/tests/fuzz.FuzzGetNodescbt ......
  • terraform安装与命令详解 zz
    terraform安装与命令详解by wanzi2021-02-25约3703字-预计阅读8分钟 devops|阅读 92安装TerraformMac系统安装12brewtaphashicorp/tapbrewinstallhashicorp/tap/terraformLinux系统安装ubuntu安装123curl-fsSLhtt......
  • 在 Windows Server 2022 中,可以通过调整注册表来修改内核参数。以下是一些常见的内核
    在WindowsServer2022中,可以通过调整注册表来修改内核参数。以下是一些常见的内核参数调整在WindowsServer2022中,可以通过修改注册表来调整TCP/IP栈参数、TCP策略和文件系统缓存。请注意,对注册表的更改需要谨慎操作,建议在进行更改之前备份注册表以及系统状态。调整线......