非同期プロシージャ 呼び出し (APC) は、非同期的に実行される関数です。 APC は 遅延プロシージャ 呼び出し (DPC) に似ていますが、DPC とは異なり、APC は特定のスレッドのコンテキスト内で実行されます。 ドライバー (ファイル システムとファイル システム フィルター ドライバーを除く) は、直接、APC を使用しませんが、オペレーティング システムの他の部分は、そのため、APC のしくみを認識する必要があります。
Windows オペレーティング システムでは、次の 4 種類の APCs が使用されます。
特殊なユーザー モードの APCs は 、ユーザー モードで厳密に実行され、ターゲット スレッドが警告可能な待機状態でない場合でも常に実行されます。 特殊なユーザー モードの APCs の詳細については、「 QueueUserAPC2」を参照してください。
通常のユーザー モードの APCs は 、ターゲット スレッドがアラート可能な待機状態にある場合にのみ、ユーザー モードで厳密に実行されます。 オペレーティング システムは、通常のユーザー API を使用して、 重複する I/O や QueueUserApc Win32 ルーチンなどのメカニズムを実装します。
通常のカーネル APCs は 、IRQL = PASSIVE_LEVEL でカーネル モードで実行されます。 通常のカーネル APC は、ユーザー API を含むすべてのユーザー モード コードを優先します。 通常のカーネル API は、ファイル システムとファイル システム フィルター ドライバーで一般的に使用されます。
特殊なカーネル APC は 、IRQL = APC_LEVEL でカーネル モードで実行されます。 特殊なカーネル APC は、IRQL = PASSIVE_LEVEL で実行されるユーザー モード コードとカーネル モード コード (ユーザー API と通常のカーネル API の両方を含む) をプリエンプションします。 オペレーティング システムは、特殊なカーネル API を使用して、I/O 要求の完了などの操作を処理します。
IRQL の優先順位が最も低いものから最も高いものの一覧については、「 ハードウェア優先度の管理」を参照してください。