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 |