KsMoveIrpsOnCancelableQueue 函数 (ks.h)

KsMoveIrpsOnCancelableQueue 函数将指定的 IRP 从 SourceList 参数移动到 DestinationList 参数,具体取决于从 minidriver 定义的 KStrIrpListCallback 函数返回的值。

语法

KSDDKAPI NTSTATUS KsMoveIrpsOnCancelableQueue(
  [in, out]      PLIST_ENTRY           SourceList,
  [in]           PKSPIN_LOCK           SourceLock,
  [in, out]      PLIST_ENTRY           DestinationList,
  [in, optional] PKSPIN_LOCK           DestinationLock,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in]           PFNKSIRPLISTCALLBACK  ListCallback,
  [in]           PVOID                 Context
);

参数

[in, out] SourceList

指定要从中删除 IRP 的队列的头。

[in] SourceLock

指向用于访问源队列的驱动程序的旋转锁的指针。

[in, out] DestinationList

指定要添加 IRP 的队列的头。

[in, optional] DestinationLock

(可选)包含指向用于访问目标队列的驱动程序的旋转锁的指针。 如果未提供此参数,则假定 SourceLock 参数控制这两个队列。 如果提供,则始终在 SourceLock 参数之后获取此锁。 如果目标列表具有单独的旋转锁,则首先获取系统范围的取消旋转锁,以便移动 IRP 并允许更新KSQUEUE_SPINLOCK_IRP_STORAGE () 旋转锁。

[in] ListLocation

指示是应从源队列的头还是尾枚举 IRP。 移动的任何 IRP 都放置在目标队列的另一端,以便保持排序。

[in] ListCallback

指定要调用的微型驱动程序定义的 KStrIrpListCallback 函数,以指示是否应将特定 IRP 从 SourceList 移动到 DestinationList,或者是否应终止枚举。

[in] Context

传递给 ListCallback 的上下文。

返回值

如果列表已完全枚举,则返回STATUS_SUCCESS;否则,返回由微型驱动程序定义的 KStrIrpListCallback 回调函数返回的中断枚举的任何警告或错误。

注解

如果 KStrIrpListCallback 函数指示应移动 IRP(无论当前是否获取),则移动 IRP。 如果 KStrIrpListCallback 返回STATUS_SUCCESS,则移动 IRP。 如果返回STATUS_NO_MATCH,则不会移动 IRP。 任何其他返回警告或错误值都将终止枚举,并由 函数返回。 KStrIrpListCallback 不应将STATUS_NO_MATCH值作为错误返回。 DISPATCH_LEVEL调用 KStrIrpListCallback 。 始终在末尾调用 KStrIrpListCallback 至少一次,并具有 NULL IRP 值以完成列表枚举。

KsMoveIrpsOnCancelableQueue 继续浏览列表,直到回调函数指示应终止搜索或到达列表的末尾。 KsMoveIrpsOnCancelableQueue 尽可能使用提供的旋转锁来同步访问,从而最大程度地减少系统范围的取消旋转锁的使用。 KsMoveIrpsOnCancelableQueue 不允许在移动 IRP 时修改取消例程。

可以在 DISPATCH_LEVEL 或更低位置调用函数。

要求

要求
目标平台 通用
标头 ks.h (包括 Ks.h)
Library Ks.lib

另请参阅

KStrIrpListCallback