IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Nono40.developpez.com
Le petit coin du web de Nono40
SOURCES TESTS DELPHI WIN32 AUTOMATISMES DELPHI .NET QUICK-REPORT
Retour à l'accueil
52 - UTILISER REGSAVEKEY SOUS NT/2000/XP

PRÉSENTATION : Utiliser la fonction RegSaveKey du TRegistry sous NT/2000/Xp
ZIP : Téléchargez le zip APERÇUS :

NOTES : L'utilisation de cette fonction nécessite des droits supplémentaires. La fonction donnée dans le source 0051 permet d'jouter le droit SE_BACKUP_NAME au compte en cours avant d'effectuer la sauvegarde.

CODE :
Unit Unit1;
//
// Sujet : Utiliser la fonction RegSaveKey sous NT/2000/Xp
//
// Par Nono40 : http://nono40.developpez.com   http://nono40.fr.st
//              mailTo:nono40@fr.st
//
// Le 20/04/2003
//

Interface

Uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

Type
  TForm1 = Class(TForm)
    Button1: TButton;
    Procedure Button1Click(Sender: TObject);
  Private
    { Déclarations privées }
  Public
    { Déclarations publiques }
  End;

Var
  Form1: TForm1;

Implementation

Uses Registry;

{$R *.dfm}

Function _AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL;
  NewState: PTokenPrivileges; BufferLength: DWORD;
  PreviousState: Integer; ReturnLength: Integer): BOOL;stdcall; external advapi32 name 'AdjustTokenPrivileges';

Function LoggedSetPrivilege ( hProcess:THANDLE;Droit:String;bEnable:Boolean):Boolean;
Var
  Info  : TTokenPrivileges;
  Token : THandle;
  Res   : Boolean;
Begin
  // Ouverture des droits du compte
  Res := OpenProcessToken ( hProcess,TOKEN_ADJUST_PRIVILEGES,Token);

  If Not Res Then
  Begin
    ShowMessage('Ouverture des droits impossible' );
    Result:=False;
    Exit;
  End;

  // Enable ou disable?
  Info.PrivilegeCount := 1;
  If  bEnable
    Then Info.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
    Else Info.Privileges[0].Attributes := 0;

  // Obtenir le LUID du droit dont on veut changer l'état.
  Res := LookupPrivilegeValue ( Nil,Pchar(Droit),Info.Privileges[0].Luid);
  If Not Res Then
  Begin
    ShowMessage('Impossible d''obtenir le LUID de '+Droit );
    Result:=False;
    Exit;
  End;

  // Modification du droit
  Res := _AdjustTokenPrivileges ( Token, FALSE,@Info, 000);
  If Not Res Then
  Begin
    ShowMessage('Impossible de modifier le droit, erreur '+IntToStr(GetLastError));
    Result:=False;
    Exit;
  End
  Else
  Begin
    If GetLastError<>ERROR_SUCCESS Then
    Begin
      ShowMessage('Impossible d''activer le droit '+Droit+', vérifiez la gestion locale des comptes.');
      Result:=False;
      Exit;
    End;
  End;

  CloseHandle( Token );

  Result:=True;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Const
  sFileName = 'c:\temp\test.txt';
  sRegString = 'Software\Borland\Delphi';
Var
  Reg: TRegistry;
Begin
  // On supprime le fichier existant
  If FileExists(sFilename) Then
  Begin
    FileSetAttr(sFilename, 0); // clear Read-Only and Hidden flags
    Deletefile(sFilename);
  End;

  // Il faut les droits de 'BACKUP' pour utiliser SaveKey
  LoggedSetPrivilege(GetCurrentProcess,'SeBackUpPrivilege',True);

  // Copie d'une partie de la base de registres.
  Reg := TRegistry.Create;
  Try
    Reg.RootKey:= HKEY_LOCAL_MACHINE;
    If Reg.SaveKey(sRegString, sFilename) Then
      Showmessage('Sauvegarde effectuée ' + sFilename)
    Else
      Showmessage('Sauvegarde non effectuée');
  Finally
    Reg.Free;
  End;

  // On supprime ensuite les droits de BackUp donnés plus haut
  LoggedSetPrivilege(GetCurrentProcess,'SeBackUpPrivilege',False);
End;

End.

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Bruno Guérangé. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.