Condividi tramite


Funzione FltGetSwappedBufferMdlAddress (fltkernel.h)

La routine FltGetSwappedBufferMdlAddress restituisce l'indirizzo MDL (Memory Descriptor List) per un buffer scambiato da un driver minifilter.

Sintassi

PMDL FltGetSwappedBufferMdlAddress(
  [in] PFLT_CALLBACK_DATA CallbackData
);

Parametri

[in] CallbackData

Puntatore alla struttura dei dati di callback per l'operazione.

Valore restituito

FltGetSwappedBufferMdlAddress restituisce l'indirizzo MDL per il buffer scambiato dal chiamante. fltGetSwappedBufferMdlAddress restituisce NULL nei casi seguenti:

  • L'operazione è un'operazione di I/O veloce. In un'operazione di I/O veloce, il buffer non può avere un MDL.
  • Il buffer in cui è stato scambiato dal chiamante non dispone di un MDL.
  • Il driver minifilter non ha scambiato i buffer nella routine di callback di preoperazione.

Osservazioni

Un driver minifilter che scambia in un nuovo buffer in una routine di callback di preoperazione può ottenere l'indirizzo MDL per il buffer chiamando FltGetSwappedBufferMdlAddress dalla routine di callback postoperation corrispondente.

La routine FltGetSwappedBufferMdlAddress è necessaria perché la routine di callback di postoperazione riceve una struttura di dati di callback che contiene il buffer originale e l'indirizzo MDL, non quelli che sono stati scambiati nella routine di callback di preoperazione del chiamante.

È possibile FltGetSwappedBufferMdlAddress restituire un valore NULL nonNULL MDL anche se il chiamante non ha creato un MDL per il buffer in cui è stato scambiato. Ciò si verifica quando un MDL viene creato per il buffer da un driver minifiltro, un driver di filtro legacy o un driver di file system che si trova sotto il chiamante nello stack di driver minifilter o del driver del file system.

È anche possibile FltGetSwappedBufferMdlAddress restituire un valore NULL nonNULL MDL anche se il chiamante non ha scambiato in un nuovo buffer nella routine di callback preoperazione. Ciò avviene nelle operazioni, ad esempio I/O di paging, in cui il buffer è NULLe il chiamante scambia in un nuovo indirizzo MDL.

Il linguaggio MDL per il buffer in cui è stato scambiato dal chiamante viene automaticamente liberato da Gestione filtri quando la routine di callback di sostituzione restituisce. Per evitare che questo MDL venga liberato, chiamare FltRetainSwappedBufferMdlAddress.

fltGetSwappedBufferMdlAddress può essere chiamato solo da una routine di callback di postoperazione.

Fabbisogno

Requisito Valore
piattaforma di destinazione Universale
intestazione fltkernel.h (include Fltkernel.h)
libreria FltMgr.lib
dll Fltmgr.sys
IRQL Qualsiasi livello

Vedere anche

FltDecodeParameters

FltRetainSwappedBufferMdlAddress