FltGetSwappedBufferMdlAddress-Funktion (fltkernel.h)

Die FltGetSwappedBufferMdlAddress-Routine gibt die MDL-Adresse (Memory Descriptor List) für einen Puffer zurück, der von einem Minifiltertreiber getauscht wurde.

Syntax

PMDL FltGetSwappedBufferMdlAddress(
  [in] PFLT_CALLBACK_DATA CallbackData
);

Parameter

[in] CallbackData

Zeiger auf die Rückrufdatenstruktur für den Vorgang.

Rückgabewert

FltGetSwappedBufferMdlAddress gibt die MDL-Adresse für den Puffer zurück, der vom Aufrufer eingetauscht wurde. FltGetSwappedBufferMdlAddress gibt in den folgenden Fällen NULL zurück:

  • Der Vorgang ist ein schneller E/A-Vorgang. Bei einem schnellen E/A-Vorgang kann der Puffer keine MDL haben.
  • Der Puffer, der vom Aufrufer eingetauscht wurde, verfügt nicht über eine MDL.
  • Der Minifiltertreiber hat in der Rückrufroutine vor der Operation keine Puffer ausgetauscht.

Hinweise

Ein Minifiltertreiber, der in einem neuen Puffer in einer Preoperation-Rückrufroutine wechselt, kann die MDL-Adresse für den Puffer abrufen, indem FltGetSwappedBufferMdlAddress aus der entsprechenden Rückrufroutine nach der Operation aufgerufen wird.

Die FltGetSwappedBufferMdlAddress-Routine ist erforderlich, da die Rückrufroutine nach der Operation eine Rückrufdatenstruktur empfängt, die den ursprünglichen Puffer und die MDL-Adresse enthält, nicht die, die von der Rückrufroutine vor der Operation des Aufrufers eingetauscht wurden.

Es ist möglich, dass FltGetSwappedBufferMdlAddress einen MDL-Wert ungleich NULL zurückgibt, auch wenn der Aufrufer keine MDL für den Puffer erstellt hat, in den er eingetauscht wurde. Dies geschieht, wenn eine MDL für den Puffer von einem Minifiltertreiber, Legacyfiltertreiber oder Dateisystemtreiber erstellt wird, der sich unterhalb des Aufrufers im Minifiltertreiber oder Dateisystemtreiberstapel befindet.

Es ist auch möglich, dass FltGetSwappedBufferMdlAddress einen MDL-Wert ungleich NULL zurückgibt, auch wenn der Aufrufer in seiner Rückrufroutine vor der Operation keinen neuen Puffer ausgetauscht hat. Dies geschieht bei Vorgängen, z. B. Paging-E/A, bei denen der Puffer NULL ist und der Aufrufer eine neue MDL-Adresse eintauscht.

Die MDL für den Puffer, der vom Aufrufer eingetauscht wurde, wird automatisch vom Filter-Manager freigegeben, wenn die Rückrufroutine nach der Operation zurückgegeben wird. Um zu verhindern, dass diese MDL freigegeben wird, rufen Sie FltRetainSwappedBufferMdlAddress auf.

FltGetSwappedBufferMdlAddress kann nur über eine Postoperation-Rückrufroutine aufgerufen werden.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header fltkernel.h (fltkernel.h einschließen)
Bibliothek FltMgr.lib
DLL Fltmgr.sys
IRQL Beliebige Ebene

Weitere Informationen

FltDecodeParameters

FltRetainSwappedBufferMdlAddress