FltGetSwappedBufferMdlAddress 例程會針對小型篩選驅動程式交換的緩衝區傳回記憶體描述項清單 (MDL) 位址。
語法
PMDL FltGetSwappedBufferMdlAddress(
[in] PFLT_CALLBACK_DATA CallbackData
);
參數
[in] CallbackData
作業之回呼數據結構的指標。
傳回值
FltGetSwappedBufferMdlAddress 傳回呼叫端交換之緩衝區的 MDL 位址。 FltGetSwappedBufferMdlAddress 會在下列情況下傳回 NULL :
- 作業是快速的 I/O 作業。 在快速 I/O 作業中,緩衝區不能有 MDL。
- 呼叫端交換的緩衝區沒有 MDL。
- 迷你篩選驅動程式未在預先作回呼例程中交換緩衝區。
言論
在預先作回呼例程的新緩衝區中交換的迷你篩選驅動程式,可以從對應的後續作回呼例程呼叫 FltGetSwappedBufferMdlAddress,以取得緩衝區的 MDL 位址。
FltGetSwappedBufferMdlAddress 例程是必要的,因為後續作回呼例程會收到包含原始緩衝區和 MDL 位址的回呼數據結構,而不是呼叫端預先作回呼例程所交換的回呼數據結構。
FltGetSwappedBufferMdlAddress 傳回非NULL MDL 值,即使呼叫端未為其交換的緩衝區建立 MDL 也一樣。 當小型篩選驅動程式、舊版篩選驅動程式或文件系統驅動程式在小型篩選驅動程式或文件系統驅動程式堆疊中的呼叫端下方建立 MDL 時,就會發生這種情況。
FltGetSwappedBufferMdlAddress 即使呼叫端在其預先作回呼例程中未在新的緩衝區中交換,還是可以傳回非NULL MDL 值。 這發生在作業中,例如分頁 I/O,其中緩衝區 NULL,而呼叫端會在新的 MDL 位址中交換。
呼叫端所交換之緩衝區的 MDL 會在傳回後作回呼例程傳回時,由篩選管理員自動釋放。 若要防止釋放此 MDL,請呼叫 FltRetainSwappedBufferMdlAddress。
FltGetSwappedBufferMdlAddress 只能從後續作回呼例程呼叫。
要求
要求 | 價值 |
---|---|
目標平臺 | 普遍 |
標頭 | fltkernel.h (包括 Fltkernel.h) |
連結庫 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | 任何層級 |