共用方式為


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 例程:

  1. 呼叫佇列的 CsqAcquireLock 例程來鎖定佇列。
  2. 呼叫佇列的 CsqPeekNextIrp 例程,在佇列中尋找下一個相符的 IRP。 IoCsqRemoveNextIrp 會將 PeekContext 參數的值當做 CsqPeekNextIrpPeekContext 參數傳遞。 CsqPeekNextIrp 會傳回下一個相符 IRP 的指標,如果沒有相符的 IRP,則傳回 NULL
  3. 如果 CsqPeekNextIrp 的傳回值不是 NULL,IoCsqRemoveNextIrp 會呼叫佇列的 CsqRemoveIrp 例程來移除 IRP。
  4. 呼叫佇列的 CsqReleaseLock 例程來解除鎖定佇列。
如需詳細資訊,請參閱 取消安全的 IRP 佇列

請注意, 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 (请参阅一节)

另請參閱

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp