Frage

Ich wünsche implementieren IPC Shared Memory benannt sind.

Um dies zu tun, einer der Schritte wird immer einen Punkt zu einem Mapping Speicherobjekt , mit Create ().

Ich mache es genau so, wie MSDN-Website reccommends: http://msdn.microsoft.com/en-us/library/aa366551 (v = VS.85) aspx :

hFileMappingHandle = CreateFileMapping
    (
        INVALID_HANDLE_VALUE,      // use paging file
        NULL,                      // default security 
        PAGE_READWRITE,            // read/write access
        0,            // maximum object size (high-order DWORD) 
        256,            // maximum object size (low-order DWORD)  
        "Global\\MyFileMappingObject"          // name of mapping object
    ); 
DWORD dwError = GetLastError();

Allerdings kehrte der Griff ist immer 0x0 und der System Error Code zurückgekehrt ist: 0x5 (. Zugriff verweigert)

  • Nur Named Memory Sharing gewünschte (nicht File-Sharing).
  • Windows 7 x64 Bit-Betriebssystem
  • Administratoren Benutzerrechte verfügbar
  • entwickelten Anwendung: 64-Bit-Plug-In-Anwendung (. Dll)

Hat jemand die gleiche Erfahrung, und eine Möglichkeit, es zu beheben, bitte? Ich benutze MSDN-Website als meine Referenz, so dass ich nicht zu denken, da Problem im Code ist.

War es hilfreich?

Lösung

Sieht aus wie Sie haben nicht genug Privilegien.

Von MSDN:

Erstellen einer Dateizuordnungsobjekt in der globaler Namensraum von einer Sitzung anderen als Sitzung erfordert Null die SeCreateGlobalPrivilege Privileg. Zum Weitere Informationen finden Sie Kernel Object Namespaces.

...

Die Erstellung eines Dateizuordnungsobjekt im globalen Namespace, unter Verwendung von Create, von einer Sitzung außer Sitzung Null ist privilegierter Betrieb. Aus diesem Grund, eine Anwendung in einem beliebigen Laufe Remote Desktop Session Host (RD Session Host) Server-Sitzung müssen SeCreateGlobalPrivilege aktiviert in Um ein Datei-Zuordnungsobjekt zu erstellen erfolgreich im globalen Namespace. Das Privileg Prüfung wird auf die begrenzt Erstellung von Dateizuordnungsobjekte und gilt nicht für die Öffnung bestehender Einsen. Zum Beispiel, wenn ein Dienst oder die System erzeugt eine Objektdatei-mapping, jeder Prozess in jeder Sitzung kann laufen Zugriff dass Dateizuordnungsobjekt vorausgesetzt, dass der Benutzer die aufweist notwendige Zugang.

Andere Tipps

Administratoren, Dienste und Netzwerkdienste haben SeCreateGlobalPrivilege standardmäßig. Sie müssen jedoch daran erinnern, dass Windows7 / Vista nicht alles als Administrator ausgeführt werden. So verwenden Sie „Start als Administrator“ auf „Global \“ Arbeit für Ihre Anwendung. Wenn Sie das Debuggen, auch Visual Studio als Administrator starten.

Zum globalen Dateizuordnungen erstellen müssen Sie das SeCreateGlobalPrivilege Privileg - haben Sie das? Zugriff verweigert bedeutet dies, ist ein Berechtigungsproblem, sicher.

Der Verweis auf den Terminaldienste in der Dokumentation über die globale Namespace ist ein wenig irreführend, da es nur Sorgen darüber brauchen bedeutet, wenn Sie eine ungewöhnliche Situation.

In der Tat IIS und Systemdienste laufen in der Sitzung Null, und der erste / nur Benutzer 1 auf Läufe in Sitzung anmelden -., So dass Sie globalen Namensraum zu verwenden, haben zwischen IIS oder einem Dienst und einem normalen Programm zu kommunizieren

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top