Hmm, jetzt habe ich mal versucht so eine Klonerei zu implementieren. Im Adminkontext funktioniert das auch, die Schlüssel und Werte werden aus
HKLM in
HKCU geklont falls sie da nicht existieren. Im normalen Userkontext (NICHT Gast sondern Standardbenutzer) dagegen nach wie vor keine Schreiboperation möglich. Ich habe die
Unit mal angehängt. Der ganze Zauber findet in ValueExists statt:
Delphi-Quellcode:
function TRegConfig.ValueExists(
const AName:
string): Boolean;
var
HKCU,
HKLM: TRegistry;
Info: TRegDataInfo;
begin
Result:= FALSE;
try
HKCU:= TRegistry.Create(KEY_ALL_ACCESS
or KEY_WOW64_64KEY);
HKLM:= TRegistry.Create(KEY_READ
or KEY_WOW64_64KEY);
HKCU.RootKey:= HKEY_CURRENT_USER;
HKLM.RootKey:= HKEY_LOCAL_MACHINE;
if HKCU.OpenKey(FReg.CurrentPath, TRUE)
then begin
if HKCU.ValueExists(AName)
then begin
Result:= TRUE;
Exit;
end else begin
if HKLM.OpenKey(FReg.CurrentPath, FALSE)
and HKLM.ValueExists(AName)
then begin
HKLM.GetDataInfo(AName, Info);
case Info.RegData
of
rdString:
HKCU.WriteString(AName,
HKLM.ReadString(AName));
rdInteger:
HKCU.WriteInteger(AName,
HKLM.ReadInteger(AName));
end;
Result:= TRUE;
end;
end;
end;
finally
FreeAndNil(
HKCU);
FreeAndNil(
HKLM);
end;
end;