Hallo.
Vielen Dank für deine Antwort. Leider blicke ich immer noch nicht durch. Die Dokumentation von Delphi hilft mir leider auch nicht weiter.
Ich habe bei deinem Code noch ein @ hinzufügen müssen. Ich bekomme jetzt aber noch einen Accessed-Fehler beim erstellen der MMF.
Muss das DACL überhaupt gesetzt werden, oder ist es nicht der Standard-Fall, dass alle Benutzer (=Prozesseigentümer?) Lesezugriff auf die MMF haben?
Und bezüglich des SACL: Ich hoffe, ich habe das Integrity-Label nun korrekt gesetzt. In den Examples wird nur das Auslesen erläutert. Und außerdem bin ich ein bisschen Verwirrt durch die Bezeichnung Mandatory-Label und Integrity-Label (sind das Symonyme?)...
Delphi-Quellcode:
Attrs: PSecurityAttributes;
Desc: TJwSecurityDescriptor;
ACE: TJwSystemMandatoryAccessControlEntry;
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;
// braucht man das?
ACE := TJwSystemMandatoryAccessControlEntry.Create(MandatoryLevelLow);
// oder MandatoryLevelUntrusted?
try
Desc.SACL.SetMandatoryLabel(ACE, cfPointAtInstance);
finally
ACE.Free;
end;
Attrs := Desc.Create_SA;
//API-Struktur erstellen
try
hMapping := CreateFileMapping(INVALID_HANDLE_VALUE, @Attrs, PAGE_READWRITE,
0, 4, MappingGUID);
finally
TJwSecurityDescriptor.Free_SA(Attrs);
end;
finally
Desc.Free;
end;
Gruß
blackdrake