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 回调例程执行。

如果队列受 旋转锁 而不是 互斥对象资源变量的保护, 则 FltCbdqRemoveIo 的调用方可以在 IRQL <= DISPATCH_LEVEL运行。 如果使用互斥体或资源,则调用方必须在 IRQL <= APC_LEVEL 运行。

筛选器管理器删除已取消的 I/O 请求与筛选器驱动程序删除它(因为它已完成)之间可能存在争用。 请务必注意,请求上下文在首次删除后仍有效,这将导致第二次删除尝试失败。

要求

要求
目标平台 通用
标头 fltkernel.h (包括 Fltkernel.h)
IRQL 请参见“备注”部分。

另请参阅

FLT_CALLBACK_DATA

FLT_CALLBACK_DATA_QUEUE

FLT_IS_IRP_OPERATION

FltCbdqDisable

FltCbdqEnable

FltCbdqInitialize

FltCbdqInsertIo

FltCbdqRemoveNextIo