PortCls プライベート PEP コンテキストの共有
Windows 8 以降、ミニポート ドライバーは、Windows Power Engine Plug-in (PEP) とのプライベート コンテキスト共有のため、新しいインターフェイスである IPortClsRuntimePower を使用できるようになりました。
オーディオ ポート クラス ドライバー (PortCls) が更新され、WaveRT ポート上で新しいインターフェイスである IPortClsRuntimePower が公開されました。 ミニポート ドライバーがプライベート電源制御をオペレーティング システムの PEP に送信するには、ミニポート ドライバーはまず、それに関連付けられているポートの IPortClsRuntimePower インターフェイスへのアクセスを取得する必要があります。 次に、ミニポート ドライバーは、適切なタイミングで呼び出されるコールバックを登録し、ミニポート ドライバーがプライベート電源制御を送信できるようにします。
IPortClsRuntimePower へのアクセス
ミニポート ドライバーは、次の一連のイベントを通じてそのポートの IPortClsRuntimePower にアクセスします:
ミニポート ドライバーは PcNewPort を呼び出し、IID_IPortWaveRT を REFID として提供します。
PcNewPort は、IPortWaveRT タイプのポート インターフェイス (Pport) を作成します。
次に、ミニポート ドライバーは、新しく作成された IPortWaveRT ポート インターフェイス内のQueryInterface を呼び出し、インターフェイス GUID として IID_IPortClsRuntimePower を指定します。
IPortWaveRT ポート インターフェイスは、ミニポート ドライバーにその IPortClsRuntimePower インターフェイスへのポインターを提供します。
Portcls.h ヘッダー ファイルは、IPortClsRuntimePower の GUID を次のように定義します:
// {E057C351-0430-4DBC-B172-C711D40A2373}
DEFINE_GUID(IID_IPortClsRuntimePower,
0xe057c351, 0x430, 0x4dbc, 0xb1, 0x72, 0xc7, 0x11, 0xd4, 0xa, 0x23, 0x73);
コールバックの登録
ミニポート ドライバーは、IPortClsRuntimePower::RegisterPowerControlCallback 方式を使用してコールバックを登録します。 この方式は、PEP がプライベート リクエストを開始するとき、またはミニポート ドライバー自体によって開始されるプライベート リクエストに応答して呼び出されます。 コールバック登録は通常、ドライバーが IRP_MN_START_DEVICE PNP Irp を処理している間に実行する必要があります。
コールバックで提供される Context ポインターの以外、他のパラメーターはランタイム電源フレームワークの PowerControlCallback の定義と同じように定義されます。 さらに、ミニポートのコールバックは、Portcls.h ヘッダー ファイルの次のスニペットで定義されるように、PCPFNRUNTIME_POWER_CONTROL_CALLBACK タイプである必要があります。
typedef
NTSTATUS
_IRQL_requires_max_(DISPATCH_LEVEL)
(*PCPFNRUNTIME_POWER_CONTROL_CALLBACK)
(
_In_ LPCGUID PowerControlCode,
_In_opt_ PVOID InBuffer,
_In_ SIZE_T InBufferSize,
_Out_opt_ PVOID OutBuffer,
_In_ SIZE_T OutBufferSize,
_Out_opt_ PSIZE_T BytesReturned,
_In_opt_ PVOID Context
);
ドライバーが停止または削除された場合、それはIPortClsRuntimePower::UnregisterPowerControlCallback方式を使用して、登録されているコールバックの登録を解除する必要があります。
プライベート電源制御の送信
ミニポートが IPortClsRuntimePower インターフェイスへのアクセスを確立し、インターフェイスの RegisterPowerControlCallback 方式を使用してコールバックを登録した後、今プライベート電源制御を送信する準備が整いました。 コールバック方式が呼び出されると、ミニポート ドライバーは IPortClsRuntimePower::SendPowerControl 方式を使用してプライベート電源制御を Windows PEP に送信します。
DeviceObject パラメータを除いて、他のすべてのパラメーターは、ランタイム電源フレームワークの PoFxPowerControl 方式のパラメーターと同じように定義されます。