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 參數的值當做 CsqPeekNextIrp 的 PeekContext 參數傳遞。 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 以使用例程。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL (请参阅一节) |