FltGetSwappedBufferMdlAddress 函式 (fltkernel.h)
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 位址的回呼數據結構,而不是呼叫端預先操作回呼例程所交換的回呼數據結構。
即使呼叫端未針對交換的緩衝區建立 MDL,FltGetSwappedBufferMdlAddress 還是可以傳回非 NULL MDL 值。 當小型篩選驅動程式、舊版篩選驅動程式或文件系統驅動程序低於minifilter驅動程式或文件系統驅動程式堆疊中的呼叫端建立 MDL 時,就會發生這種情況。
FltGetSwappedBufferMdlAddress 也可以傳回非 NULL MDL 值,即使呼叫端未在其預先操作回呼例程的新緩衝區中交換也一樣。 這發生在作業中,例如分頁 I/O,其中緩衝區為 NULL,而呼叫端會在新的 MDL 位址中交換。
傳回後置回呼例程時,篩選管理員會自動釋放呼叫端所交換之緩衝區的 MDL。 若要防止釋放此 MDL,請呼叫 FltRetainSwappedBufferMdlAddress。
FltGetSwappedBufferMdlAddress 只能從後置回呼例程呼叫。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | fltkernel.h (包含 Fltkernel.h) |
程式庫 | FltMgr.lib |
Dll | Fltmgr.sys |
IRQL | 任何層級 |