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 值。 当由微筛选器驱动程序或文件系统驱动程序堆栈中调用方下方的微筛选器驱动程序、旧筛选器驱动程序或文件系统驱动程序为缓冲区创建 MDL 时,就会发生这种情况。

FltGetSwappedBufferMdlAddress 还可以返回非 NULL MDL 值,即使调用方未在其预操作回调例程中交换新缓冲区。 这发生在操作中,例如分页 I/O,其中缓冲区为 NULL,调用方在新的 MDL 地址中交换。

当操作后回调例程返回时,筛选器管理器会自动释放调用方交换的缓冲区的 MDL。 若要防止释放此 MDL,请调用 FltRetainSwappedBufferMdlAddress

FltGetSwappedBufferMdlAddress 只能从操作后回调例程调用。

要求

要求
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
Library FltMgr.lib
DLL Fltmgr.sys
IRQL 任何级别

另请参阅

FltDecodeParameters

FltRetainSwappedBufferMdlAddress