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) |
库 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | 任何级别 |