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 |