Freigeben über


FLT_PARAMETERS für IRP_MJ_DEVICE_CONTROL und IRP_MJ_INTERNAL_DEVICE_CONTROL Union

Union-Komponente, die verwendet wird, wenn das Feld "MajorFunction " der FLT_IO_PARAMETER_BLOCK Struktur für den Vorgang IRP_MJ_DEVICE_CONTROL oder IRP_MJ_INTERNAL_DEVICE_CONTROL ist.

Syntax

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
    } Common;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   InputBuffer;
      PVOID                   OutputBuffer;
    } FastIo;
  } DeviceIoControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

Elemente

  • Allgemein: Union-Komponente, die für alle Puffermethoden verwendet wird (Keine, Pufferung und FastIo).

  • OutputBufferLength: Länge des Puffers, auf den der Member "Weder.OutputBuffer", " Direct.OutputBuffer" oder "FastIo.OutputBuffer " verweist.

  • InputBufferLength: Länge des Puffers in Bytes, auf den der Member "Weder.InputBuffer", "Buffered.SystemBuffer", " Direct.InputSystemBuffer" oder " FastIo.InputBuffer " verweist.

  • IoControlCode: IOCTL-Funktionscode, der an den Gerätetreiber für das Zielgerät übergeben werden soll. Ausführliche Informationen zu IOCTL-Anforderungen finden Sie in der Microsoft Windows SDK-Dokumentation unter Verwendung von I/O-Kontrollcodes und "Geräteeingabe- und Ausgabesteuerungscodes". (Diese Ressource ist in einigen Sprachen und Ländern möglicherweise nicht verfügbar.)

  • Weder: Union-Komponente, die beim METHOD_NEITHER der Puffermethode verwendet wird. Weitere Informationen zu Puffermethoden finden Sie unter Definieren von E/A-Steuerungscodes im Kernelmodusarchitekturhandbuch.

  • Keine.InputBuffer: Virtuelle Benutzermodusadresse des Eingabepuffers, den der ursprüngliche Anforderer des angegebenen Vorgangs bereitgestellt hat. Der E/A-Manager und der Filter-Manager überprüfen diese Adressen nicht. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden, wobei alle Pufferverweise in try/except blocks eingeschlossen werden. Weitere Informationen finden Sie unter "Verwenden weder gepufferter noch direkter E/A - und Fehler beim Verweisen auf User-Space Adressen".

  • Keine.OutputBuffer: Virtuelle Benutzermodusadresse des Ausgabepuffers, den der ursprüngliche Anforderer des bereitgestellten Vorgangs anforderte. Der E/A-Manager und der Filter-Manager überprüfen diese Adressen nicht. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden, wobei alle Pufferverweise in try/except blocks eingeschlossen werden. Weitere Informationen finden Sie unter Verwenden weder gepufferter noch direkter E/A - und Fehler beim Verweisen auf User-Space Adressen im Kernelmodus-Architekturhandbuch.

  • Weder.OutputMdlAddress: Address of a memory descriptor list (MDL) that describes the buffer that the Neither.OutputBuffer member points to. Dieses Element ist optional und kann NULL-sein.

  • Gepuffert: Union-Komponente, die verwendet wird, wenn die Puffermethode METHOD_BUFFERED ist. Weitere Informationen zu Puffermethoden finden Sie unter Definieren von E/A-Steuerelementcodes.

  • Buffered.SystemBuffer: Adresse des vom System zugewiesenen Puffers für den Vorgang. In METHOD_BUFFERED E/A wird dieser Puffer sowohl für die Eingabe als auch für die Ausgabe verwendet. Weitere Informationen finden Sie unter Methoden für den Zugriff auf Datenpuffer.

  • Direkt: Union-Komponente, die verwendet wird, wenn die Puffermethode METHOD_IN_DIRECT oder METHOD_OUT_DIRECT ist. Weitere Informationen zu Puffermethoden finden Sie unter Definieren von E/A-Steuerelementcodes.

  • Direct.InputSystemBuffer: Adresse des Eingabepuffers für den Vorgang. Dieser Puffer ist vom Betriebssystem gesperrt, sodass der Zugriff über den Kernelmodus sicher ist. Weitere Informationen finden Sie unter Methoden für den Zugriff auf Datenpuffer.

  • Direct.OutputBuffer: Virtuelle Benutzermodusadresse des Ausgabepuffers, den der ursprüngliche Anforderer des bereitgestellten Vorgangs anforderte. Im Gegensatz zu METHOD_NEITHER E/A sperrt das Betriebssystem diesen Puffer, sodass der Zugriff vom Kernelmodus sicher ist, solange sich der Minifilter im gleichen Prozesskontext wie der ursprüngliche Anforderer des E/A-Vorgangs befindet. (Andernfalls muss mmGetSystemAddressForMdlSafe aufgerufen werden, um die Systemadresse aus der Speicherbeschreibungsliste (MDL) abzurufen, auf die der OutputMdlAddress-Member verweist.) Weitere Informationen finden Sie unter Verwenden von Direct I/O und Fehlern in Direct I/O.

  • Direct.OutputMdlAddress: Adresse einer MDL, die den Puffer beschreibt, auf den das Direct.OutputBuffer-Element verweist. Dieses Element ist erforderlich und kann nicht NULL-werden.

  • FastIo: Union-Komponente, die verwendet wird, wenn die FLT_CALLBACK_DATA-Struktur einen schnellen E/A-IRP_MJ_DEVICE_CONTROL-Vorgang darstellt.

  • FastIo.InputBuffer: Virtuelle Benutzermodusadresse des Eingabepuffers, den der ursprüngliche Anforderer des bereitgestellten Vorgangs anforderte. Der E/A-Manager und der Filter-Manager überprüfen diese Adressen nicht. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden, wobei alle Pufferverweise in try/except blocks eingeschlossen werden. Weitere Informationen finden Sie unter Fehler beim Verweisen auf Benutzerraumadressen.

  • FastIo.OutputBuffer: Virtuelle Benutzermodusadresse des Ausgabepuffers, den der ursprüngliche Anforderer des bereitgestellten Vorgangs anforderte. Der E/A-Manager und der Filter-Manager überprüfen diese Adressen nicht. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden, wobei alle Pufferverweise in try/except blocks eingeschlossen werden. Weitere Informationen finden Sie unter Fehler beim Verweisen auf Benutzerraumadressen.

Bemerkungen

Die FLT_PARAMETERS-Struktur für IRP_MJ_DEVICE_CONTROL - und IRP_MJ_INTERNAL_DEVICE_CONTROL-Vorgänge enthält die Parameter für einen IRP-basierten Geräte-I/O-Steuerungs-Informationsvorgang, der durch eine Rückrufdatenstruktur (FLT_CALLBACK_DATA) dargestellt wird. Sie ist in einer FLT_IO_PARAMETER_BLOCK Struktur enthalten.

IRP_MJ_DEVICE_CONTROL kann ein IRP-basierter Vorgang oder ein schneller E/A-Vorgang sein.

IRP_MJ_INTERNAL_DEVICE_CONTROL ist ein IRP-basierter E/A-Vorgang.

Anforderungen

Anforderungstyp Anforderung
Kopfzeile Fltkernel.h (include Fltkernel.h)

Siehe auch

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltDeviceIoControlFile

FltLockUserBuffer

IoBuildDeviceIoControlRequest

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead-

ProbeForWrite

ZwDeviceIoControlFile