Home » Tipps & Tricks » System » Registry » Streams in Registry schreiben und lesen

Streams in Registry schreiben und lesen

Mit den beiden folgenden Funktionen können Daten, die in einem Stream gespeichert sind, in die Registry geschrieben bzw. Daten aus der Registry in einen Stream eingelesen werden.Die Daten werden als Binärwert in der Registry gespeichert.

uses Registry;

function StreamToRegistry(Stream: TStream; RootKey: HKEY; const Key, Name: string): Boolean;
var
  Reg: TRegistry;
  Buf: Pointer;
  Size: Cardinal;
begin
  Result := True;
  Buf := nil;
  try
   // Datei einlesen
    Size := Stream.Size - Stream.Position;
    if Size > 0 then
    begin
      Buf := AllocMem(Size);
      Stream.Read(Buf^, Size);
    end;

   // Daten in Registry schreiben
    if Size > 0 then
    begin
      Reg := TRegistry.Create;
      try
        Reg.RootKey := RootKey;
        if Reg.OpenKey(Key, True) then
        begin
          Reg.WriteBinaryData(Name, Buf^, Size);
          Reg.CloseKey;
        end else Result := False;
      finally
        Reg.Free;
      end;
    end;
  finally
    if Assigned(Buf) then FreeMem(Buf);
  end;
end;

function StreamFromRegistry(Stream: TStream; RootKey: HKEY; const Key, Name: string): Boolean;
var
  Reg: TRegistry;
  Buf: Pointer;
  Size: Cardinal;
begin
  Result := False;
  Reg := TRegistry.Create;
  try
    Reg.RootKey := RootKey;
    if Reg.OpenKeyReadOnly(Key) then
    begin
      if (Reg.ValueExists(Name)) and (Reg.GetDataType(Name) = rdBinary) then
      begin
        Result := True;
        Size := Reg.GetDataSize(Name);
        if Size > 0 then
        begin
          Buf := AllocMem(Size);
          try
            Reg.ReadBinaryData(Name, Buf^, Size);
            Stream.Write(Buf^, Size);
          finally
            FreeMem(Buf);
          end;
        end;
      end;
      Reg.CloseKey;
    end;
  finally
    Reg.Free;
  end;
end;