Accueil > Forum > > > > Droits NTFS
Droits NTFS
lundi 18 octobre 2004 à 10:58:56 |
Droits NTFS

divadav
|
Bonjour à tous !! Je vourais lister les droits d'un fichier où d'un répertoire (un peu comme quand on fait [Clic Droit][Propriétés][Onglet Sécurité]...), et j'utilise pour ça des fonctions bas-niveau de windows comme GetFileSecurity, GetSecurityDescriptorControl, GetSecurityDescriptorDacl et GetExplicitEntriesFromAcl... Et je bute sur cette dernière !! En fait, j'arrive bien à récupérer un pointeur vers la liste de contrôle d'accès de l'objet (DACL), mais je n'arrive pas à récupérer les entrées de cette liste (ACE). Le fonction GetExplicitEntriesFromAcl me renvoie le code d'erreur 87, soit "Paramètres incorrect", et je n'arrive pas à trouver pourquoi... Quelqu'un peut m'aider ?? Je laisse mon code, il doit y avoir une erreur dedans : unit frmMain;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, aclAPI, accCtrl, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Déclarations privées } procedure TrouverACL(sObjet: String); public { Déclarations publiques } end;
var Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.TrouverACL(sObjet: String); var FiName : PChar; // Nom de l'objet psd : PSECURITY_DESCRIPTOR; // Pointeur vers le Descripteur de Sécurité dwLen : DWORD; // Taille du descripteur de sécurité
lpbDaclPresent : Bool; // Présence du DACL lpbDaclDefaulted : Bool; // DACL automatique (hérité) pDacl : PACL; // Pointeur vers le DACL
nNbEntries : Cardinal; // Nb d'entrées (d'ACE) pListEntries : PEXPLICIT_ACCESS_A; // Pointeur vers un tableau de // structures de type EXPLICIT_ACCESS begin
// Initialisation FiName := PChar(sObjet + #0); pDacl := nil; psd := nil; dwLen := 0; nNbEntries := 0; pListEntries := nil; GetFileSecurity(FiName,DACL_SECURITY_INFORMATION,psd,0,dwLen); psd := AllocMem(dwLen);
// Récup des infos de sécurité (psd) try if not GetFileSecurity(PChar(FiName),DACL_SECURITY_INFORMATION,psd,dwLen,dwLen) then begin ShowMessage(SysErrorMessage(GetLastError)); exit; end;
// Récup de la liste de contrôle d'accès (pDacl) GetSecurityDescriptorDacl(psd, lpbDaclPresent, pDacl, lpbDaclDefaulted); IF lpbDaclPresent then begin If pDacl = nil Then Memo1.lines.add('DACL nul : Accès total') Else begin Memo1.lines.add('DACL-ACL-Count: ' + inttostr(pDacl^.AceCount)); Memo1.lines.add('DACL-ACL-Size: ' + inttostr(pDacl^.AclSize)); // Récup d'un tableau contenant les ACE (pListEntries) GetExplicitEntriesFromAcl(pDacl^, nNbEntries, pListEntries); End; end else begin Memo1.Lines.Add('Pas de DACL'); end;
finally FreeMem(psd,dwLen); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin TrouverACL(Nom du fichier ou dossier à voir); end;
end.
|
Merci d'avance !! Keep Cool & Be Wild Divad
|
|
lundi 18 octobre 2004 à 14:32:16 |
Re : Droits NTFS

leveugle
|
Salut,
il s'agit juste d'une erreur de niveau de pointeur. La fonction admet un pointeur de pointeur sur tableau et tu ne luitransmets qu'un pointeur de tableau. voici la correction a faire :
GetExplicitEntriesFromAcl(pDacl^, nNbEntries, @pListEntries)
Damien
|
|
lundi 18 octobre 2004 à 14:45:11 |
Re : Droits NTFS

divadav
|
Merci beaucoup !! C'est ça !!
Et maintenant, dernière question...
Comment puis-je lire le tableau transmis ?
Je pense qu'il faut que je déclare un tableau de structure EXPLICIT_ACCESS, puis que je réalloue la mémoire de ce tableau en fonction du nombre d'ACE, mais je connais pas la syntaxe de tout ça...
Keep Cool & Be Wild Divad
|
|
lundi 18 octobre 2004 à 15:32:21 |
Re : Droits NTFS

