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;

Member

  • Common: Union-Komponente, die für alle Puffermethoden verwendet wird (Weder, Gepuffert und FastIo).

  • OutputBufferLength: Länge (in Bytes) des Puffers, auf den das Element Neither.OutputBuffer, Direct.OutputBuffer oder FastIo.OutputBuffer verweist.

  • InputBufferLength: Länge (in Bytes) des Puffers, auf den das Element Neither.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 unter Verwenden von E/A-Steuerungscodes und "Geräteeingabe- und Ausgabesteuerungscodes" in der Microsoft Windows SDK-Dokumentation. (Diese Ressource ist in einigen Sprachen und Ländern möglicherweise nicht verfügbar.)

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

  • Neither.InputBuffer: Virtuelle Benutzermodusadresse des Eingabepuffers, den der ursprüngliche Anforderer des vorgangs angegeben hat. Diese Adressen werden vom E/A-Manager und vom Filter-Manager nicht überprüft. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden und alle Pufferverweise in try/except-Blöcken einschließen. Weitere Informationen finden Sie unter Verwenden von weder gepufferten noch direkten E/A-Vorgängen und Fehlern beim Verweisen auf User-Space Adressen.

  • Weder.OutputBuffer: Virtuelle Benutzermodusadresse des Ausgabepuffers, den der ursprüngliche Anforderer des Vorgangs angegeben hat. Diese Adressen werden vom E/A-Manager und vom Filter-Manager nicht überprüft. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden und alle Pufferverweise in try/except-Blöcken einschließen. Weitere Informationen finden Sie unter Verwenden von weder gepufferten noch direkten E/A-Vorgängen und Fehlern beim Verweisen auf User-Space Adressen im Kernelmodusarchitekturhandbuch.

  • Neither.OutputMdlAddress: Adresse einer Speicherdeskriptorliste (MDL), die den Puffer beschreibt, auf den das Neither.OutputBuffer-Element verweist. Dieser Member ist optional und kann NULL sein.

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

  • 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-Steuerungscodes.

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

  • Direct.OutputBuffer: Virtuelle Adresse des Ausgabepuffers im Benutzermodus, den der ursprüngliche Anforderer des vorgangs angegeben hat. Bei direkter E/A sperrt das Betriebssystem im Gegensatz zu METHOD_NEITHER E/A diesen Puffer so, dass der Zugriff aus dem 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 MDL -Speicherbeschreibungsliste (Memory Descriptor List) abzurufen, auf die das OutputMdlAddress-Mitglied verweist.) Weitere Informationen finden Sie unter Using Direct E/O and Errors in Direct E/O .

  • Direct.OutputMdlAddress: Adresse einer MDL, die den Puffer beschreibt, auf den das Direct.OutputBuffer-Element verweist. Dieser Member ist erforderlich und darf nicht NULL sein.

  • 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 Adresse des Eingabepuffers im Benutzermodus, den der ursprüngliche Anforderer des vorgangs angegeben hat. Diese Adressen werden vom E/A-Manager und vom Filter-Manager nicht überprüft. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden und alle Pufferverweise in try/except-Blöcken einschließen. Weitere Informationen finden Sie unter Fehler beim Verweisen auf User-Space Adressen.

  • FastIo.OutputBuffer: Virtuelle Benutzermodusadresse des Ausgabepuffers, den der ursprüngliche Anforderer des vorgangs angegeben hat. Diese Adressen werden vom E/A-Manager und vom Filter-Manager nicht überprüft. Um sicherzustellen, dass Benutzerraumadressen gültig sind, muss der Minifilter Routinen wie ProbeForRead, ProbeForWrite und FltLockUserBuffer verwenden und alle Pufferverweise in try/except-Blöcken einschließen. Weitere Informationen finden Sie unter Fehler beim Verweisen auf User-Space Adressen.

Hinweise

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-Steuerungsinformationsvorgang, 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
Header Fltkernel.h (einschließlich Fltkernel.h)

Weitere Informationen

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