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
51 - MODIFIER LES DROITS D'UN COMPTE

PRÉSENTATION : Modifier les droits d'un compte sous NT/2000/Xp
ZIP : Téléchargez le zip APERÇUS :

NOTES : Ce source à pour but de montrer comment modifier les droits d'un compte pour des fonctions particulières. Par exemple pour la sauvegarde d'une partie de la base de registre un compte doit avoir le droit SE_BACKUP_NAME.

L'utilsation de la fonction ci-dessous est simple :
- Pour activer un droit :
LoggedSetPrivilege(GetCurrentProcess,'SeBackUpPrivilege',True);
- Pour desactiver un droit :
LoggedSetPrivilege(GetCurrentProcess,'SeBackUpPrivilege',False);


CODE :
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;

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.