次の方法で共有


システムによって定義されたコールバック オブジェクトの使用

システムは、ドライバーで使用する 3 つのコールバック オブジェクトを定義します。

\Callback\SetSystemTime

\Callback\PowerState

\Callback\ProcessorAdd

システム時刻を使用するドライバー (ファイル システム ドライバーなど) は、\Callback\SetSystemTime コールバック オブジェクトに登録できます。 このコールバックは、システム時刻が変更されたときに通知を提供します。

\Callback\PowerState コールバック オブジェクトは、次のいずれかが発生したときに通知を行います。

  • システムが AC から DC 電源に、またはその逆に切り替わる。

  • システム電源ポリシーが、ユーザーまたはアプリケーションの要求の結果として変更される。

  • システムのスリープ状態またはシャットダウン状態への切り替えが近い。 ドライバーは、シャットダウンを予期してコードをメモリにロックできるように、通知を要求できます。 電源マネージャーがシステム Set-power IRP を送信する前に、コールバック ルーチンに通知されます。

\Callback\ProcessorAdd コールバックは、新しいプロセッサがシステムに追加されたときに通知を提供します。

システム定義コールバックを使用するには、ドライバーがコールバック名で InitializeObjectAttributes を呼び出して属性ブロックを初期化し、ドライバー定義コールバックと同様にコールバック オブジェクト (ExCreateCallback) を開きます。 ドライバーは、コールバック オブジェクトの作成を要求しないでください。

ExCreateCallback によって返されるハンドルを使用して、ドライバーは ExRegisterCallback を呼び出して通知ルーチンを登録し、任意のコンテキストへのポインターとそのルーチンへのポインターを渡します。 ドライバーは、コールバック ルーチンをいつでも登録できます。 指定された条件が発生すると、システムは IRQL<=DISPATCH_LEVEL で登録済みのコールバック ルーチンを呼び出します。

ドライバーが通知を必要としなくなった場合は、ExUnregisterCallback を呼び出して、登録されているコールバックの一覧からコールバックを削除し、コールバック オブジェクトへの参照を削除する必要があります。