Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 11. Okt 2002, 11:59
Hat sich alles geklärt. Nach dem ich die Rechte hatte ging es auch. Nur das Dateiformat kann man nicht mit Doppleklick wieder importieren, weil die Regedit ein anderes Dateiformat erwartet und mit den Hive-Dateien nichts anfangen kann. Man muß also RegLoadKey zum Importieren benutzen.

So geht es: (Ist von Nico)
Rechte holen (ist allgemein verwendbar)
Code:
[b]function[/b] SetPrivilege(Privilege: PChar; EnablePrivilege: Boolean;
  out PreviousState: Boolean): DWORD;
[b]var[/b]
  Token: THandle;
  NewState: TTokenPrivileges;
  Luid: TLargeInteger;
  PrevState: TTokenPrivileges;
  Return: DWORD;
[b]begin[/b]
  PreviousState := True;
  [b]if[/b] (GetVersion() > $80000000) [b]then[/b]
    [color=#000080][i]// Win9x [/i][/color]
    Result := ERROR_SUCCESS
  [b]else[/b]
  [b]begin[/b]
    [color=#000080][i]// WinNT [/i][/color]
    [b]if[/b] [b]not[/b] OpenProcessToken(GetCurrentProcess(), MAXIMUM_ALLOWED, Token) [b]then[/b]
      Result := GetLastError()
    [b]else[/b]
    [b]try[/b]
      [b]if[/b] [b]not[/b] LookupPrivilegeValue([b]nil[/b], Privilege, Luid) [b]then[/b]
        Result := GetLastError()
      [b]else[/b]
      [b]begin[/b]
        NewState.PrivilegeCount := 1;
        NewState.Privileges[0].Luid := Luid;
        [b]if[/b] EnablePrivilege [b]then[/b]
          NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
        [b]else[/b]
          NewState.Privileges[0].Attributes := 0;
        [b]if[/b] [b]not[/b] AdjustTokenPrivileges(Token, False, NewState,
          SizeOf(TTokenPrivileges), PrevState, Return) [b]then[/b]
          Result := GetLastError()
        [b]else[/b]
        [b]begin[/b]
          Result := ERROR_SUCCESS;
          PreviousState :=
            (PrevState.Privileges[0].Attributes [b]and[/b] SE_PRIVILEGE_ENABLED <> 0);
        [b]end[/b];
      [b]end[/b];
    [b]finally[/b]
      CloseHandle(Token);
    [b]end[/b];
  [b]end[/b];
[b]end[/b];
Export:
Code:
[b]function[/b] RegSaveKeyToFile(Key: HKEY; [b]const[/b] SubKey, FileName: [b]string[/b]): DWORD;
[b]const[/b]
  SE_BACKUP_NAME = 'SeBackupPrivilege';
[b]var[/b]
  Return: DWORD;
  PreviousState: Boolean;
  KeyHandle: HKEY;
[b]begin[/b]
  Return := SetPrivilege(SE_BACKUP_NAME, True, PreviousState);
  [b]if[/b] (Return <> ERROR_SUCCESS) [b]then[/b]
    Result := Return
  [b]else[/b]
  [b]try[/b]
    KeyHandle := 0;
    Result := RegOpenKeyEx(Key, PChar(SubKey), 0, MAXIMUM_ALLOWED, KeyHandle);
    [b]if[/b] (Result = ERROR_SUCCESS) [b]then[/b]
    [b]try[/b]
      Result := RegSaveKey(KeyHandle, PChar(FileName), [b]nil[/b]);
    [b]finally[/b]
      RegCloseKey(KeyHandle);
    [b]end[/b];
  [b]finally[/b]
    [b]if[/b] ([b]not[/b] PreviousState) [b]then[/b]
      SetPrivilege(SE_BACKUP_NAME, PreviousState, PreviousState);
  [b]end[/b];
[b]end[/b];
Und Aufruf mit:
Code:
RegsaveKeyToFile(HKEY_CURRENT_USER, GetSubKey(LoadStr(103)), Path);
Zu beachten: Falls dier Datei schon besteht, muß sie vorher gelöscht werden!

Hm, wenn ich mir das so ankucken, auf dem richtigen Weg war ich, nur waren meine Funktionen nicht so ausgefeilt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat