IPowerNotify の実装
ドライバーのミニポート オブジェクト (「オーディオ ミニポート オブジェクト インターフェイス」を参照) またはストリーム オブジェクト (「オーディオ ストリーム オブジェクト インターフェイス」を参照) が電源状態の変更を認識する必要がある場合、QueryInterface メソッドで IPowerNotify インターフェイスをサポートし、電源変更が発生するたびに PortCls システム ドライバーから通知を受け取ることができます。
電源状態が変わると、PortCls は IPowerNotify::PowerChangeNotify メソッドを呼び出して、IPowerNotify インターフェイスをサポートするミニポート オブジェクトとストリーム オブジェクトをそれぞれ別個に通知します。 PowerChangeNotify の呼び出し時、ミニポート オブジェクトは新しいデバイスの電源状態をキャッシュする必要があります。 CAdapterCommon::Init の呼び出し時 (たとえば、Microsoft Windows Driver Kit [WDK] の Msvad サンプル アダプターの実装を参照)、ミニポート ドライバーは、キャッシュされた電源状態を初期値 PowerDeviceD0 に設定する必要があります。
PowerChangeState を呼び出して電源をオフにする前に、PortCls は IPowerNotify::PowerChangeNotify を呼び出して、必要なデバイス コンテキストを保存する機会をミニポート ドライバーに与えます。 このコンテキストには、たとえば、現在のフィルター トポロジとミキサーラインの設定を体現するハードウェア レジスタ値が含まれていることがあります。 PowerChangeState を呼び出して電源をオンにした後、PortCls は PowerChangeNotify を呼び出して、ミニポート ドライバーが保存されたコンテキストを復元できるようにします。
電源をオフにすると、PowerChangeNotify を呼び出す前に、アクティブなオーディオ データ ストリームが PortCls によって一時停止されます。 電源がオンになると、PortCls は、一時停止されているオーディオ データ ストリームを再起動する前に PowerChangeNotify を呼び出します。
ミニポート ドライバーのミニポート オブジェクト クラスとストリーム オブジェクト クラスは、IPowerNotify インターフェイスから継承され、NonDelegatingQueryInterface メソッドでこのインターフェイスをサポートすることができます。 ヘッダー ファイル Portcls.h の IMP_IPowerNotify 定義を使用して、PowerChangeNotify メソッドの関数宣言をドライバーのミニポート オブジェクトとストリーム オブジェクトのクラス定義に追加できます。