Hallo
ich versuche unter Xp Pro Sp2 einen RegKey auszulesen dessen Type unbekannt ist (rdUnknown). Nur geht - bzw ließt es irgendwie nicht - sonst würde ich ja nicht Posten
Soweit so gut... versuche habe ich es mit GetDataSize & ReadBinaryData. Auch wenn es nicht zur
Exception kommt bleibt der Buffer leer da GetDataSize -1 zurückgibt so das die Schleife eh nie durchlaufen würde. Auch wenn ich diesen Wert mit 255 initalisiere kommen am Ende nur Nullen raus (ohne Einsen dazwischen).
Wiseo ? Fehlende Priviliegen etc. können es ja nicht sein, da das das Programm eh nur mit Systemrechten läuft (bzw Zugriff auf dem Key bekommt).
Delphi-Quellcode:
program RegTest;
{$APPTYPE CONSOLE}
uses
SysUtils, Registry, WIndows, Classes;
const
Key = '\SAM\SAM\Domains\Account\Users\Names\';
Value = '@'; // for empty / default value
var
Reg: TRegistry;
slKeys, slValues: TStringList;
I, X, J, k, iSize: Integer;
P: PChar;
begin
Reg := TRegistry.Create;
Reg.RootKey := WIndows.HKEY_LOCAL_MACHINE;
if Reg.OpenKeyReadOnly(Key) then begin
writeln('successfull opening');
slKeys := TStringList.Create;
Reg.GetKeyNames(slKeys);
for I := 0 to slKeys.Count-1 do begin
slValues := TstringList.Create;
if Reg.OpenKeyReadOnly(Key + slKeys.Strings[I]) then begin
Reg.GetValueNames(slValues);
for X := 0 to slValues.Count-1 do begin
writeln('lese value in ' + slKeys.Strings[I]);
J := Reg.GetDataSize(Value);
GetMem(p, j);
Reg.ReadBinaryData(Value, p^, J);
for k := 0 to j - 1 do
writeln(IntToHex(Byte(p[k]), 2));
FreeMem(p, j);
end;
slValues.Free;
end;
end;
slKeys.Free;
end else
writeln('error');
Reg.Free;
readln;
end.
Im Detail geht es mir eigendlich um den Typen da dieser Wert Name eines Übergeodnen Keys ist.