![]() |
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 |
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 |
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?
|
AW: DACL: inheritance-Flag, von wem geerbt?
Ich antworte mal mir selber :-D
Es geht mit der Jwscl relativ simple:
Delphi-Quellcode:
Zum Schluss steht in cZeile die gewünschten Informationen: welcher Benutzer hat von wo geerbt
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz