Freigeben über


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

Weitere Informationen

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer