![]() |
Re: Sicherheitseinstellungen von Dateien ändern
Hi Tpercon,
die Ergebnisse für DACL und SACL hat uns Christian aber schon geliefert. Gruß oki PS: Wo wollten wir eigentlich noch mal hin? |
Re: Sicherheitseinstellungen von Dateien ändern
Die Sicherheitseinstellungen für die gewählte Datei so anzeigen, wie sie z.B. im Explorer angezeigt werden (welcher User darf was...).
|
Re: Sicherheitseinstellungen von Dateien ändern
Moin Zusammen,
um SACL erhalten zu können, muss man das Privileg SE_SECURITY_NAME enabled haben, was bei mir unter W2K nicht standardmässig der Fall ist. Dazu werden dann GetCurrentProcess, OpenProcessToken, LookupPrivilegeValue und AdjustTokenPriviliges benötigt. |
Re: Sicherheitseinstellungen von Dateien ändern
Hi,
erstmal Dank an Cristian. Das hilft mächtig weiter. Mit GetCurrentProcess, OpenProcessToken und AdjustTokenPriviliges hab ich schon mal gearbeitet. Ich schau mal gleich meine Quellen durch wie ich das damals gemacht hab. Gruß oki |
Re: Sicherheitseinstellungen von Dateien ändern
Das wäre super!
|
Re: Sicherheitseinstellungen von Dateien ändern
@ Oki: Hast du vielleicht was gefunden?
Vorallem im Bezug auf
Schönen Tag noch |
Re: Sicherheitseinstellungen von Dateien ändern
Hi,
ich hab folgendes ausprobiert, was auch funzt. Ich weiß nur nicht wo uns das weiterhilft. Leider hab ich die Aufgabenstellung und deren Sinn immer noch nicht verstanden. Deshalb teste ich im Moment nur das aus was du fragst und arbeite nicht an einer zielorientierten Lösung.
Delphi-Quellcode:
Gruß oki
var
FiName : String; psd : PSECURITY_DESCRIPTOR; dwLen : DWORD; psdc : SECURITY_DESCRIPTOR_CONTROL; dwDummy : DWORD; lpbDaclPresent : Bool; lpbDaclDefaulted : Bool; pDacl : PACL; lpbSaclPresent : Bool; lpbSaclDefaulted : Bool; pSacl : PACL; begin Result := False; // if not OpenDialog1.Execute then exit; FiName := Edit1.Text + #0; // erforderliche Buffergrösse ermitteln dwLen := 0; psd := nil; GetFileSecurity(PChar(FiName),OWNER_SECURITY_INFORMATION,psd,0,dwLen); // Security Descriptor auslesen psd := AllocMem(dwLen); try if not GetFileSecurity(PChar(OpenDialog1.FileName),OWNER_SECURITY_INFORMATION,psd,dwLen,dwLen) then begin ShowMessage(SysErrorMessage(GetLastError)); exit; end; GetSecurityDescriptorControl(psd,psdc,dwDummy); Memo1.Lines.Clear; if (psdc and SE_DACL_AUTO_INHERITED) = SE_DACL_AUTO_INHERITED then Memo1.Lines.Add('SE_DACL_AUTO_INHERITED'); if (psdc and SE_DACL_DEFAULTED) = SE_DACL_DEFAULTED then Memo1.Lines.Add('SE_DACL_DEFAULTED'); if (psdc and SE_DACL_PRESENT) = SE_DACL_PRESENT then Memo1.Lines.Add('SE_DACL_PRESENT'); if (psdc and SE_DACL_PROTECTED) = SE_DACL_PROTECTED then Memo1.Lines.Add('SE_DACL_PROTECTED'); if (psdc and SE_GROUP_DEFAULTED) = SE_GROUP_DEFAULTED then Memo1.Lines.Add('SE_GROUP_DEFAULTED'); if (psdc and SE_OWNER_DEFAULTED) = SE_OWNER_DEFAULTED then Memo1.Lines.Add('SE_OWNER_DEFAULTED'); if (psdc and SE_SACL_AUTO_INHERITED) = SE_SACL_AUTO_INHERITED then Memo1.Lines.Add('SE_SACL_AUTO_INHERITED'); if (psdc and SE_SACL_DEFAULTED) = SE_SACL_DEFAULTED then Memo1.Lines.Add('SE_SACL_DEFAULTED'); if (psdc and SE_SACL_PRESENT) = SE_SACL_PRESENT then Memo1.Lines.Add('SE_SACL_PRESENT'); if (psdc and SE_SACL_PROTECTED) = SE_SACL_PROTECTED then Memo1.Lines.Add('SE_SACL_PROTECTED'); if (psdc and SE_SELF_RELATIVE) = SE_SELF_RELATIVE then Memo1.Lines.Add('SE_SELF_RELATIVE'); pDacl := nil; GetSecurityDescriptorDacl(psd, lpbDaclPresent, pDacl, lpbDaclDefaulted); IF lpbDaclPresent then begin Memo1.lines.add('DACL-ACL-Count: ' + inttostr(pDacl^.AceCount)); Memo1.lines.add('DACL-ACL-Size: ' + inttostr(pDacl^.AclSize)); end else begin Memo1.Lines.Add('security descriptor does not contain a discretionary ACL for DACL'); end; pSacl := nil; GetSecurityDescriptorSacl(psd, lpbSaclPresent, pSacl, lpbSaclDefaulted); IF lpbSaclPresent then begin Memo1.lines.add('SACL-ACL-Count: ' + inttostr(pSacl^.AceCount)); Memo1.lines.add('SACL-ACL-Size: ' + inttostr(pSacl^.AclSize)); end else begin Memo1.Lines.Add('security descriptor does not contain a discretionary ACL for SACL'); end; Result := True; finally FreeMem(psd,dwLen); end; |
Re: Sicherheitseinstellungen von Dateien ändern
Hm, ich bekomme bei jeder Datei security descriptor does not contain a discretionary ACL for DACL bzw. security descriptor does not contain a discretionary ACL for SACL? Das gleiche Problem hatte ich leider auch schon in einer Version von mir.
Man kann für jede Datei die Sicherheitseinstellungen im Explorer ändern. Dies möchte ich durch meine eigene Anwendung ermöglichen. Dafür möchte ich aber erstmal die Infos auslesen, um mich damit vertraut zu machen und alles genau zu verstehen. |
Re: Sicherheitseinstellungen von Dateien ändern
wir haben genau den Fall für
Zitat:
Ich verstehe das so, das im SECURITY_DESCRIPTOR_CONTROL das Flag SE_SACL_DEFAULTED gesetzt ist. Was immer uns das auch sagen soll. Übrigens hab ich immer noch nicht verstanden wo der Unterschied zwischen DACL und SACL besteht. Gruß oki PS: positiv ist auf jeden fall, dass die Methoden funzen. GetSecurityDescriptorGroup hab ich mir gespaart, weil genause. |
Re: Sicherheitseinstellungen von Dateien ändern
OK, soweit klar bzw. unklar.
Nur wir bekommen doch eigentlich ein SE_SELF_RELATIVE anstatt SE_SACL_DEFAULTED zurück?! Eine Frage zu dem GetSecurityDescriptorGroup und der SID. Wie arbeite ich mit derSID und LookUpAccountName / LookUpAccountSID? Als nächstes wäre also die Arbeit mit den Funktionen GetAce, GetLengthSid, GetAclInformation dran. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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 by Thomas Breitkreuz