共用方式為


KsRemoveIrpFromCancelableQueue 函式 (ks.h)

KsRemoveIrpFromCancelableQueue 函式會從指定的佇列中快顯下一個無法中斷的 IRP,該佇列可以取消並移除其取消狀態。 函式會搜尋清單,直到找到具有取消例程的 IRP,或到達清單結尾為止。 函式會使用提供的微調鎖定,將取消微調鎖定的使用降到最低,以在大部分情況下同步存取。 函式可以在 IRQ 層級呼叫DISPATCH_LEVEL或更低。

語法

KSDDKAPI PIRP KsRemoveIrpFromCancelableQueue(
  [in, out] PLIST_ENTRY             QueueHead,
  [in]      PKSPIN_LOCK             SpinLock,
  [in]      KSLIST_ENTRY_LOCATION   ListLocation,
  [in]      KSIRP_REMOVAL_OPERATION RemovalOperation
);

參數

[in, out] QueueHead

指向要從中移除 IRP 的佇列前端。

[in] SpinLock

指向驅動程式的佇列存取微調鎖定。

[in] ListLocation

指出此 IRP 應該來自佇列的開頭或結尾。

[in] RemovalOperation

指定是否從清單中移除 IRP,或只藉由將 cancel 函式設定為 NULL 來取得。 如果只取得 IRP,則必須稍後使用 KsReleaseIrpOnCancelableQueue 發行 IRP,或使用 KsRemoveSpecificIrpFromCancelableQueue 完全移除。

傳回值

KsRemoveIrpFromCancelableQueue 函式會傳回清單中的下一個非分類 IRP,如果找不到任何標識符,或找不到尚未取得的 IRP,則會傳回 NULL

備註

這些列舉會用於先前的參數中,以控制從中移除 IRP 的位置,以及如何移除。

typedef enum {
    KsListEntryTail,
    KsListEntryHead
} KSLIST_ENTRY_LOCATION;

typedef enum {
    KsAcquireOnly,
    KsAcquireAndRemove
} KSIRP_REMOVAL_OPERATION;

規格需求

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

另請參閱

KsReleaseIrpOnCancelableQueue

KsRemoveSpecificIrpFromCancelableQueue