FltCbdqRemoveIo 函数 (fltkernel.h)
FltCbdqRemoveIo 从微型筛选器驱动程序的回调数据队列中删除特定项。
语法
PFLT_CALLBACK_DATA FLTAPI FltCbdqRemoveIo(
[in, out] PFLT_CALLBACK_DATA_QUEUE Cbdq,
[in] PFLT_CALLBACK_DATA_QUEUE_IO_CONTEXT Context
);
参数
[in, out] Cbdq
指向取消安全的回调数据队列的指针。 必须通过调用 FltCbdqInitialize来初始化此队列。
[in] Context
要删除的项的上下文指针。 首次在队列中插入 I/O 请求时,FltCbdqInsertIo 初始化此上下文。 此参数是必需的,必须是非NULL。
返回值
FltCbdqRemoveIo 返回指向从队列中删除的 I/O 请求的回调数据结构的指针。 如果未找到匹配的 I/O 请求或队列为空,FltCbdqRemoveIo 返回 NULL。
言论
FltCbdqRemoveIo 从微型筛选器驱动程序的回调数据队列中删除特定 I/O作的回调数据(FLT_CALLBACK_DATA)结构。 FltCbdqRemoveIo 只能用于删除具有与之关联的 上下文 结构的回调数据结构。 当回调数据结构通过 FltCbdqInsertIo插入回调数据队列时,将创建此关联。
微型筛选器驱动程序可以使用 FltCbdqXxx 例程来实现基于 IRP 的 I/O作的回调数据队列。 使用这些例程,微型筛选器驱动程序可以使其队列取消安全;系统以透明方式处理微型筛选器驱动程序的 I/O 取消。
FltCbdqXxx 例程只能用于基于 IRP 的 I/O作。 若要确定给定的回调数据结构是否表示基于 IRP 的 I/O作,请使用 FLT_IS_IRP_OPERATION 宏。
回调数据队列由 FltCbdqInitialize初始化。 FltCbdqRemoveIo 使用队列调度表中提供的例程来锁定队列并从队列中删除回调数据结构。 删除作本身由微型筛选器驱动程序的 CbdqRemoveIo 回调例程执行。
如果队列受 旋转锁 保护,而不是 互斥对象 或 资源变量,则可以在 IRQL <= DISPATCH_LEVEL 上运行 FltCbdqRemoveIo 的调用方。 如果使用互斥体或资源,则调用方必须在 IRQL <= APC_LEVEL运行。
筛选器管理器删除已取消的 I/O 请求之间存在潜在的争用,筛选器驱动程序会删除它,因为它已完成。 请务必注意,请求上下文在首次删除后仍有效,这将导致第二次删除尝试失败。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | fltkernel.h (包括 Fltkernel.h) |
IRQL | 请参阅“备注”部分。 |