Security Descriptors sind nicht mein Spezialgebiet (speziell die Vista-spezifischen Integrity Labels), aber ich versuche trotzdem, deine Fragen nach besten Wissen zu beantworten.
Zitat:
Auserdem verstehe ich nicht den Zusammenhang zwischen dem Security-Descriptor und dem Integrity-Level, das ich auf "niedrig" setzen möchte.
In einem Security Descriptor sind ALLE sicherheitsrelevanten Einstellungen verzeichnet, also u.A. der Besitzer, die Discretionary
Access Control List und eben auch das Integrity Label.
Vereinfacht könnte dein Code auf einem vor-Vista-System so aussehen:
Delphi-Quellcode:
var Attrs: PSecurityAttributes;
Desc: TJwSecurityDescriptor;
begin
Desc := TJwSecurityDescriptor.Create;
try
{Verleiht allen Benutzern alle Rechte - also auch Schreibrechte! Wenn du sie auf Lesezugriff beschränken willst, musst du die DACL bis auf einen Eintrag lehren, der allen Benutzern Lesezugriff verleiht.}
Desc.DACL :=
nil;
Attrs := Desc.Create_SA;
//API-Struktur erstellen
try
hMapping := CreateFileMapping(..., Attrs, ...);
finally
TJwSecurityDescriptor.Free_SA(Attrs);
end;
finally
Desc.Free;
end;
end;
Um zusätzlich das Integrity Label zu setzen, musst du die SACL ändern. Das geht über die Methode TJwSAccessControlList.SetMandatoryLabel.