KsAddIrpToCancelableQueue 函数 (ks.h)

KsAddIrpToCancelableQueue 函数将 IRP 添加到可取消的 IRP 队列,从而允许取消 IRP。 如果 IRP 以前已设置为已取消状态, KsAddIrpToCancelableQueue 函数将完成该 IRP 的取消。

语法

KSDDKAPI VOID KsAddIrpToCancelableQueue(
  [in, out]      PLIST_ENTRY           QueueHead,
  [in]           PKSPIN_LOCK           SpinLock,
  [in]           PIRP                  Irp,
  [in]           KSLIST_ENTRY_LOCATION ListLocation,
  [in, optional] PDRIVER_CANCEL        DriverCancel
);

参数

[in, out] QueueHead

为要添加 IRP 的队列的头指定驱动程序分配的存储。

[in] SpinLock

指向驱动程序的旋转锁,用于对 QueueHead 中指定的队列进行队列访问。 如有必要,此指针的副本保存在 IRP 的 KSQUEUE_SPINLOCK_IRP_STORAGE (Irp) 中供取消例程使用。

[in] Irp

指定要添加到 QueueHead 中指定的队列的 IRP。

[in] ListLocation

指示此 IRP 是应放置在队列的开头还是末尾。 此值必须为 KsListEntryTail 或 KsListEntryHead。

[in, optional] DriverCancel

指定驱动程序提供的取消例程要使用的可选参数。 如果这是 NULL,则使用标准 KsCancelRoutine

返回值

备注

如果在调用此例程时 IRP 已进入取消状态, KsAddIrpToCancelableQueue 将立即调用 DriverCancel 中指定的取消例程,或者在 DriverCancel 中未指定任何例程,则调用默认流式处理取消例程。

KsAddIrpToCancelableQueue 函数允许在将 IRP 置于取消列表之前或从一个列表移动到另一个列表之前取消。 可以在 IRQ 级别调用此函数DISPATCH_LEVEL或更低,除非驱动程序分配的队列且队列中的所有条目都是系统驻留的或从常驻存储分配的。

函数不使用取消旋转锁将项添加到列表。 使用提供的旋转锁同步对列表的访问,并依赖于 Irp-CancelRoutine> 上的原子操作。

要求

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