APC の種類

非同期プロシージャ 呼び出し (APC) は、非同期的に実行される関数です。 APC は遅延プロシージャ呼び出し (DPC) に似ていますが、DPC とは異なり、APC は特定のスレッドのコンテキスト内で実行されます。 ドライバー (ファイル システムとファイル システム フィルター ドライバーを除く) は、直接、APC を使用しませんが、オペレーティング システムの他の部分は、そのため、APC のしくみを認識する必要があります。

Windows オペレーティング システムでは、次の 4 種類の APC が使用されます。

  • 特殊ユーザー モード APC は、ユーザー モードで厳密に実行され、ターゲット スレッドが警告可能な待機状態でない場合でも常に実行されます。 特殊ユーザー モード APC の詳細については、QueueUserAPC2 を参照してください。

  • 通常ユーザー モード APC は、ターゲット スレッドがアラート可能な待機状態にある場合にのみ、ユーザー モードで厳密に実行されます。 オペレーティング システムは、通常のユーザー API を使用して、重複する I/OQueueUserApc Win32 ルーチンなどのメカニズムを実装します。

  • 通常カーネル APC は、IRQL = PASSIVE_LEVEL でカーネル モードで実行されます。 通常カーネル APC は、ユーザー API を含むすべてのユーザー モード コードを優先します。 通常カーネル API は、ファイル システムとファイル システム フィルター ドライバーで一般的に使用されます。

  • 特殊カーネル API は、IRQL = APC_LEVEL でカーネル モードで実行されます。 特殊カーネル APC は、IRQL = PASSIVE_LEVEL で実行されるユーザー モード コードとカーネル モード コード (ユーザー API と通常カーネル API の両方を含む) に割り込みます。 オペレーティング システムは、特殊カーネル API を使用して、I/O 要求の完了などの操作を処理します。

IRQL の優先度が最も低いものから最も高いもののリストについては、ハードウェア優先度の管理を参照してください。