FltGetSwappedBufferMdlAddress-Funktion (fltkernel.h)
Die FltGetSwappedBufferMdlAddress Routine gibt die Speicherdeskriptorliste (MDL)-Adresse für einen Puffer zurück, der von einem Minifiltertreiber ausgetauscht wurde.
Syntax
PMDL FltGetSwappedBufferMdlAddress(
[in] PFLT_CALLBACK_DATA CallbackData
);
Parameter
[in] CallbackData
Zeigen Sie auf die Rückrufdatenstruktur für den Vorgang.
Rückgabewert
FltGetSwappedBufferMdlAddress die MDL-Adresse für den Puffer zurück, der vom Aufrufer ausgetauscht 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 nicht über eine MDL verfügen.
- Der puffer, der vom Aufrufer ausgetauscht wurde, verfügt nicht über eine MDL.
- Der Minifiltertreiber hat keine Puffer in der Voroperationsrückrufroutine ausgetauscht.
Bemerkungen
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 Postoperation-Rückrufroutine aufgerufen wird.
Die FltGetSwappedBufferMdlAddress Routine ist erforderlich, da die Postoperation-Rückrufroutine eine Rückrufdatenstruktur empfängt, die den ursprünglichen Puffer und die MDL-Adresse enthält, nicht die, die durch die Voroperationsrückrufroutine des Aufrufers ausgetauscht wurden.
Es ist möglich, dass FltGetSwappedBufferMdlAddress einen nicht-NULL-wert MDL-Wert zurückgeben, auch wenn der Aufrufer keine MDL für den Puffer erstellt hat, in dem er ausgetauscht wurde. Dies geschieht, wenn eine MDL für den Puffer durch einen Minifiltertreiber, einen Legacyfiltertreiber oder einen Dateisystemtreiber erstellt wird, der sich unterhalb des Aufrufers im Minifiltertreiber- oder Dateisystemtreiberstapel befindet.
Es ist auch möglich, dass FltGetSwappedBufferMdlAddress einen nicht-NULL- MDL-Wert zurückgeben, auch wenn der Aufrufer in seiner Voroperationsrückrufroutine keinen Swap in einem neuen Puffer durchgeführt hat. Dies geschieht in Vorgängen, z. B. Auslagerungs-E/A, wobei der Puffer NULL-ist und der Aufrufer in einer neuen MDL-Adresse wechselt.
Die MDL für den Puffer, der vom Aufrufer ausgetauscht wurde, wird automatisch vom Filter-Manager freigegeben, wenn die Postoperation-Rückrufroutine zurückgegeben wird. Um zu verhindern, dass diese MDL freigegeben wird, rufen Sie FltRetainSwappedBufferMdlAddressauf.
FltGetSwappedBufferMdlAddress kann nur aus einer Postoperation-Rückrufroutine aufgerufen werden.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Universal |
Header- | fltkernel.h (include Fltkernel.h) |
Library | FltMgr.lib |
DLL- | Fltmgr.sys |
IRQL- | Beliebige Ebene |