Browse Source

+ Added KEY_WOW64_64KEY and KEY_WOW64_32KEY to Windows unit and fcl-registry/src/regdef.inc
* Fixed TRegistry.OpenKeyReadOnly and TRegistry.KeyExists methods so they preserve KEY_WOW64_xxKEY bits passed into TRegistry constructor. Based on patch from Maciej Kaczkowski, resolves #23695, #23188

git-svn-id: trunk@24824 -

sergei 12 năm trước cách đây
mục cha
commit
94d1e0c81c

+ 4 - 0
packages/fcl-registry/src/regdef.inc

@@ -25,6 +25,8 @@ Const
   KEY_READ               = Windows.KEY_READ;
   KEY_SET_VALUE          = Windows.KEY_SET_VALUE;
   KEY_WRITE              = Windows.KEY_WRITE;
+  KEY_WOW64_64KEY        = Windows.KEY_WOW64_64KEY;
+  KEY_WOW64_32KEY        = Windows.KEY_WOW64_32KEY;
 
 {$else}
 
@@ -47,5 +49,7 @@ Const
   KEY_READ               = $20019;
   KEY_SET_VALUE          = 2;
   KEY_WRITE              = $20006;
+  KEY_WOW64_64KEY        = $100;
+  KEY_WOW64_32KEY        = $200;
   
 {$endif windows}

+ 3 - 2
packages/fcl-registry/src/winreg.inc

@@ -151,7 +151,8 @@ begin
   Result:=false;
   OldAccess:=FAccess;
   try
-    FAccess:=KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS or STANDARD_RIGHTS_READ;
+    FAccess:=KEY_QUERY_VALUE or KEY_ENUMERATE_SUB_KEYS or STANDARD_RIGHTS_READ or
+      (OldAccess and (KEY_WOW64_64KEY or KEY_WOW64_32KEY));
     KeyHandle:=GetKey(Key);
     if KeyHandle<>0 then
       begin
@@ -209,7 +210,7 @@ Var
   OldAccess: LongWord;
 begin
   OldAccess:=fAccess;
-  fAccess:=KEY_READ;
+  fAccess:=KEY_READ or (OldAccess and (KEY_WOW64_64KEY or KEY_WOW64_32KEY));
   try
     Result:=OpenKey(Key, False);
   finally

+ 2 - 0
rtl/win/wininc/defines.inc

@@ -1100,6 +1100,8 @@
      KEY_QUERY_VALUE = 1;
      KEY_READ = $20019;
      KEY_SET_VALUE = 2;
+     KEY_WOW64_64KEY = $0100;
+     KEY_WOW64_32KEY = $0200;
      KEY_WRITE = $20006;
      PROCESS_ALL_ACCESS = $1f0fff;
      PROCESS_CREATE_PROCESS = 128;