Freigeben über


FltDecodeParameters-Funktion (fltkernel.h)

FltDecodeParameters Zeiger auf die Speicherdeskriptorliste (MDL)-Adresse, Pufferzeiger, Pufferlänge und gewünschte Zugriffsparameter für einen E/A-Vorgang zurück. Dadurch werden Minifiltertreiber daran gehindert, eine Switch-Anweisung zu haben, um die Position dieser Parameter in Hilfsroutinen zu finden, 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 die MdlAddress (oder OutputMdlAddress) des Callbackdatenparameters (FLT_PARAMETERS) -Struktur empfängt (beachten Sie, dass dieses Element selbst ein Zeiger ist). Dieser Parameter ist optional und kann NULL-werden. Wenn der E/A-Vorgang kein MDL-Feld enthält, empfängt dieser Parameter NULL-.

[out] Buffer

Zeiger auf eine vom Aufrufer bereitgestellte Variable, die einen Zeiger auf das entsprechende Pufferelement (abhängig vom Hauptfunktionscode) in der Struktur des Rückrufdatenparameters empfängt (beachten Sie, dass dieses Element selbst ein Zeiger ist).

[out] Length

Zeiger auf eine vom Aufrufer bereitgestellte Variable, die einen Zeiger auf das Pufferlängenelement in der Struktur des Rückrufdatenparameters 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 Typ des Zugriffs empfängt, der für diesen Typ von E/A-Vorgängen geeignet ist, einer von IoReadAccess, IoWriteAccessoder IoModifyAccess. IoReadAccess- bedeutet, dass der Minifiltertreiber den Inhalt des Puffers untersuchen kann, aber den Inhalt nicht ändern kann. IoWriteAccess und IoModifyAccess, was gleichwertig ist, bedeutet dies, dass der Minifiltertreiber Lese- und Schreibzugriff auf den Puffer hat.

Rückgabewert

FltDecodeParameters gibt STATUS_SUCCESS oder einen geeigneten NTSTATUS-Wert wie den folgenden zurück:

Rückgabecode Beschreibung
STATUS_INVALID_PARAMETER Die Rückrufdatenstruktur (FLT_CALLBACK_DATA) stellt einen E/A-Vorgang dar, der keine Pufferparameter enthält. Dies ist ein Fehlercode.

Bemerkungen

FltDecodeParameters 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 (File System Filter) nicht sinnvoll, da diese Vorgänge keine Pufferparameter haben.

Je nach verwendeter Puffermethode können IOCTL- und FSCTL-Vorgänge einen oder zwei Puffer aufweisen. In Fällen, in denen der Vorgang zwei Puffer (und zwei Längenfelder) aufweist, gibt FltDecodeParameters die OutputBuffer-, OutputBufferLength-und/oder OutputMdlAddress Felder entsprechend zurück.

Nicht alle vier Parameter werden für jeden E/A-Vorgang zurückgegeben. Bei einer IRP_MJ_READ Anforderung FltDecodeParameters die Ausgabeparameter wie folgt festlegen.

Parameter Wert
MdlAddressPointer- &(CallbackData->Iopb->Parameters.Read.MdlAddress)
Puffer- &(CallbackData->Iopb->Parameters.Read.ReadBuffer)
Länge &(CallbackData->Iopb->Parameters.Read.Length)
DesiredAccess- IoWriteAccess

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- fltkernel.h (include Fltkernel.h)
Library FltMgr.lib
IRQL- Beliebige Ebene

Siehe auch

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer