DruckenMister WongFacebook

Streams in Registry schreiben und lesen

System Win9x, WinNT, Win2000, WinXP, Vista, Win7
Ab Delphi-Version Delphi 1
Letzte Änderung 28.09.2010

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;