共用方式為


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 的傳回值不是NULLIoCsqRemoveNextIrp 會呼叫佇列的 CsqRemoveIrp 例程來移除 IRP。
  4. 呼叫佇列的 CsqReleaseLock 例程來解除鎖定佇列。
如需詳細資訊,請參閱 Cancel-Safe IRP 佇列。

請注意,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 (請參閱一節)

另請參閱

CsqAcquireLock

CsqCompleteCanceledIrp

CsqInsertIrp

CsqInsertIrpEx

CsqPeekNextIrp

CsqReleaseLock

CsqRemoveIrp

IO_CSQ

IoCsqInitialize

IoCsqInitializeEx

IoCsqInsertIrp

IoCsqInsertIrpEx

IoCsqRemoveIrp