Shared Memory zwischen Benutzermodus und Kernel-Modus

8

Ich schreibe einen Kernel-Code für Windows7, um auf den gemeinsam genutzten Speicher zuzugreifen, der im Benutzermodus erstellt wurde, wie es hier .
Der Shared Memory wird im Benutzerbereich mit folgendem Namen erstellt:

%Vor%

Das Öffnen des Shared Memory im Userspace funktioniert.
Öffnen des gleichen gemeinsam genutzten Speichers im Kernel-Modus Aufruf von ZwOpenSection schlägt fehl:

%Vor%

Der Kernel-Code lautet:

%Vor%

Ich habe mehrere Namen versucht ( L"\MySharedMem" oder L"MySharedMem" ), aber ich habe andere Fehler als STATUS_OBJECT_PATH_INVALID oder STATUS_OBJECT_PATH_NOT_FOUND bekommen. Das Erstellen des gemeinsamen Speichers als "Global\MySharedMem" funktioniert nicht.
< br> Was mache ich falsch?

Ich habe versucht, den gemeinsamen Speicher im Kernel-Modus zu erstellen, ich bekomme Erfolg auf ZwCreateSection und ZwMapViewOfSection , aber ich bekomme Zugriffsverletzung, wenn ich auf den Zeiger pSharedData_ zugreifen, um den Puffer zu testen:

%Vor%

Alles scheitert ...

    
Stefano Piovesan 15.09.2015, 21:25
quelle

1 Antwort

4

Betreffend CreateFileMapping :

  

Zum Erstellen eines Dateizuordnungsobjekts im globalen Namespace aus einer anderen Sitzung als Sitzung Null ist die Berechtigung SeCreateGlobalPrivilege erforderlich.

Von KB191840 :

  

[T] Das Objekt wird immer im Benutzeradressraum (unter 0x80000000) eines Prozesses abgebildet (unabhängig davon, ob das Objekt im Kernelmodus oder im Benutzermodus erstellt wird), die Adresse ist nur gültig, wenn auf sie im Kontext zugegriffen wird des Prozesses.

Die KB fährt fort:

  

Diese Methode wird nicht empfohlen und wird am wenigsten von Low-Level-Gerätetreibern verwendet, da, wie bereits erläutert, der Gültigkeitsbereich der Adresse auf den Prozess beschränkt ist, in dem das Objekt zugeordnet ist Auf einen DPC oder ISR kann nicht zugegriffen werden. [Betonung meiner]

Die Lösung ist entweder:

  1. Erstellen Sie die Dateizuordnung im Kernelmodus. (Vorgeschlagen von dem KB-Artikel.)
  2. Verwenden Sie IOCTL
theB 15.09.2015 22:49
quelle