Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   DACL: inheritance-Flag, von wem geerbt? (https://www.delphipraxis.net/161778-dacl-inheritance-flag-von-wem-geerbt.html)

hsg 20. Jul 2011 14:30

DACL: inheritance-Flag, von wem geerbt?
 
Hi,

ich wühle mich zur Zeit ein wenig durch SACL/DACL. Wenn ich die DACL auslese, bekomme ich bei den meisten Dateien/Ordnern das Flag INHERITED_ACE (und ähnlich).

Wenn ich in den Dateien unter Eigenschaften->Sicherheit/Erweitert mir die Berechtigungen ansehe, dann kann man auch sehen, von wo diese Berechtigung vererbt wurde.
Wie kann ich in meinem eigenem Programm dieses feststellen?

Gerne werden auch Hinweise auf die richtige Einstiegshilfe in der Jwscl entgegengenommen.

Danke und Gruß
Jörg

p80286 20. Jul 2011 16:09

AW: DACL: inheritance-Flag, von wem geerbt?
 
Nach meiner Erfahrung kannst Du nur nachschauen ob der Vorläufer dieses "Recht" schon hatte und es vererben konnte.
Mir sind allerdings schon Dateien untergekommen, denen Rechte vererbt wurden und es gab keinen, der diese Rechte hätte vererben können.

Gruß
K-H

hsg 21. Jul 2011 06:18

AW: DACL: inheritance-Flag, von wem geerbt?
 
Hmmm, so ein Phänomen habe ich auch. Trotzdem steht in der Vererbungs-Liste von Windows ein <nicht geerbt> drin. Daher habe ich gehofft anhand dessen mich beim setzen der nötigen Rechte darauf verlassen zu können. Wie ermittelt denn Windows den Vererbungsbaum?

hsg 21. Jul 2011 12:51

AW: DACL: inheritance-Flag, von wem geerbt?
 
Ich antworte mal mir selber :-D

Es geht mit der Jwscl relativ simple:
Delphi-Quellcode:
procedure TReadDACL_JVWS.LiesDACL(cFile: string);
var
    oFD      : TJwSecureFileObject;
    oDacl    : TJwDAccessControlList;
    aGeerbt  : TJwInheritedFromArray;
    i        : Integer;
    aElem    : TJwInheritedFromRecord;
    cZeile   : string;
begin
  try
    oFD                := TJwSecureFileObject.Create(cFile);
    try
      oDacl            := oFD.GetDACL();
      if oDacl <> nil then begin
        aGeerbt        := oFD.GetFileInheritanceSource(True); // <- Hier ist das Geheimnis vergraben!
        for i := 0 to oDacl.Count - 1 do begin
          aDElem       := oDacl.Items[i];
          cZeile       := aDElem.SID.AccountName[aDElem.SID.CachedSystemName] + ' ';
          if i < Length(aGeerbt) then begin
            aElem      := aGeerbt[i];
            if aElem.UserName = '' then begin
              cZeile   := cZeile + '<nicht geerbt>';
            end else begin
              cZeile   := cZeile + 'geerbt von ' + aElem.AncestorName;
            end; // if .UserName = ''
          end else begin
            cZeile     := cZeile + '<Kein passender Eintrag in Inheritance>';
          end; // if i < Length(aGeerbt)
          AddProtokoll(cZeile);
        end; // for i := 0 to
        oDacl.Free();
      end; // if oDacl <> nil
    except
      AddProtokoll('Konnte DACL nicht auslesen');
    end;
    oFD.Free;
  except
    AddProtokoll('Konnte SecurityDescriptor nicht auslesen');
  end;

end;
Zum Schluss steht in cZeile die gewünschten Informationen: welcher Benutzer hat von wo geerbt


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:48 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