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 |