Hmm..
Da ich überwiegend 32bit Tools erstelle habe ich immer die Probleme auf einem 64bit Windows Systemeinstellungen auslesen zu können.
Deshalb habe ich mir hier ein Hilfskonstrukt zusammengebastelt:
Delphi-Quellcode:
const
KEY_WOW64_64KEY = $0100;
KEY_WOW64_32KEY = $0200;
function IsWow64A: Boolean;
type
TIsWow64Process =
function(
// Type of IsWow64Process API fn
Handle: Windows.THandle;
var Res: Windows.BOOL ): Windows.BOOL;
stdcall;
var
IsWow64Result: Windows.BOOL;
// Result from IsWow64Process
IsWow64Process: TIsWow64Process;
// IsWow64Process fn reference
begin
// Try to load required function from kernel32
IsWow64Process := Windows.GetProcAddress(Windows.GetModuleHandle('
kernel32'), '
IsWow64Process');
if Assigned(IsWow64Process)
then begin
// Function is implemented: call it
if not IsWow64Process(Windows.GetCurrentProcess, IsWow64Result)
then
raise Exception.Create('
IsWow64: bad process handle');
Result := IsWow64Result;
// Return result of function
end else
// Function not implemented: can't be running on Wow64
Result := False;
end;
if IsWow64A
then
Reg := TRegistry.Create(KEY_READ
or KEY_WOW64_64KEY)
else
Reg := TRegistry.Create(KEY_READ);
try
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('
\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', False)
then begin
try
..
finally
Reg.CloseKey;
end;
end;
finally
Reg.Free;
end;
Wenn ich als 32bit Prozess unter 64bit
OS aus der Registry lesen/schreiben will und zwar aus dem NICHT Wow64.. dann brauche ich KEY_WOW64_64KEY.
Umgekehrt kann ein 64bit Programm die Konfigurationen aus einem wow64-Zweig auslesen, indem explizit KEY_WOW64_32KEY angegeben wird.