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 | 任何级别 |
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