EVT_ACX_CIRCUIT_POWER_UP回呼函式 (acxcircuit.h)
驅動程式會使用 EVT_ACX_CIRCUIT_POWER_UP 回呼,在 ACXCIRCUIT 物件的電源上移路徑中新增功能。
語法
EVT_ACX_CIRCUIT_POWER_UP EvtAcxCircuitPowerUp;
NTSTATUS EvtAcxCircuitPowerUp(
WDFDEVICE Device,
ACXCIRCUIT Circuit,
WDF_POWER_DEVICE_STATE PreviousState
)
{...}
參數
Device
與指定 ACXCIRCUIT 相關聯的 WDFDEVICE 物件(如 WDF - Framework 物件的摘要中所述。
Circuit
ACXCIRCUIT 物件(如 ACX 物件摘要中所述)已啟動。
PreviousState
識別先前裝置電源狀態的WDF_POWER_DEVICE_STATE型別列舉值。
傳回值
如果呼叫成功,則傳回 STATUS_SUCCESS
。 否則,它會傳回適當的錯誤碼。 如需詳細資訊,請參閱使用NTSTATUS值 。
如果驅動程式失敗此回呼,ACX 架構會關機相關聯的 ACXSTREAMS,並將 ACXCIRCUIT 標記為 pending-delete。 ACX 架構不會讓 ACX EvtDeviceD0Entry 回呼失敗,這可讓來自此裝置的現有 ACXCIRCUIT 用來建置可運作的音訊路徑。
言論
若要註冊 EvtCircuitPowerUp 回呼函式,驅動程式必須呼叫 AcxCircuitInitSetAcxCircuitPnpPowerCallbacks。
如果驅動程式已註冊裝置的 EvtCircuitPowerUp 回呼函式,架構會在每次裝置進入其工作狀態時呼叫函式。 當發生下列其中一項時,裝置會進入 D0 狀態:
- 列舉裝置(因為裝置已插入或系統重新啟動)。
- 系統及其所有裝置都會從低功率狀態返回其工作狀態。
- 裝置在進入低電源狀態后返回其工作狀態,因為它處於閑置狀態(如果裝置支援低功率閑置)。
- 即插即用管理員已將系統的硬體資源轉散發到系統的裝置中。
- 架構會在裝置進入工作狀態 (D0) 狀態后立即呼叫 EvtDeviceD0Entry 回呼函式,並可供驅動程式使用,但在裝置中斷啟用之前。 PreviousState 參數會識別裝置進入 D0 狀態之前裝置電源狀態。 當架構第一次呼叫 EvtDeviceD0Entry 時,它會提供 WdfPowerDeviceD3Final 的 PreviousState 值。
此回呼函式必須執行讓裝置完全運作所需的任何作業。
如需提供此回呼函式之驅動程式的詳細資訊,請參閱函式驅動程式 中支援 PnP 和電源管理。
EvtCircuitPowerUp 回呼函式會在 IRQL = PASSIVE_LEVEL呼叫。 您不應該將此回呼函式設為可分頁。
例
範例使用方式如下所示。 此範例示範啟動一些用於測試程式代碼的定時器值。
EVT_ACX_CIRCUIT_POWER_UP CodecR_EvtCircuitPowerUp;
NTSTATUS
CreateCircuit()
{
...
ACX_CIRCUIT_PNPPOWER_CALLBACKS_INIT(&powerCallbacks);
powerCallbacks.EvtAcxCircuitPowerUp = CodecR_EvtCircuitPowerUp;
powerCallbacks.EvtAcxCircuitPowerDown = CodecR_EvtCircuitPowerDown;
AcxCircuitInitSetAcxCircuitPnpPowerCallbacks(circuitInit, &powerCallbacks);
...
}
NTSTATUS
CodecR_EvtCircuitPowerUp (
_In_ WDFDEVICE Device,
_In_ ACXCIRCUIT Circuit,
_In_ WDF_POWER_DEVICE_STATE PreviousState
)
{
UNREFERENCED_PARAMETER(Device);
UNREFERENCED_PARAMETER(PreviousState);
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);
WdfTimerStart(muteCtx->Timer, WDF_REL_TIMEOUT_IN_MS(10));
ASSERT(circuitCtx->VolumeElement);
volumeCtx = GetCodecVolumeElementContext(circuitCtx->VolumeElement);
ASSERT(volumeCtx);
ASSERT(volumeCtx->Timer);
WdfTimerStart(volumeCtx->Timer, WDF_REL_TIMEOUT_IN_MS(1000));
ACX 需求
ACX 最低版本: 1.0
如需 ACX 版本的詳細資訊,請參閱 ACX 版本概觀。
要求
要求 | 價值 |
---|---|
標頭 | acxcircuit.h |
IRQL | PASSIVE_LEVEL |
另請參閱
- acxcircuit.h 標頭
- 在函式驅動程式 中支援 PnP 和電源管理