Einzelnen Beitrag anzeigen

Benutzerbild von cherry
cherry

Registriert seit: 14. Nov 2005
561 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Ordner mit Berechtigungen erstellen inkl. Vererben...(JWSCL)

  Alt 23. Mär 2010, 12:47
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
Ist das nur mein Gefühl, oder ist die ganze Welt verrückt geworden!?
  Mit Zitat antworten Zitat