Einzelnen Beitrag anzeigen

grasshopper

Registriert seit: 3. Apr 2013
2 Beiträge
 
#1

Ordner-Rechte entziehen

  Alt 3. Apr 2013, 11:26
Hi!

Ich arbeite für meine Firma gerade an einem selbstgemachten Installer.

Dort habe ich mit der Jedi WSCL einem Ordner (und Unterordner und -Dateien) alle Rechte für "Jeden" gegeben.
Das sieht (als Test-Funktion) so aus:
Code:
procedure TfrmMain.Button1Click(Sender: TObject);
var
  UserToken : TJwSecurityToken;
  SD : TJwSecurityDescriptor;
  FileObject : TJwSecureFileObject;
  Owner : TJwSecurityId;
  DACL : TJwDAccessControlList;
begin
  if DirectoryExists('D:\test2') then
  begin
    JwInitWellKnownSIDs;
    UserToken := TJwSecurityToken.CreateTokenEffective(MAXIMUM_ALLOWED);
    Owner := UserToken.GetTokenOwner;
    try
      FileObject := TJwSecureFileObject.Create('D:\test2');

      DACL := FileObject.DACL;
      DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce, afContainerInheritAce], GENERIC_ALL, JwWorldSID, false));
      FileObject.SetDACL(DACL);
    finally
      FileObject.Free;
      Owner.Free;
      UserToken.Free;
    end;
  end;
end;
Jedoch besteht bei mir die Befürchtung, dass die Rechte der anderen Benutzer einen höheren Stellenwert haben, und so zum Beispiel ein anderer Nutzer trotzdem nicht schreibend darauf zugreifen kann.

Deswegen sollen jetzt alle Rechte für alle anderen Benutzer weg.
Allerdings scheitert es bei mir schon beim Entziehen der Rechte.

Ich habe versucht, beim Erstellen des DACL's die AccessMask durch eine leere zu erstzen, also statt:
Code:
DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce, afContainerInheritAce], [B]GENERIC_ALL[/B], JwWorldSID, false));
dann das hier:
Code:
DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce, afContainerInheritAce], [B]$00000000[/B], JwWorldSID, false));
Aber das funktioniert nicht.

In der JWSCL habe ich nichts gefunden.
Nur die Klasse TJwDiscretionaryAccessControlEntryDeny (statt TJwDiscretionaryAccessControlEntryAllow), allerdings verweigert das dann die Rechte, anstatt sie nur zu entziehen.


Kann mir jemand helfen?
Danke!

PS: Über die Sinnhaftigkeit vom Geben aller Rechte brauchen wir nicht zu diskutieren. Ist vielleicht nicht die Beste Möglichkeit, aber in unserem Anwendungsfall zumindest akzeptabel.
  Mit Zitat antworten Zitat