Jako ze interesuje Cie zapis binarny wiec:
(sorry modemowcy :))
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ButtonZapisRegBinarnie: TButton;
ButtonOdczytRegBin: TButton;
procedure ButtonZapisRegBinarnieClick(Sender: TObject);
procedure ButtonOdczytRegBinClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function SetPrivilege(Privilege: PChar; EnablePrivilege: Boolean;
out PreviousState: Boolean): DWORD;
var
Token: THandle;
NewState: TTokenPrivileges;
Luid: TLargeInteger;
PrevState: TTokenPrivileges;
Return: DWORD;
begin
PreviousState := True;
if (GetVersion() > $80000000) then
// Win9x
Result := ERROR_SUCCESS
else
begin
// WinNT
if not OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, Token) then
Result := GetLastError()
else
try
if not LookupPrivilegeValue(nil, Privilege, Luid) then
Result := GetLastError()
else
begin
NewState.PrivilegeCount := 1;
NewState.Privileges[0].Luid := Luid;
if EnablePrivilege then
NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
else
NewState.Privileges[0].Attributes := 0;
if not AdjustTokenPrivileges(Token, False, NewState,
SizeOf(TTokenPrivileges), PrevState, Return) then
Result := GetLastError()
else
begin
Result := ERROR_SUCCESS;
PreviousState :=
(PrevState.Privileges[0].Attributes and SE_PRIVILEGE_ENABLED <> 0);
end;
end;
finally
CloseHandle(Token);
end;
end;
end;
{---------------------------------}
function RegSaveKeyToFile(Key: HKEY; const SubKey, FileName: string): DWORD;
const
SE_BACKUP_NAME = 'SeBackupPrivilege';
var
Return: DWORD;
PreviousState: Boolean;
KeyHandle: HKEY;
begin
Return := SetPrivilege(SE_BACKUP_NAME, True, PreviousState);
if (Return <> ERROR_SUCCESS) then
Result := Return
else
try
KeyHandle := 0;
Result := RegOpenKeyEx(Key, PChar(SubKey), 0, MAXIMUM_ALLOWED, KeyHandle);
if (Result = ERROR_SUCCESS) then
try
Result := RegSaveKey(KeyHandle, PChar(FileName), nil);
finally
RegCloseKey(KeyHandle);
end;
finally
if (not PreviousState) then
SetPrivilege(SE_BACKUP_NAME, PreviousState, PreviousState);
end;
end;
{---------------------------------}
function RegLoadKeyFromFile(Key: HKEY; const SubKey, FileName: string): DWORD;
const
SE_RESTORE_NAME = 'SeRestorePrivilege';
var
Return: DWORD;
PreviousState: Boolean;
KeyHandle: HKEY;
begin
Return := SetPrivilege(SE_RESTORE_NAME, True, PreviousState);
if (Return <> ERROR_SUCCESS) then
Result := Return
else
try
KeyHandle := 0;
Result := RegOpenKeyEx(Key, PChar(SubKey), 0, MAXIMUM_ALLOWED, KeyHandle);
if (Result = ERROR_SUCCESS) then
try
Result := RegLoadKey(Key,PChar(Subkey), PChar(FileName));
finally
RegCloseKey(KeyHandle);
end;
finally
if (not PreviousState) then
SetPrivilege(SE_RESTORE_NAME, PreviousState, PreviousState);
end;
end;
{---------------------------------}
{zapis do pliku (binarnie!!) }
procedure TForm1.ButtonZapisRegBinarnieClick(Sender: TObject);
begin
RegSaveKeyToFile(HKEY_CURRENT_USER,
'Software\Borland',
'c:\test.reg');
end;
{analogicznie}
procedure TForm1.ButtonOdczytRegBinClick(Sender: TObject);
begin
RegLoadKeyFromFile(HKEY_CURRENT_USER, 'Software\Borland','c:\test.reg');
end;
end.
Co do funkcji RegSaveKeyToFile i RegLoadKeyFromFile zalecam ostroznosc !!
[cya]