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 任何層級

另請參閱

FltDecodeParameters

FltRetainSwappedBufferMdlAddress