AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DACL und die Reihenfolge

Ein Thema von Alter Mann · begonnen am 26. Jan 2007 · letzter Beitrag vom 28. Jan 2007
Antwort Antwort
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

DACL und die Reihenfolge

  Alt 26. Jan 2007, 12:50
Hallo,

ich bin gerade dabei für eine spezielle Sache die NTFS-Rechte an Dateiobjekten zu ändern.
Für die Umsetzung greife ich auf TNTFileObject von Colin Wilson zurück.

Es muss die Vererbung von Rechten auf ein Verzeichnis abgeschaltet werden,
sowie ein Gruppenkonto entfernt und ein Benutzerkonto hinzugefügt werden.

Dazu benutze ich folgenden Code:
Delphi-Quellcode:
function CreateFolder(const Path : String;
                      const SamName : String;
                      const MemberOf : String;
                      Memo : TMemo = nil) : Boolean;
var
  FD : Boolean;
  AR : Boolean;
  FO : TNTFileObject;
  ACL: TAccessControlList;
  ACE: TAccessControlElement;
  I,M: Integer;
begin
  FD := ForceDirectories(Path + '\' + SamName);
  if FD then
  begin
    FO := TNTFileObject.Create(Path + '\' + SamName);
    try
       ACL:= TAccessControlList.Create;
       try
         if FO.GetDiscretionaryAccessList(ACL) then
         begin
           M := ACL.ElementCount - 1;
           for I := 0 to M do
           begin
            ACE := TAccessControlElement.Create(ACL.Element[I].Name,
                                                ACL.Element[I].Type_,
                                                ACL.Element[I].Flags xor CONTAINER_INHERIT_ACE,
                                                ACL.Element[I].Mask);
            if POS(MemberOf, ACL.Element[I].Name) = 0 then ACL.AddElement(ACE);
           end;
           for I := 0 to M do ACL.DeleteElement(0);
           ACE := TAccessControlElement.Create(SamName, aeAccessAllowed, EX_MASK_ALL, EX_FILE_All);
           ACL.AddElement(ACE);
           FO.SetDiscretionaryAccessList(ACL);
           AR := True;
         end;
       finally
        ACL.Free;
       end;
    finally
       FO.Free;
    end;
  end;
  if (Memo <> nil) and not FD then Memo.Lines.Add('Error ForceDirectories: ' + Path);
  if (Memo <> nil) and not AR then Memo.Lines.Add('Error FileObjectAccessRights: ' + Path + ' <' + SamName + '>');
  Result := FD and AR;
end;
Mein Problem hierbei ist nun, das der Benutzer nicht in der erwarteten Reihenfolge in der DACL steht.
Kann jemand mal ein kurzen Hinweis geben in welcher Reihenfolge die Einträge sein sollten.

Danke
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: DACL und die Reihenfolge

  Alt 28. Jan 2007, 11:10
*push*
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: DACL und die Reihenfolge

  Alt 28. Jan 2007, 12:43
Moin Alter Mann,

wozu soll den hier das xor dienen?

ACL.Element[I].Flags xor CONTAINER_INHERIT_ACE or bzw. and not kann ich mir ja noch vorstellen, aber xor
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
946 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: DACL und die Reihenfolge

  Alt 28. Jan 2007, 14:50
Hi,

damit lösche ich den Wert 'CONTAINER_INHERIT_ACE'.

Hat aber nichts mit der Reihenfolge zu tun.

Gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz