EVT_ACX_CIRCUIT_POWER_DOWNコールバック関数 (acxcircuit.h)
EVT_ACX_CIRCUIT_POWER_DOWN コールバックは、ACXCIRCUIT オブジェクトの電源ダウン パスに機能を追加するためにドライバーによって使用されます。
構文
EVT_ACX_CIRCUIT_POWER_DOWN EvtAcxCircuitPowerDown;
NTSTATUS EvtAcxCircuitPowerDown(
WDFDEVICE Device,
ACXCIRCUIT Circuit,
WDF_POWER_DEVICE_STATE TargetState
)
{...}
パラメーター
Device
指定した ACXCIRCUIT に関連付けられた WDFDEVICE オブジェクト (WDF - フレームワーク オブジェクトの概要) です。
Circuit
ACXCIRCUIT オブジェクト (ACX オブジェクト の概要で説明) の電源が切れています。
TargetState
WDF_POWER_DEVICE_STATE 入力しようとしているデバイスの電源状態を識別する型指定された列挙子。
戻り値
呼び出しが成功した場合に STATUS_SUCCESS
を返します。 それ以外の場合は、適切なエラー コードが返されます。 詳細については、NTSTATUS 値 の使用に関するを参照してください。
備考
EvtAcxCircuitPrepareHardware コールバック関数を登録するには、ドライバー AcxCircuitInitSetAcxCircuitPnpPowerCallbacksを呼び出す必要があります。
ドライバーが EvtCircuitPowerDown コールバック関数を登録している場合、ACX フレームワークは、ドライバーのデバイスの 1 つが動作 (D0) 状態を離れるたびに関数を呼び出します。 デバイスは、次のいずれかが発生すると D0 状態になります。
- システムとそのすべてのデバイスは、動作状態を残し、低電力状態に入りようとしています。
- デバイスが低電力アイドルをサポートしている場合、デバイスはアイドル状態であるため、低電力状態に入りようとしています。
- プラグ アンド プレイ マネージャーは、システムのハードウェア リソースを再配布しようとしています。
- ユーザーは、通常、アプリケーションのユーザー インターフェイスを使用して、デバイスを削除することを示しています。
- フレームワークは、デバイスが予期せず削除された後 (突然削除された) EvtCircuitPowerDown コールバック関数も呼び出します。
フレームワークがこのコールバック関数を呼び出すタイミングの詳細については、「PnP と電源管理のシナリオ」を参照してください。
デバイスが突然削除されていない限り、ACX フレームワークは、デバイスの割り込みを無効にした直後に、デバイスの電源が D0 から減少する前、および WDF が関連付けられているデバイスでドライバーの EvtDeviceD0Exit コールバックを呼び出す前に、このコールバック関数を呼び出します。 TargetState パラメーターは、デバイスが入力しようとしているデバイスの電源状態を識別します。
EvtCircuitPowerDown コールバック関数は、ACXCIRCUT のハードウェアが指定された低電力状態になる前に必要な操作を実行する必要があります。たとえば、ACXCIRCUIT のハードウェアを D0 電源状態に復元するためにドライバーが後で必要とする情報を保存するなどです。
TargetState が WdfPowerDeviceD3Final の場合は、システムがオフになっているか、関連付けられているデバイスが削除されようとしているか、リソースの再調整が進行中であると想定する必要があります。 ドライバーが情報を保存する必要がある場合は、ディスクまたはその他の永続的な記憶域メディアに書き込む必要があります。
このコールバック関数を提供するドライバーの詳細については、「Function Driverでの PnP と電源管理のサポート」を参照してください。
例
使用例を次に示します。 この例では、回線の電源が切れたときに、テスト コードでタイマー インスタンスの一部を停止する方法を示します。
EVT_ACX_CIRCUIT_POWER_DOWN CodecR_EvtCircuitPowerDown;
NTSTATUS
CreateCircuit()
{
...
ACX_CIRCUIT_PNPPOWER_CALLBACKS_INIT(&powerCallbacks);
powerCallbacks.EvtAcxCircuitPowerUp = CodecR_EvtCircuitPowerUp;
powerCallbacks.EvtAcxCircuitPowerDown = CodecR_EvtCircuitPowerDown;
AcxCircuitInitSetAcxCircuitPnpPowerCallbacks(circuitInit, &powerCallbacks);
...
}
NTSTATUS
CodecR_EvtCircuitPowerDown (
_In_ WDFDEVICE Device,
_In_ ACXCIRCUIT Circuit,
_In_ WDF_POWER_DEVICE_STATE TargetState
)
{
UNREFERENCED_PARAMETER(Device);
UNREFERENCED_PARAMETER(TargetState);
CODEC_RENDER_CIRCUIT_CONTEXT * circuitCtx;
CODEC_MUTE_ELEMENT_CONTEXT * muteCtx;
CODEC_VOLUME_ELEMENT_CONTEXT * volumeCtx;
PAGED_CODE();
// for testing.
circuitCtx = GetRenderCircuitContext(Circuit);
ASSERT(circuitCtx);
ASSERT(circuitCtx->MuteElement);
muteCtx = GetCodecMuteElementContext(circuitCtx->MuteElement);
ASSERT(muteCtx);
ASSERT(muteCtx->Timer);
WdfTimerStop(muteCtx->Timer, TRUE);
ASSERT(circuitCtx->VolumeElement);
volumeCtx = GetCodecVolumeElementContext(circuitCtx->VolumeElement);
ASSERT(volumeCtx);
ASSERT(volumeCtx->Timer);
WdfTimerStop(volumeCtx->Timer, TRUE);
return STATUS_SUCCESS;
}
ACX の要件
最小 ACX バージョン: 1.0
ACX バージョンの詳細については、ACX バージョンの概要 参照してください。
必要条件
要件 | 価値 |
---|---|
ヘッダー | acxcircuit.h |
IRQL | PASSIVE_LEVEL |
関連項目
- acxcircuit.h ヘッダー を する
- ファンクション ドライバー で PnP と電源管理をサポートする