IoCsqRemoveNextIrp 函式 (wdm.h)
IoCsqRemoveNextIrp 例程會移除佇列中的下一個相符 IRP。
語法
PIRP IoCsqRemoveNextIrp(
[in, out] PIO_CSQ Csq,
[in, optional] PVOID PeekContext
);
參數
[in, out] Csq
驅動程式分派數據表的指標,用於取消安全的 IRP 佇列。 分派資料表必須由ioCsqInitialize 初始化,。
[in, optional] PeekContext
驅動程式定義內容值的指標。 IoCsqRemoveNextIrp 將此參數傳遞至驅動程式的 CsqPeekNextIrp 例程。 如需詳細資訊,請參閱下列一節。
傳回值
此例程會傳回佇列中下一個相符 IRP 的指標,如果沒有其他 IRP 可用,則 NULL。 例程只會傳回尚未取消的 IRP。
言論
IoCsqRemoveNextIrp 會使用佇列的分派例程來移除 IRP。 IoCsqRemoveNextIrp 例程:
- 呼叫佇列的 CsqAcquireLock 例程來鎖定佇列。
- 呼叫佇列的 CsqPeekNextIrp 例程,以在佇列中尋找下一個相符的 IRP。 IoCsqRemoveNextIrp 會將 PeekContext 參數的值傳遞為 CsqPeekNextIrpPeekContext 參數。 CsqPeekNextIrp 會傳回下一個相符 IRP 的指標,如果沒有相符的 IRP,NULL。
- 如果 CsqPeekNextIrp 的傳回值不是NULL,IoCsqRemoveNextIrp 會呼叫佇列的 CsqRemoveIrp 例程來移除 IRP。
- 呼叫佇列的 CsqReleaseLock 例程來解除鎖定佇列。
請注意,IoCsqXxx 例程會使用 IRP 的 DriverContext[3] 成員來保存 IRP 內容資訊。 使用這些例程將 IRP 排入佇列的驅動程式必須讓該成員未使用。
IoCsqRemoveNextIrp 的呼叫端必須在 IRQL <= DISPATCH_LEVEL上執行。 驅動程式的回呼例程必須在該 IRQL 上正常運作。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 適用於 Windows XP 和更新版本的 Windows。 也必須在 Windows 2000 和 Windows 98/Me 上運作的驅動程式可以改為連結到 Csq.lib 以使用例程。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (請參閱一節) |