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 - Framework 物件的摘要中所述。
Circuit
ACXCIRCUIT 物件(如 ACX 物件的摘要 中所述)已關閉電源。
TargetState
WDF_POWER_DEVICE_STATE 型別列舉值,識別裝置即將進入的裝置電源狀態。
傳回值
如果呼叫成功,則傳回 STATUS_SUCCESS
。 否則,它會傳回適當的錯誤碼。 如需詳細資訊,請參閱使用NTSTATUS值 。
言論
若要註冊 EvtAcxCircuitPrepareHardware 回呼函式,驅動程式必須呼叫 AcxCircuitInitSetAcxCircuitPnpPowerCallbacks。
如果驅動程式已註冊 EvtCircuitPowerDown 回呼函式,則 ACX 架構會在每次驅動程式的其中一個裝置離開其工作狀態時呼叫函式。 當發生下列其中一項時,裝置會離開 D0 狀態:
- 系統及其所有裝置都即將離開其工作狀態,並進入低功率狀態。
- 如果裝置支援低電量閑置,裝置即將進入低電源狀態,因為它處於閑置狀態。
- 即插即用管理員嘗試重新發佈系統的硬體資源。
- 使用者通常透過應用程式的使用者介面指出,他或她想要移除裝置。
- 架構也會在裝置意外移除後呼叫 EvtCircuitPowerDown 回呼函式(意外移除)。
如需架構何時呼叫此回呼函式的詳細資訊,請參閱 PnP 和電源管理案例。
除非裝置遭到意外移除,否則 ACX 架構會在它停用裝置的中斷之後立即呼叫此回呼函式,但在裝置電源從 D0 減少到 WDF 叫用驅動程式的 EvtDeviceD0Exit 回呼之前,才會在相關聯的裝置上叫用驅動程式的 EvtDeviceD0Exit 回呼之前。 TargetState 參數會識別裝置即將進入的裝置電源狀態。
EvtCircuitPowerDown 回呼函式必須執行 ACXCIRCUT 硬體進入指定低功率狀態之前所需的任何作業,例如儲存驅動程式稍後將 ACXCIRCUIT 硬體還原至其 D0 電源狀態所需的任何資訊。
如果 TargetState 是 WdfPowerDeviceD3Final,您應該假設系統已關閉、即將移除相關聯的裝置,或正在進行資源重新平衡。 如果您的驅動程式必須儲存資訊,它應該將它寫入磁碟或其他一些永久儲存媒體。
如需提供此回呼函式之驅動程式的詳細資訊,請參閱函式驅動程式 中支援 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 和電源管理