![]() |
Ordner mit Berechtigungen erstellen inkl. Vererben...(JWSCL)
Hi there
Ich möchte in der Lage sein, Ordner zu erstellen, auf die man Benutzer berechtigen kann... Das geht bereits mit nachfolgender Funktion. Ich habe aber leider festgestellt, dass die Berechtigungen nicht vom entaltenden Ordner an meinen neu erstellten vererbt werden. Wie mach ich das bloss?
Delphi-Quellcode:
Danke schon mal
procedure TForm1.CreateDir(DirectoryName: string; FileSetting: TFileSetting);
var SD : TJwSecurityDescriptor; UserSid : TJwSecurityId; SecAttrPtr : PSecurityAttributes; AccessMask: Cardinal; begin SD := TJwSecurityDescriptor.CreateDefaultByToken(); try UserSid := TJwSecurityId.Create(EdSystemName.Text, EdAccountName.Text); // Kombiniere Berechtigungen if FileSetting.Read then AccessMask := GENERIC_READ; if FileSetting.Write then AccessMask := AccessMask or GENERIC_WRITE; if FileSetting.Modify then AccessMask := GENERIC_READ or GENERIC_WRITE; if FileSetting.Execute then AccessMask := AccessMask or GENERIC_EXECUTE or GENERIC_READ; if FileSetting.FullAccess then AccessMask := GENERIC_ALL; // Berechtigungseintrag in Liste einfügen if AccessMask > 0 then SD.DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce,afContainerInheritAce], AccessMask, UserSid, false)); // Eventuell neuen Entrag mit anderen Vererbungen setzten "Ordnerinhalt auflisten" if (FileSetting.List) and (not FileSetting.FullAccess) then begin AccessMask := GENERIC_EXECUTE or GENERIC_READ; SD.DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afContainerInheritAce], AccessMask, UserSid, false)); end; SecAttrPtr := SD.Create_SA(); jwaWindows.CreateDirectory(PWideChar(DirectoryName), Pointer(SecAttrPtr)); except MessageDlg('Fehler beim erstellen des Ordners oder beim setzen der Berechtigung!', mtError, [mbOK], 0); end; SD.Free; end; |
Re: Ordner mit Berechtigungen erstellen inkl. Vererben...(JW
Habs selber rausgekriegt. Vielleicht gings auch einfacher.
Erstelle zuerst den Ordner und ändere dan die Berechtigungen...
Delphi-Quellcode:
CreateDirEx(DirectoryName: string; FileSetting: TFileSetting);
var UserToken : TJwSecurityToken; SD : TJwSecurityDescriptor; FileObject : TJwSecureFileObject; Owner : TJwSecurityId; DACL : TJwDAccessControlList; UserSid : TJwSecurityId; AccessMask: Cardinal; begin CreateDirectory(PWideChar(DirectoryName), nil); if not DirectoryExists(DirectoryName) then exit; JwInitWellKnownSIDs; UserToken := TJwSecurityToken.CreateTokenEffective(MAXIMUM_ALLOWED); Owner := UserToken.GetTokenOwner; try UserSid := TJwSecurityId.Create(EdSystemName.Text, EdAccountName.Text); except MessageDlg('Benutzer nicht gefunden.', mtError, [mbOK], 0); exit; end; try FileObject := TJwSecureFileObject.Create(DirectoryName); //Make me owner if we cant access DACL if not FileObject.AccessCheck(WRITE_DAC) then begin //try to become owner JwEnablePrivilege(SE_TAKE_OWNERSHIP_NAME, pst_Enable); FileObject.Owner := Owner; end; // combine attributes if FileSetting.Read then AccessMask := GENERIC_READ; if FileSetting.Write then AccessMask := AccessMask or GENERIC_WRITE; if FileSetting.Modify then AccessMask := GENERIC_READ or GENERIC_WRITE; if FileSetting.Execute then AccessMask := AccessMask or GENERIC_EXECUTE or GENERIC_READ; if FileSetting.FullAccess then AccessMask := GENERIC_ALL; DACL := FileObject.DACL; // Berechtigungseintrag in Liste einfügen if AccessMask > 0 then DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce,afContainerInheritAce], AccessMask, UserSid, false)); // Eventuell neuen Entrag mit anderen Vererbungen setzten "Ordnerinhalt auflisten" if (FileSetting.List) and (not FileSetting.FullAccess) then begin AccessMask := GENERIC_EXECUTE or GENERIC_READ; DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afContainerInheritAce], AccessMask, UserSid, false)); end; FileObject.SetDACL(DACL); except MessageDlg('Fehler beim Setzten der Berechtigungen', mtError, [mbOK], 0); end; FileObject.Free; Owner.Free; UserToken.Free; end; |
Re: Ordner mit Berechtigungen erstellen inkl. Vererben...(JW
Hallo Cherry,
bitte folgendes beachten: Zitat:
|
Re: Ordner mit Berechtigungen erstellen inkl. Vererben...(JW
Cherry liest du eigentlich auch Dokumentationen?
![]() ![]() @Alter Mann JWSCL stellt sicher, dass die Reihenfolge korrekt ist. Die Reihenfolge von gleichrangingen ACEs bleibt, so gut es geht, erhalten, um die Semantik nicht zu ändern. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 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