Ich habe eine Reihe von Win32-Anwendungen, die Informationen mit einem gemeinsamen Speichersegment teilen, das mit CreateFileMapping()
und MapViewOfFile()
erstellt wurde. Eine der Anwendungen ist ein Systemdienst; Der Rest wird vom angemeldeten Benutzer gestartet. Unter Windows XP gab es kein Problem. Wir haben unsere Segmente "Global \ Something" genannt und alles war gut.Wie kann der Speicher zwischen Diensten und Benutzerprozessen gemeinsam genutzt werden?
Die zusätzliche Sicherheit in Vista (und vermutlich Windows 7) scheint zu verhindern, dass diese Architektur funktioniert. Normale Benutzer dürfen keine Objekte im globalen Namespace erstellen (Win32-Fehler 5). Der MSDN gibt an, dass, wenn das Konto über die Berechtigung "global erstellen" verfügt, alles gut sein sollte, aber dies scheint in der Praxis nicht der Fall zu sein. Außerdem scheinen die "Integritäts" -Funktionen von Vista zu verhindern, dass die Benutzerprozesse mit "geringer Integrität" auf das vom Dienst erstellte Shared Memory-Objekt mit "hoher Integrität" zugreifen. Es sieht so aus, als ob ich in der Lage wäre, das über eine magische SetSecurityDescriptorSacl()
Beschwörungsformel zu beheben, aber ich habe Schwierigkeiten beim Sprechenlernen.
Die Frage ist also: Was der Verwendung eines Shared-Memory-Segment zwischen Diensten und normalen Benutzerprozessen der richtige Weg ist?
Um die einfache Antwort "nur UAC abschalten" zu vermeiden, sind wir in einer ziemlich gesperrten Umgebung und das ist keine Möglichkeit.
Edit: Sowohl der Dienst als auch der Benutzerprozess benötigen Lese-/Schreibzugriff auf das Segment.
Leider müssen die normalen Benutzer auch Schreibzugriff haben – Clay
Aktualisierte Antwort. Sie müssen nur die Sicherheitsbeschreibung optimieren. – Michael
Gute Antwort - wir sind in einer seltsamen Sicherheitslage. Den Endbenutzern wird vertraut, dass sie mit dem System interagieren (daher können sie den Speicher ändern, der dem Dienst gehört), aber wir müssen ihren Zugriff beschränken (UAC muss eingeschaltet sein usw.). Willkommen zum Wahnsinn der Regierungsnetzwelt. – Clay