leveugle
|
Réponse acceptée !
Salut,
voici ton code complété qui a l'air de fonctionner.
A+
Damien
unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, aclAPI, accCtrl, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Déclarations privées } procedure TrouverACL(sObjet: String); public { Déclarations publiques } end;
var Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.TrouverACL(sObjet: String); var FiName : PChar; // Nom de l'objet psd : PSECURITY_DESCRIPTOR; // Pointeur vers le Descripteur de Sécurité dwLen : DWORD; // Taille du descripteur de sécurité
lpbDaclPresent : Bool; // Présence du DACL lpbDaclDefaulted : Bool; // DACL automatique (hérité) pDacl : PACL; // Pointeur vers le DACL
nNbEntries : Cardinal; // Nb d'entrées (d'ACE) pListEntries : PEXPLICIT_ACCESS_; // Pointeur vers un tableau de pEntry : PChar; // structures de type EXPLICIT_ACCESS i : Integer; begin
// Initialisation FiName := PChar(sObjet + #0); pDacl := nil; psd := nil; dwLen := 0; nNbEntries := 0; pListEntries := nil; GetFileSecurity(FiName,DACL_SECURITY_INFORMATION,psd,0,dwLen); psd := AllocMem(dwLen);
// Récup des infos de sécurité (psd) try if not GetFileSecurity(PChar(FiName),DACL_SECURITY_INFORMATION,psd,dwLen,dwLen) then begin ShowMessage(SysErrorMessage(GetLastError)); exit; end;
// Récup de la liste de contrôle d'accès (pDacl) GetSecurityDescriptorDacl(psd, lpbDaclPresent, pDacl, lpbDaclDefaulted); IF lpbDaclPresent then begin If pDacl = nil Then Memo1.lines.add('DACL nul : Accès total') Else begin Memo1.lines.add('DACL-ACL-Count: ' + inttostr(pDacl^.AceCount)); Memo1.lines.add('DACL-ACL-Size: ' + inttostr(pDacl^.AclSize)); // Récup d'un tableau contenant les ACE (pListEntries) if GetExplicitEntriesFromAcl(pDacl^, nNbEntries, @pListEntries) = ERROR_SUCCESS then begin try for i := 0 to pDacl^.AceCount - 1 do begin pEntry := (PChar(pListEntries) + i * sizeof(EXPLICIT_ACCESS)) ; Memo1.Lines.Add('grfAccessPermissions[' + Inttostr(i) + '] = ' + IntToStr(PEXPLICIT_ACCESS_(pEntry)^.grfAccessPermissions)); end; finally LocalFree(HLOCAL(pListEntries)); end; end;
End; end else begin Memo1.Lines.Add('Pas de DACL'); end;
finally FreeMem(psd,dwLen); end; end;
procedure TForm1.FormCreate(Sender: TObject); begin TrouverACL('c:\Master.txt'); end;
end.
|
|
lundi 18 octobre 2004 à 16:04:11 |
Re : Droits NTFS

divadav
|
Merci beaucoup, mais en fin de compte j'ai réussi à faire un tableau de structure et à l'utiliser...
C'est plus simple, et un peu plus lisible pour moi !!
Keep Cool & Be Wild Divad
|
|
mercredi 1 avril 2009 à 09:52:51 |
Re : Droits NTFS

Ivanov
|
Salut Divadav, Ton sujet m'intéresse fortement. Peux-tu poster ton code final qui fonctionne?
|
|
mercredi 1 avril 2009 à 10:20:00 |
Re : Droits NTFS
|
Cette discussion est classée dans : end, psd, dwlen, dacl, pdacl
Répondre à ce message
Sujets en rapport avec ce message
probleme dans mon programme [ par tarik ]
monsieur kerad je crois que j'ai un bug dans mon programme ci-dessousprocedure TForm1.Button1Click(Sender: TObject);begintable1.open;try Table1.First
urgent : code à corriger. Cela fait des jours que je suis dessus !!!!!! [ par Marcel ]
Le code qui suit sert à créer un compte à rebours. Les 2 dernières lignes de ce code sont incorrecte car le compilateur signale:[Erreur]Unit1.pas(56):
Erreur: Declaration forward ... [ par Lénaïc ]
Avec le code ci-dessous j'ai une erreur "Déclaration forward ou external non satisfaite: 'TFrm_Perso.ComboAddFile'".Je n'arrive pas à trouver l'erreur
Pb sur une classe pile [ par ninuko ]
Aider moi, au secour!!!! URGENT!!!!!unit UntClasPile; { UntClasPile porteuse de la Classe pile Cette classe permet de :
raise Exception.Create : gérer les exceptions ? [ par manudel ]
Voilà je ne sais pas comment "catcher" une exception.L'exception se déclenche, et à mon avis remonte au niveau le plus haut, en cherchant un gestionna
Datamodule et accès à partir d'une form [ par manudel ]
Voilà, je voudrais avoir accès aux événements des objets figurant sur mon datamodule, mais je n'y arrive pas. J'ai l'erreur suivante : "le type de l'e
visibilité procédures et fonctions dans une unit [ par manudel ]
Je déclare une fonction qui renvoit un résultat de type TPersonne, et je voudrais savoircomment faire pour la mettre au même nivau de visibilité que l
Code pas fiable dans un livre [:(!] [ par Youyou0214 ]
Voil j'ai achet un livre sur delphi et je fais leurs exercises. Tout march pars un lanceur D'application. Il est compos d'une comboBox ( nom (c le n
Index d'un table Dbase [ par webazard ]
Bonjour, je crée un base Dbase indiqué dans l'aide de delphi en remplacant ttparadox par ttdbase.en supprimant la construction d'index min prog marche
Hints dans une DLL [ par almi ]
J'ai une fenêtre (TForm) qui fonctionne parfaitement dans mon executable.Si je la place dans une DLL, j'obtiens le message :Ne peut assigner TFont à T
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|