共用方式為


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

指定要新增至佇列的 IRP,QueueHead

[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