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
呼叫端正在等候的處理器模式,可以是 KernelMode 或 UserMode。 如果可以在 IRQL >= DISPATCH_LEVEL存取其堆疊上的任何專案,呼叫端必須指定 KernelMode。
[in, optional] Timeout
指定絕對或相對時間的變數指標,單位為100奈秒,等候到期。 如果 Timeout 的值是負數,則到期時間相對於目前的系統時間;否則,它是絕對的。 絕對到期時間會追蹤系統時間的任何變更;相對到期時間不會受到系統時間變更的影響。 此指標可以是 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 時,嘗試在堆疊上傳遞參數。
在對 KeRemoveQueue 的呼叫中將 WaitMode 指定為 KernelMode,可防止呼叫線程的核心堆疊遭到交換,以及防止傳遞使用者模式異步過程呼叫 (APC) 。 當線程從 IRQL PASSIVE_LEVEL呼叫 KeRemoveQueue 時,不會防止傳遞核心模式 AP,例如 I/O 管理員用來完成 IRP 的 API。 這類核心模式 APC 的傳遞不會防止呼叫線程在佇列物件上等候,也不會在執行核心 APC 之後,以專案分派執行。
如需使用驅動程式管理的內部佇列的詳細資訊,請參閱 驅動程式管理的佇列。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | ntifs.h (包括 Ntifs.h、FltKernel.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDDIs (storport) 、 PowerIrpDDis (wdm) |