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 TJwDiscretionaryAccessControlEntry
Deny (statt TJwDiscretionaryAccessControlEntry
Allow), 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.