次の方法で共有


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

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

[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 で実行されている必要があります。つまり、呼び出し元が ISR を IoConnectInterrupt または IoConnectInterruptExに登録したときに指定した SynchronizeIrql 値以下の IRQL で指定します。

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

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 以降で使用できます。
ターゲット プラットフォーム 万国
ヘッダー wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DIRQL (「解説」セクションを参照)

関連項目

IoConnectInterrupt

IoConnectInterruptEx