Ich antworte mal mir selber
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