KsMoveIrpsOnCancelableQueue 函数 (ks.h)

KsMoveIrpsOnCancelableQueue 函数将指定的 IRP 从 SourceList 参数移动到 DestinationList 参数,具体取决于从微型驱动程序定义的 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 调用 KStrIrpListCallbackKStrIrpListCallback 始终在末尾至少调用一次,NULL IRP 值来完成列表枚举。

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

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

要求

要求 价值
目标平台 普遍
标头 ks.h (包括 Ks.h)
Ks.lib

另请参阅

KStrIrpListCallback