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 eseguito lo scambio dal chiamante non dispone di un MDL.
  • Il driver minifilter non ha scambiato i buffer nella routine di callback di preoperazione.

Commenti

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 di postoperazione corrispondente.

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

È possibile che FltGetSwappedBufferMdlAddress restituisca un valore MDL non NULL 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 minifilter, un driver di filtro legacy o un driver di file system che si trova sotto il chiamante nello stack di driver del minifilter o del driver del file system.

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

Il linguaggio MDL per il buffer scambiato dal chiamante viene liberato automaticamente da Gestione filtri quando viene restituita la routine di callback di post-sostituzione. Per evitare che questo MDL venga liberato, chiama FltRetainSwappedBufferMdlAddress.

FltGetSwappedBufferMdlAddress può essere chiamato solo da una routine di callback postoperation.

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Intestazione fltkernel.h (include Fltkernel.h)
Libreria FltMgr.lib
DLL Fltmgr.sys
IRQL Qualsiasi livello

Vedi anche

FltDecodeParameters

FltRetainSwappedBufferMdlAddress