Compartir a través de


EVT_ACX_CIRCUIT_POWER_DOWN función de devolución de llamada (acxcircuit.h)

El controlador usa la EVT_ACX_CIRCUIT_POWER_DOWN devolución de llamada para agregar funcionalidad en la ruta de acceso de encendido de un objeto ACXCIRCUIT.

Sintaxis

EVT_ACX_CIRCUIT_POWER_DOWN EvtAcxCircuitPowerDown;

NTSTATUS EvtAcxCircuitPowerDown(
  WDFDEVICE Device,
  ACXCIRCUIT Circuit,
  WDF_POWER_DEVICE_STATE TargetState
)
{...}

Parámetros

Device

Objeto WDFDEVICE (descrito en WDF - Resumen de objetos de marco) asociado al ACXCIRCUIT especificado.

Circuit

Objeto ACXCIRCUIT (descrito en Resumen de objetos ACX) apagado.

TargetState

Enumerador con tipo WDF_POWER_DEVICE_STATE que identifica el estado de alimentación del dispositivo que el dispositivo está a punto de escribir.

Valor devuelto

Devuelve STATUS_SUCCESS si la llamada se realizó correctamente. De lo contrario, devuelve un código de error adecuado. Para obtener más información, vea Using NTSTATUS Values.

Observaciones

Para registrar una función de devolución de llamada EvtAcxCircuitPrepareHardware, un controlador debe llamar a AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.

Si el controlador ha registrado una función de devolución de llamada EvtCircuitPowerDown, el marco de ACX llama a la función cada vez que uno de los dispositivos del controlador deja su estado de trabajo (D0). Un dispositivo deja el estado D0 cuando se produce una de las siguientes acciones:

  • El sistema y todos sus dispositivos están a punto de dejar sus estados de trabajo y entrar en un estado de baja potencia.
  • El dispositivo está a punto de entrar en un estado de bajo consumo porque está inactivo, si el dispositivo admite inactividad de bajo consumo.
  • El administrador de Plug and Play está intentando redistribuir los recursos de hardware del sistema.
  • Un usuario ha indicado, normalmente por medio de la interfaz de usuario de una aplicación, que quiere quitar el dispositivo.
  • El marco también llama a la función de devolución de llamada EvtCircuitPowerDown después de que un dispositivo se haya quitado inesperadamente (se ha quitado sorpresa).

Para obtener más información sobre cuándo el marco llama a esta función de devolución de llamada, consulte Escenarios de administración de energía y PnP.

A menos que el dispositivo se haya quitado por sorpresa, el marco de ACX llama a esta función de devolución de llamada inmediatamente después de deshabilitar las interrupciones del dispositivo, pero antes de que la alimentación del dispositivo se reduzca de D0 y antes de que WDF invoque la devolución de llamada EvtDeviceD0Exit del controlador en los dispositivos asociados. El parámetro TargetState identifica el estado de alimentación del dispositivo que el dispositivo está a punto de especificar.

La función de devolución de llamada EvtCircuitPowerDown debe realizar las operaciones necesarias antes de que el hardware de ACXCIRCUT entre en el estado de baja potencia especificado, como guardar cualquier información que el controlador necesitará más adelante para restaurar el hardware de ACXCIRCUIT a su estado de alimentación D0.

Si TargetState es WdfPowerDeviceD3Final, debe suponer que el sistema se está desactivando, el dispositivo asociado está a punto de quitarse o que hay un reequilibrio de recursos en curso. Si el controlador debe guardar información, debe escribirla en el disco o en algún otro medio de almacenamiento permanente.

Para obtener más información sobre los controladores que proporcionan esta función de devolución de llamada, consulte Compatibilidad con PnP y Administración de energía en Function Driver.

Ejemplo

A continuación se muestra el uso de ejemplo. En este ejemplo se muestra cómo detener algunas instancias del temporizador en el código de prueba cuando el circuito se apaga.

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;
}

Requisitos de ACX

versión mínima de ACX: 1.0

Para obtener más información sobre las versiones de ACX, consulte introducción a la versión de ACX.

Requisitos

Requisito Valor
encabezado de acxcircuit.h
irQL PASSIVE_LEVEL

Consulte también