共用方式為


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> 上的不可部分完成作業。

規格需求

需求
目標平台 Universal
標頭 ks.h (包含 Ks.h)
程式庫 Ks.lib