共用方式為


KeRemoveQueue 函式 (ntifs.h)

KeRemoveQueue 例程會為呼叫線程提供指定佇列物件中已清除佇列專案的指標,或允許呼叫端在佇列物件上等候最多選擇性的逾時間隔。

語法

PLIST_ENTRY KeRemoveQueue(
  [in, out]      PRKQUEUE        Queue,
  [in]           KPROCESSOR_MODE WaitMode,
  [in, optional] PLARGE_INTEGER  Timeout
);

參數

[in, out] Queue

初始化佇列物件的指標,呼叫端會在非分頁集區中提供常駐記憶體。

[in] WaitMode

呼叫者正在等候的處理器模式,可以是 KernelModeUserMode。 如果在 IRQL >= DISPATCH_LEVEL 存取其堆疊上的任何項目,呼叫端必須指定 KernelMode

[in, optional] Timeout

指定絕對時間或相對時間的變數指標,單位為100奈秒,等候即將到期。 如果 逾時值 為負值,則到期時間會相對於目前的系統時間;否則,它是絕對的。 絕對到期時間會追蹤系統時間的任何變更;相對到期時間不會受到系統時間變更的影響。 此指標可以是 NULL。

傳回值

KeRemoveQueue 會傳回下列其中一項:

  • 如果有可用的佇列物件,則為從指定佇列物件清除佇列專案的指標。
  • STATUS_TIMEOUT,如果指定的逾時間隔在專案可用前過期
  • STATUS_USER_APC,如果在呼叫線程的內容中傳遞使用者模式 APC
  • STATUS_ABANDONED,如果佇列已執行

言論

KeRemoveQueue 呼叫者應該先測試其傳回值是否為STATUS_TIMEOUT或STATUS_USER_APC,再存取任何項目成員。 針對 NULL 測試 KeRemoveQueue 的傳回值是程式設計錯誤。

Timeout 指定零值 表示如果佇列目前是空的,呼叫端不願意等候專案。指定 **NULL*逾時 指標表示呼叫端願意無限期等候專案。

如果 WaitMode 參數 UserMode,則可以在等候期間交換核心堆棧。 因此,呼叫者絕對不會在呼叫 KeRemoveQueue 時嘗試在堆疊上傳遞參數,且 WaitMode 設定為 UserMode

將 WaitMode 指定為 KernelModeKeRemoveQueue 可防止呼叫線程的核心堆疊被交換,以及防止傳遞使用者模式異步過程調用 (APC)。 當線程從 IRQL PASSIVE_LEVEL呼叫 KeRemoveQueue 時,不會防止傳遞核心模式 APC,例如 I/O 管理員用來完成 IRP 的人員。 這類內核模式 APC 的傳遞不會防止呼叫線程在佇列物件上等候,也不會在核心 APC 執行之後分派執行專案。

如需使用驅動程式管理的內部佇列的詳細資訊,請參閱 Driver-Managed 佇列

要求

要求 價值
目標平臺 普遍
標頭 ntifs.h (include Ntifs.h, FltKernel.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)PowerIrpDDis(wdm)

另請參閱

KeInsertHeadQueue

KeInsertQueue