Tak jak w temacie, mam problem z czytaniem REG_RESOURCE_LIST oraz REG_FULL_RESOURCE_DESCRIPTOR (jak możecie zobaczyć dalej nie jest to aż tak ważne.. bo póki co kod to pomija). Z REG_MULTI_SZ uporałem się po wielu problemach. Oto kod który ma czytać te dane:
if reg.GetDataInfo(lst[i],r) then
begin
case r.RegData of
rdString,rdExpandString:CheckKey(s+'\'+lst[i],reg.ReadString(lst[i]));
rdInteger:CheckKey(s+'\'+lst[i],inttostr(reg.ReadInteger(lst[i])));
else begin
if (r.DataSize>0)and(DWORD(r.RegData)<>REG_FULL_RESOURCE_DESCRIPTOR) then
begin
if DWORD(r.RegData)=REG_MULTI_SZ then
begin
ReadMultiSZ(reg,lst[i],s2);
CheckKey(s+'\'+lst[i],s2);
continue;
end;
//setlength(dat,r.DataSize);
GetMem(dat,r.DataSize);
reg.ReadBinaryData(lst[i],pointer(dat)^,r.DataSize);
setlength(s2,r.DataSize);
p:=dat-1;
for j:=0 to r.DataSize-1 do
begin
inc(p);
s2[j]:=p^;
end;
CheckKey(s+'\'+lst[i],s2);
end;
end;
end;
end else writeln('Failed to read ',s+'\'+lst[i]);
Tak jak widzicie czytam to za pomocą ReadBinaryData, ale niestety nie działa to z typem wymienionym w temacie.
Chodzi mi o przeczytanie zawartości, nie musi to mieć sensu większego. Tj. liczy się przeczytanie, nie zrozumienie danych. Nie pytajcie po co :-] .
Jeśli okaże się to pomocne, korzystam z najnowszego Lazarusa (0.9.30 z FPC 2.4.2).
Tego typu klucze można znaleźć w okolicach HKEY_LOCAL_MACHINE\HARDWARE\RESOURCEMAP\Hardware Abstraction Layer .
A, i żeby nie było, szukałem już w google oraz forum.
P.S. Wiem że zapomniałem zwolnić pamięć . .