Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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) |