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)
Ks.lib