æä»¬å·²ç»ç¥éï¼
ããããâ ï¼æ¬æºæ¨¡å¼64ä½ç¨åºè¿è¡å¨çº¯æ¨¡å¼ä¸ï¼å¹¶ä¸è®¿é®é®ååå¨å¨ä»¥ä¸æ³¨å表åé®ä¸çå¼ï¼HKEY_LOCAL_MACHINE \ Software
ããããâ¡ï¼32ä½ç¨åºè¿è¡å¨WOW64模å¼ä¸ï¼å¹¶ä¸è®¿é®é®åå¼åå¨å¨ä»¥ä¸æ³¨å表å项ä¸ï¼HKEY_LOCAL_MACHINE \ Software \ WOW6432nod
ããé£ä¹è¦å®ç°32为ç¨åºè®¿é®64使³¨å表信æ¯ï¼è¿è¦ç¥éå¦ä¸æ¦å¿µï¼1ï¼æä»¶ç³»ç»è½¬å0.2ï¼æ³¨å表éå®åï¼è½¬åï¼0.3ï¼æ³¨å表åå°ã
ããããâ ï¼æä»¶ç³»ç»è½¬å
ãããã32ä½è¿ç¨ä¸è½å è½½64ä½Dllï¼64ä½è¿ç¨ä¹ä¸å¯ä»¥å è½½32ä½Dll.Windowsçç³»ç»ç®å½å å«äºææå®è£ çåºç¨ç¨åºåå®ä»¬çDllæä»¶ï¼æ ¹æ®æä»¬æè¿°çè§åï¼
ããããå®åºè¯¥è¢«å为ç»64ä½åºç¨ç¨åºçç®å½åç»32ä½åºç¨ç¨åºçç®å½ã妿ä¸è¿æ ·ï¼æä»¬å°±æ æ³åºå32ä½å64ä½çDllæä»¶ã对äº64ä½åºç¨ç¨åºï¼å ¶æä»¶é常被
ããããæ¾å¨ï¼ windirï¼ \ system32åï¼ programfilesï¼ ï¼æ¯å¦ï¼cï¼\ program filesï¼ã对äº32ä½åºç¨ç¨åºï¼å ¶æä»¶é常å¨ï¼ windirï¼ \ syswow64å
ããããCï¼\ program filesï¼x86ï¼ä¸é¢ã妿æä»¬ç¨32ä½ç¨åºå»è®¿é®ï¼ windirï¼ \ system32ï¼ä¸ç®¡æä»¬ç¨ç¡¬ç¼ç è¿æ¯å ¶ä»çæ¹å¼ï¼ç³»ç»é½ä¼èªå¨å°ç»æä»¬
ãããã转åå°ï¼ WINDIRï¼ \ SysWow64èµæä¸é¢ãè¿ç§è½¬åå¯¹äºæ¯ä¸ª32ä½åºç¨ç¨åºé»è®¤é½æ¯æå¼çã使¯è¿ç§è½¬åå¯¹äºæä»¬æ¥è¯´å¹¶ä¸æ»æ¯éè¦çãé£ä¹æä»¬å¯ä»¥å¨
ããããCï¼éé¢è°ç¨ç¸å ³çAPIæ¥å ³éåæå¼è¿ç§è½¬å常ç¨ç彿°æ3个ï¼
ããããããããWow64DisableWow64FsRedirectionï¼å ³éç³»ç»è½¬åï¼ï¼
ããããããããWow64RevertWow64FsRedirectionï¼æå¼ç³»ç»è½¬åï¼
ããããããããWow64EnableWow64FsRedirectionï¼æå¼ç³»ç»è½¬åï¼ã
ãããã使¯Wow64EnableWow64FsRedirectionå¨åµå¥ä½¿ç¨çæ¶åä¸å¯é ï¼æä»¥é常ç¨ä¸é¢ç Wow64RevertWow64FsRedirectionæ¥æå¼æä»¶ç³»ç»è½¬å
ããããåè½ãå¨C#ä¸ï¼æä»¬å¯ä»¥å©ç¨DllImportç´æ¥è°ç¨è¿ä¸¤ä¸ªå½æ°ã
ããããâ¡ï¼æ³¨å表éå®åï¼è½¬åï¼
ããããè¥è¦æ¯æç 32 ä½å 64 ä½ COM 注ååç¨åºå ±åç¶æï¼WOW64 åç³»ç»æä¾ 32 ä½ç¨åºä½¿ç¨ç注å表çå¦ä¸ä¸ªè§å¾ãå¨ WOW64 åç³»ç»ä½¿ç¨æ³¨å表
ããããéå®åæªè·ä½çº§å«ç注å表è°ç¨ã注å表éå®åè¿å¯ä»¥ç¡®ä¿æ³¨å表è°ç¨è¢«å®åå°å¨æ³¨åè¡¨ä¸æ£ç¡®ç忝ãÂ
ãããã彿们å®è£ æ°ç¨åºæ Windows x64 ççè®¡ç®æºä¸è¿è¡ç¨åºæ¶ï¼æåç 64 ä½ç¨åºç注å表è°ç¨è®¿é® HKEY_LOCAL_MACHINE\Software 注å表åé®
ããããä¸éå®åãWOW64 æªè·ç± 32 ä½ç¨åºç注å表è°ç¨å° HKEY_LOCAL_MACHINE\Softwareï¼ç¶åå°å®ä»¬éå®åå°
ããããHKEY_LOCAL_MACHINE\Software\WOW6432node åé®ã éè¿éå®åä» 32 ä½ç¨åºè°ç¨ï¼WOW64 å¯ç¡®ä¿ç¨åºå§ç»åå ¥ç¸åºç注å表åé®ã
ããããæ³¨å表éå®åä¸è¦æ±ç¨åºä»£ç ä¿®æ¹ï¼åæ¤è¿ç¨æ¯å¯¹ç¨æ·éæã
ããããâ¢ï¼æ³¨å表åå°
ããããåå°ä½¿ä¸¤ä¸ªç¸åçæ³¨å表ï¼ä»¥æ¯æåæ¶è¿è¡çæ¬æºå WOW64 æä½çç©ç坿¬çåå¨ï¼
ããããæå¼æ³¨å表ç 64 ä½èå¨æææ¶é´å注å表åå°æä¾äºä¸ç§å®¹çº³ 32 ä½ç宿¶æ¹æ³ã
Â
ããç®åçäºè§£äºè¿äºï¼ä¸é¢è¯´ä¸ä¸å ·ä½çå®ç°æ¥éª¤ï¼
ããããå ³é64ä½ï¼æä»¶ç³»ç»ï¼çæä½è½¬å
ããããããè·å¾æä½Keyå¼ç奿
ããããããããå ³éæ³¨å表转åï¼ç¦æ¢ç¹å®é¡¹ç注å表åå°ï¼
ããããããè·å访é®çKeyå¼
ããããããããæå¼æ³¨å表转åï¼å¼å¯ç¹å®é¡¹ç注å表åå°ï¼
ããããå¼å¯64ä½ï¼æä»¶ç³»ç»ï¼çæä½è½¬å
Â
ãããæ³¨ï¼ç±äºæä»¬å¨ç¨åºä¸ç¨äºçDllImportï¼æä»¥è¦å¼å ¥å½å空é´ï¼System.Runtime.InteropServicesã
ããä¸é¢è¯·ç代ç 示ä¾
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using Microsoft.Win32;
6 using System.Runtime.InteropServices;
7
8 namespace OperateRegistrationTable
9 {
10 class Programe
11 {
12 static void Main(string[] args)
13 {
14 string myParentKeyName = "HKEY_LOCAL_MACHINE";
15 string mySubKeyName = @"SOFTWARE\EricSun\MyTestKey";
16 string myKeyName = "MyKeyName";
17
18 string value = string.Empty;
19 value = Utility.Get64BitRegistryKey(myParentKeyName, mySubKeyName, myKeyName);
20 Console.WriteLine("The Value is: {0}", value);
21 }
22 }
23
24 public class Utility
25 {
26 #region 32ä½ç¨åºè¯»å64注å表
27
28 static UIntPtr HKEY_CLASSES_ROOT = (UIntPtr)0x80000000;
29 static UIntPtr HKEY_CURRENT_USER = (UIntPtr)0x80000001;
30 static UIntPtr HKEY_LOCAL_MACHINE = (UIntPtr)0x80000002;
31 static UIntPtr HKEY_USERS = (UIntPtr)0x80000003;
32 static UIntPtr HKEY_CURRENT_CONFIG = (UIntPtr)0x80000005;
33
34 // å
³é64ä½ï¼æä»¶ç³»ç»ï¼çæä½è½¬å
35 [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
36 public static extern bool Wow64DisableWow64FsRedirection(ref IntPtr ptr);
37 // å¼å¯64ä½ï¼æä»¶ç³»ç»ï¼çæä½è½¬å
38 [DllImport("Kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
39 public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
40
41 // è·åæä½Keyå¼å¥æ
42 [DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
43 public static extern uint RegOpenKeyEx(UIntPtr hKey, string lpSubKey, uint ulOptions,
ããããããããããããããããããããããããããããããããããint samDesired, out IntPtr phkResult);
44 //å
³é注å表转åï¼ç¦ç¨ç¹å®é¡¹ç注å表åå°ï¼
45 [DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
46 public static extern long RegDisableReflectionKey(IntPtr hKey);
47 //ä½¿è½æ³¨å表转åï¼å¼å¯ç¹å®é¡¹ç注å表åå°ï¼
48 [DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
49 public static extern long RegEnableReflectionKey(IntPtr hKey);
50 //è·åKeyå¼ï¼å³ï¼Keyå¼å¥æææ å¿çKey对象çå¼ï¼
51 [DllImport("Advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
52 private static extern int RegQueryValueEx(IntPtr hKey, string lpValueName, int lpReserved,
53 out uint lpType, System.Text.StringBuilder lpData,
54 ref uint lpcbData);
55
56 private static UIntPtr TransferKeyName(string keyName)
57 {
58 switch (keyName)
59 {
60 case "HKEY_CLASSES_ROOT":
61 return HKEY_CLASSES_ROOT;
62 case "HKEY_CURRENT_USER":
63 return HKEY_CURRENT_USER;
64 case "HKEY_LOCAL_MACHINE":
65 return HKEY_LOCAL_MACHINE;
66 case "HKEY_USERS":
67 return HKEY_USERS;
68 case "HKEY_CURRENT_CONFIG":
69 return HKEY_CURRENT_CONFIG;
70 }
71
72 return HKEY_CLASSES_ROOT;
73 }
74
75 public static string Get64BitRegistryKey(string parentKeyName, string subKeyName, string keyName)
76 {
77 int KEY_QUERY_VALUE = (0x0001);
78 int KEY_WOW64_64KEY = (0x0100);
79 int KEY_ALL_WOW64 = (KEY_QUERY_VALUE | KEY_WOW64_64KEY);
80
81 try
82 {
83 //å°Windows注å表主é®å转åæä¸ºä¸å¸¦æ£è´å·çæ´å½¢å¥æï¼ä¸å¹³å°æ¯32æè
64使å
³ï¼
84 UIntPtr hKey = TransferKeyName(parentKeyName);
85
86 //声æå°è¦è·åKeyå¼ç奿
87 IntPtr pHKey = IntPtr.Zero;
88
89 //è®°å½è¯»åå°çKeyå¼
90 StringBuilder result = new StringBuilder("".PadLeft(1024));
91 uint resultSize = 1024;
92 uint lpType = 0;
93
94 //å
³éæä»¶ç³»ç»è½¬å
95 IntPtr oldWOW64State = new IntPtr();
96 if (Wow64DisableWow64FsRedirection(ref oldWOW64State))
97 {
98 //è·å¾æä½Keyå¼ç奿
99 RegOpenKeyEx(hKey, subKeyName, 0, KEY_ALL_WOW64, out pHKey);
100
101 //å
³é注å表转åï¼ç¦æ¢ç¹å®é¡¹ç注å表åå°ï¼
102 RegDisableReflectionKey(pHKey);
103
104 //è·å访é®çKeyå¼
105 RegQueryValueEx(pHKey, keyName, 0, out lpType, result, ref resultSize);
106
107 //æå¼æ³¨å表转åï¼å¼å¯ç¹å®é¡¹ç注å表åå°ï¼
108 RegEnableReflectionKey(pHKey);
109 }
110
111 //æå¼æä»¶ç³»ç»è½¬å
112 Wow64RevertWow64FsRedirection(oldWOW64State);
113
114 //è¿åKeyå¼
115 return result.ToString().Trim();
116 }
117 catch (Exception ex)
118 {
119 return null;
120 }
121 }
122
123 #endregion
124 }
125 }
Get64BitRegistryKey彿°çä¸ä¸ªåæ°åå«ä»£è¡¨ï¼ä¸»é®åï¼å¦ï¼HKEY_LOCAL_MACHINEçï¼ï¼åé®åï¼å ³é®åï¼è¿åçæ¯å¯é¥çå¼ï¼64ä½ç³»ç»æ³¨å表çé®å¼ï¼ï¼éè¿ä¸é¢çæ¹æ³å°±å®å ¨å¯ä»¥å®ç°ç¨32ç¨åºè®¿é®64ä½ç³»ç»æ³¨å表ï¼å³ï¼64ä½ç¨åºæè®¿é®ç注å表ä½ç½®ï¼ã
转èªï¼httpsï¼ Â //blog.csdn.net/By__myself/article/details/73658027卿¤æè°¢!!!
转èªï¼httpï¼//www.cnblogs.com/mingmingruyuedlut/archive/2011/01/21/1941225.html卿¤æè°¢!!!