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:
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;
Danke schon mal