次の方法で共有


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 ナノ秒単位で指定する変数へのポインター。 タイムアウト の値が負の場合、有効期限は現在のシステム時刻を基準とします。それ以外の場合は絶対です。 絶対有効期限は、システム時刻の変更を追跡します。相対有効期限は、システム時刻の変更の影響を受けません。 このポインターには NULL を指定できます。

戻り値

KeRemoveQueue は、次のいずれかを返します。

  • 指定されたキュー オブジェクトからデキューされたエントリ (使用可能な場合) へのポインター。
  • STATUS_TIMEOUT、エントリが使用可能になる前に指定されたタイムアウト間隔が期限切れになった場合
  • STATUS_USER_APC、呼び出し元スレッドのコンテキストでユーザー モード APC が配信された場合
  • STATUS_ABANDONED、キューがダウンしている場合

備考

KeRemoveQueue の呼び出し元は、エントリ メンバーにアクセスする前に、戻り値がSTATUS_TIMEOUTかSTATUS_USER_APCかをテストする必要があります。 KeRemoveQueue の戻り値 NULL に対してテストすることはプログラミング エラーです。

Timeout に 0 の値を指定すると、キューが現在空の場合に、呼び出し元がエントリを待機することを望まないことを示します。**NULL*タイムアウト ポインターを指定すると、呼び出し元がエントリを無期限に待機することを示します。

WaitMode パラメーターが UserMode 場合は、待機中にカーネル スタックをスワップアウトできます。 そのため、呼び出し元は、WaitMode を UserMode に設定 KeRemoveQueue を呼び出すときに、スタックパラメーターを渡そうとしないでください。

KeRemoveQueue の呼び出しで KernelMode として WaitMode 指定すると、呼び出し元のスレッドのカーネル スタックがスワップアウトされなくなり、ユーザー モード非同期プロシージャ呼び出し (APC) が配信されなくなります。 スレッドが IRQL PASSIVE_LEVELから KeRemoveQueue 呼び出すときに、I/O マネージャーが IRP を完了するために使用するようなカーネル モードの APCs の配信を妨げることはありません。 このようなカーネル モード APC を配信しても、呼び出し元のスレッドがキュー オブジェクトを待機したり、カーネル APC の実行後にエントリを使用して実行するためにディスパッチされたりすることはありません。

ドライバーで管理される内部キューの使用の詳細については、「Driver-Managed キューの」を参照してください。

必要条件

要件 価値
ターゲット プラットフォーム 万国
ヘッダー ntifs.h (Ntifs.h、FltKernel.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
DDI コンプライアンス規則 する HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

関連項目

KeInsertHeadQueueする

KeInsertQueue