FltDecodeParameters-Funktion (fltkernel.h)
FltDecodeParameters gibt Zeiger auf die MDL-Adresse (Memory Descriptor List), den Pufferzeiger, die Pufferlänge und die gewünschten Zugriffsparameter für einen E/A-Vorgang zurück. Dies erspart Minifiltertreibern eine Switch-Anweisung, um die Position dieser Parameter in Hilfsroutinen zu ermitteln, die auf die MDL-Adresse, den Pufferzeiger, die Pufferlänge und den gewünschten Zugriff für mehrere Vorgangstypen zugreifen.
Syntax
NTSTATUS FLTAPI FltDecodeParameters(
[in] PFLT_CALLBACK_DATA CallbackData,
[out] PMDL **MdlAddressPointer,
[out] PVOID **Buffer,
[out] PULONG *Length,
[out, optional] LOCK_OPERATION *DesiredAccess
);
Parameter
[in] CallbackData
Zeiger auf die Rückrufdatenstruktur (FLT_CALLBACK_DATA) für den E/A-Vorgang.
[out] MdlAddressPointer
Zeiger auf eine vom Aufrufer bereitgestellte Variable, die einen Zeiger auf das Element MdlAddress (oder OutputMdlAddress) der Rückrufdatenparameterstruktur (FLT_PARAMETERS) empfängt (beachten Sie, dass dieses Element selbst ein Zeiger ist). Dieser Parameter ist optional und kann NULL sein. Wenn der E/A-Vorgang kein MDL-Feld aufweist, empfängt dieser Parameter NULL.
[out] Buffer
Zeiger auf eine vom Aufrufer bereitgestellte Variable, die einen Zeiger auf den entsprechenden Puffermember (abhängig vom Hauptfunktionscode) in der Rückrufdatenparameterstruktur empfängt (beachten Sie, dass dieses Element selbst ein Zeiger ist).
[out] Length
Zeiger auf eine vom Aufrufer bereitgestellte Variable, die einen Zeiger auf den Pufferlängenmember in der Rückrufdatenparameterstruktur empfängt. Wenn der Vorgang kein Längenfeld aufweist, empfängt dieser Parameter NULL.
[out, optional] DesiredAccess
Zeiger auf eine vom Aufrufer bereitgestellte Variable, die den Zugriffstyp empfängt, der für diesen Typ von E/A-Vorgängen geeignet ist, eine von IoReadAccess, IoWriteAccess oder IoModifyAccess. IoReadAccess bedeutet, dass der Minifiltertreiber den Inhalt des Puffers untersuchen, den Inhalt jedoch nicht ändern kann. IoWriteAccess und IoModifyAccess, die gleichwertig sind, bedeuten, dass der Minifiltertreiber Lese- und Schreibzugriff auf den Puffer hat.
Rückgabewert
FltDecodeParameters gibt STATUS_SUCCESS oder einen entsprechenden NTSTATUS-Wert wie den folgenden zurück:
Rückgabecode | Beschreibung |
---|---|
STATUS_INVALID_PARAMETER | Die Rückrufdatenstruktur (FLT_CALLBACK_DATA) stellt einen E/A-Vorgang ohne Pufferparameter dar. Dies ist ein Fehlercode. |
Hinweise
FltDecodeParameters gibt Zeiger auf die Parameter für einen E/A-Vorgang und nicht auf die Parameterwerte zurück, sodass der Aufrufer die Werte der Parameter bei Bedarf ändern kann.
FltDecodeParameters können sowohl für schnelle E/A-Vorgänge als auch für IRP-basierte Vorgänge verwendet werden. Dies ist für FSFilter-Rückrufvorgänge (Dateisystemfilter) nicht sinnvoll, da diese Vorgänge keine Pufferparameter aufweisen.
IOCTL- und FSCTL-Vorgänge können je nach verwendeter Puffermethode einen oder zwei Puffer aufweisen. In Fällen, in denen der Vorgang über zwei Puffer (und zwei Längenfelder) verfügt, gibt FltDecodeParameters die Felder OutputBuffer, OutputBufferLength und/oder OutputMdlAddress nach Bedarf zurück.
Nicht alle der vier Parameter werden für jeden E/A-Vorgang zurückgegeben. Für eine IRP_MJ_READ-Anforderung legt Beispielsweise FltDecodeParameters die Ausgabeparameter wie folgt fest.
Parameter | Wert |
---|---|
MdlAddressPointer | &(CallbackData-Iopb-Parameters.Read.MdlAddress>>) |
Buffer | &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>) |
Länge | &(CallbackData-Iopb-Parameters.Read.Length>>) |
DesiredAccess | IoWriteAccess |
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform | Universell |
Header | fltkernel.h (include Fltkernel.h) |
Bibliothek | FltMgr.lib |
IRQL | Beliebige Ebene |