KeSynchronizeExecution 関数 (wdm.h)

KeSynchronizeExecution ルーチンは、指定されたルーチンの実行を、1 つ以上の割り込みオブジェクトのセットに割り当てられた割り込みサービス ルーチン (ISR) と同期します。

構文

BOOLEAN KeSynchronizeExecution(
  [in, out]      PKINTERRUPT            Interrupt,
  [in]           PKSYNCHRONIZE_ROUTINE  SynchronizeRoutine,
  [in, optional] __drv_aliasesMem PVOID SynchronizeContext
);

パラメーター

[in, out] Interrupt

割り込みオブジェクトのセットへのポインター。 呼び出し元は、 IoConnectInterrupt または IoConnectInterruptEx ルーチンからこのポインター 取得しました。

[in] SynchronizeRoutine

呼び出し元が指定した SynchCritSection ルーチンを指定します。このルーチンの実行は、割り込みオブジェクトに割り当てられた ISR の実行と同期されます。

[in, optional] SynchronizeContext

呼び出し元が指定したコンテキスト値へのポインター。呼び出し時に SynchCritSection ルーチンに 渡されます。

戻り値

KeSynchronizeExecution は 、操作が成功した場合に TRUE を 返します。 それ以外の場合は、 FALSE を返します

注釈

このルーチンが呼び出されると、次の処理が行われます。

  1. IRQL は、IoConnectInterrupt または IoConnectInterruptEx の呼び出しで指定された SynchronizeIrql 値に発生します
  2. SynchronizeContext へのアクセスは、関連付けられた割り込みオブジェクトスピン ロック (または、PASSIVE_LEVELで実行される ISR の場合はシステム イベント オブジェクト) を取得することによって、割り当てられた ISR と同期されます。
  3. 指定した SynchCritSection ルーチンは、 SynchronizeContext 値をパラメーターとして使用して呼び出されます。
ISR が DIRQL >= DISPATCH_LEVELで実行されている場合、 SynchCritSection ルーチンは同じ DIRQL で実行されるため、他の優先度の高いタスクの遅延を回避するために、できるだけ短時間実行する必要があります。

KeSynchronizeExecution の呼び出し元は、IRQL <= DIRQL で実行されている必要があります。つまり、呼び出し元が IOConnectInterrupt または IoConnectInterruptEx に ISR を登録したときに指定された SynchronizeIrql 値の値以下の IRQL で実行する必要があります。

Windows 8以降、ドライバーは KeSynchronizeExecution を呼び出して、SynchCritSection ルーチンの実行を IRQL = PASSIVE_LEVEL で実行される ISR と同期できます。 以前のバージョンの Windows では、 KeSynchronizeExecution は IRQL >= DISPATCH_LEVEL で実行される ISR とのみ実行を同期できます。 詳細については、「 Passive-Level 割り込みサービス ルーチンの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 以降で使用できます。
対象プラットフォーム ユニバーサル
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL <= DIRQL (「解説」セクションを参照)

こちらもご覧ください

IoConnectInterrupt

IoConnectInterruptEx