Freigeben über


Unterstützung von 32-Bit-E/A in Ihrem 64-Bit-Treiber

Windows unter Windows (WOW64) ermöglicht die Ausführung von Microsoft Win32-Benutzermodusanwendungen unter 64-Bit-Windows. Hierzu werden Win32-Funktionsaufrufe abgefangen und Parameter von 32-Bit-Zeigertypen nach Bedarf in 64-Bit-Zeigertypen konvertiert, bevor der Übergang zum 64-Bit-Kernel erfolgt. Diese Konvertierung, die als Thunking bezeichnet wird, erfolgt automatisch für alle Win32-Funktionen, mit einer wichtigen Ausnahme: die an DeviceIoControl übergebenen Datenpuffer. Der Inhalt dieser Puffer, auf die von den Parametern InputBuffer und OutputBuffer verwiesen wird, wird nicht thunked, da ihre Struktur treiberspezifisch ist.

Hinweis Obwohl der Pufferinhalt nicht durch thunked wird, werden die Pufferzeiger in 64-Bit-Zeiger konvertiert.

Benutzermodusanwendungen rufen DeviceIoControl auf, um eine E/A-Anforderung direkt an einen angegebenen Kernelmodustreiber zu senden. Diese Anforderung enthält einen E/A-Steuerungscode (IOCTL) oder einen Dateisystemsteuerungscode (FSCTL) und Zeiger auf Eingabe- und Ausgabedatenpuffer. Das Format dieser Datenpuffer ist spezifisch für die IOCTL oder FSCTL, die wiederum vom Kernelmodustreiber definiert wird. Da das Pufferformat willkürlich ist und dem Treiber und nicht WOW64 bekannt ist, bleibt die Aufgabe des Thunkings der Daten dem Treiber überlassen.

Ihr 64-Bit-Treiber muss 32-Bit-E/A unterstützen, wenn alle folgenden Punkte zutrifft:

  • Der Treiber macht eine IOCTL (oder FSCTL) für Benutzermodusanwendungen verfügbar.

  • Mindestens einer der von der IOCTL verwendeten E/A-Puffer enthält Datentypen mit Zeigergenauigkeit.

  • Ihr IOCTL-Code kann nicht einfach umgeschrieben werden, um die Verwendung von Puffertypen mit Zeigergenauigkeit zu vermeiden.