Gewusst wie: freigeben von Speicher zwischen services und Benutzer-Prozesse?

Habe ich eine Reihe von Win32-Anwendungen, die Freigabe von Informationen über ein shared-memory-segment angelegt mit CreateFileMapping() und MapViewOfFile(). Eine der Anwendungen ist ein system-Dienst, der Rest sind gestartet, durch den angemeldeten Benutzer. Unter Windows XP war es kein problem. Wir nannten unsere Segmente "Global\" Etwas und alles war gut.

Zusätzliche Sicherheit in Vista (und vermutlich Windows 7) wird angezeigt, um zu verhindern, dass diese Architektur von der Arbeit. Normale Benutzer, die nicht erlaubt sind zu erstellen (Win32-Fehler 5) - Objekte im globalen namespace. Die MSDN gibt an, dass wenn der account "erstellen globaler" Privileg dann sollte alles gut sein, aber dies scheint nicht der Fall zu sein in der Praxis.
Auch, Vista ist "Integrität" Funktionen angezeigt, um zu verhindern, dass die "niedrige Integrität" Benutzer-Prozesse den Zugriff auf die "hohe Integrität" service-erstellt shared-memory-Objekt. Es sieht aus wie ich sollte in der Lage sein, dies zu beheben, über die einige Magische SetSecurityDescriptorSacl() Beschwörungsformel, aber ich habe Schwierigkeiten, sprechen zu lernen sacl.

Also die Frage ist: Was ist die richtige Art und Weise der Verwendung eines shared memory-segment, die zwischen Diensten und normalen Benutzer-Prozesse?

Trennen die einfache Antwort von "einfach abschalten UAC" wir sind in einer ziemlich gesperrte Umgebung verfügt, und das ist nicht eine Möglichkeit.

Edit: den Dienst und den Benutzer müssen lese - /Schreibzugriff auf das segment.

InformationsquelleAutor Clay | 2009-05-22
Schreibe einen Kommentar