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

El controlador usa la EVT_ACX_CIRCUIT_PREPARE_HARDWARE devolución de llamada para agregar funcionalidad cuando acXCIRCUIT se encuentra en la fase de preparación del hardware.

Sintaxis

EVT_ACX_CIRCUIT_PREPARE_HARDWARE EvtAcxCircuitPrepareHardware;

NTSTATUS EvtAcxCircuitPrepareHardware(
  WDFDEVICE Device,
  ACXCIRCUIT Circuit,
  WDFCMRESLIST ResourcesRaw,
  WDFCMRESLIST ResourcesTranslated
)
{...}

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) en la fase de preparación del hardware.

ResourcesRaw

Identificador de un objeto de lista de recursos de marco que identifica los recursos de hardware sin procesar que el administrador de Plug and Play ha asignado al dispositivo. Para obtener más información sobre los recursos sin procesar, vea Recursos sin procesar y traducidos.

ResourcesTranslated

Identificador de un objeto de lista de recursos de marco que identifica los recursos de hardware traducidos que el administrador de Plug and Play ha asignado al dispositivo.

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 Uso de valores NTSTATUS.

Comentarios

Para registrar una función de devolución de llamada EvtAcxCircuitPrepareHardware, un controlador debe llamar al método AcxCircuitInitSetAcxCircuitPnpPowerCallbacks.

Si el controlador ha registrado una función de devolución de llamada EvtAcxCircuitPrepareHardware para acXCIRCUIT, el marco de ACX llama a la función después de que el marco de WDF llame a la función de devolución de llamada EvtDevicePrepareHardware del controlador.

La función de devolución de llamada EvtAcxCircuitPrepareHardware accede a los recursos de hardware sin procesar y traducidos del dispositivo mediante los identificadores ResourcesRaw y ResourcesTranslated que recibe. La función de devolución de llamada puede llamar a WdfCmResourceListGetCount y WdfCmResourceListGetDescriptor para recorrer las listas de recursos. Esta función de devolución de llamada no puede modificar las listas de recursos.

Para obtener más información sobre las listas de recursos y el orden en que aparecen los recursos, vea Recursos sin procesar y traducidos.

Normalmente, la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador realiza lo siguiente, si es necesario:

  • Asigna direcciones de memoria física a direcciones virtuales de ACXCIRCUIT para que el controlador pueda acceder a la memoria asignada al dispositivo.
  • Opcionalmente, la función de devolución de llamada EvtAcxCircuitPrepareHardware del controlador podría poner en cola un elemento de trabajo para completar cualquier otra tarea de configuración que consume mucho tiempo. El uso de un elemento de trabajo para estas operaciones puede ayudar a garantizar que el tiempo de inicio del dispositivo no aumente el tiempo de arranque del sistema. Para obtener más información, vea Uso de elementos de trabajo de Framework.
  • Normalmente, todas las demás operaciones de inicialización de hardware, incluido el firmware de carga, deben realizarse cada vez que el dispositivo entra en su estado de trabajo (D0) y, por lo tanto, deben tener lugar en la función de devolución de llamada EvtDeviceD0Entry del controlador.

Los identificadores ResourcesRaw y ResourcesTranslated que la función de devolución de llamada EvtAcxCircuitPrepareHardware/EvtDevicePrepareHardware sigue siendo válida hasta que la función de devolución de llamada EvtDeviceReleaseHardware del controlador devuelve.

Si el controlador produce un error en la devolución de llamada EvtAcxCircuitPrepareHardware, el objeto ACXCIRCUIT se coloca en el estado delete-pending y se cierran acxstreams asociados.

Para obtener más información sobre los recursos de hardware, consulte Introducción a los recursos de hardware.

Para obtener más información sobre cuándo el marco acX y WDF llaman a estas funciones de devolución de llamada, consulte Escenarios de administración de energía y PnP.

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 El controlador de funciones.

Ejemplo

A continuación se muestra un ejemplo de uso.

NTSTATUS
EvtCircuitPrepareHardware(
    _In_ WDFDEVICE      Device,
    _In_ ACXCIRCUIT     Circuit,
    _In_ WDFCMRESLIST   ResourcesRaw,
    _In_ WDFCMRESLIST   ResourcesTranslated
    )
{
    NTSTATUS            status      = STATUS_SUCCESS;
    PCIRCUIT_CONTEXT    circuitCtx  = GetCircuitContext(Circuit);
    CIpcEventReader *   eventReader = circuitCtx->EventReader;

    PASSIVE_CODE();

    UNREFERENCED_PARAMETER(Device);
    UNREFERENCED_PARAMETER(ResourcesRaw);
    UNREFERENCED_PARAMETER(ResourcesTranslated);

    //
    // Enable 'remote' circuit notifications.
    //
    ASSERT(eventReader);
    status = eventReader->EnableEvents();
    if (!NT_SUCCESS(status))
    {
        DrvLogError(g_RecorderLog, FLAG_INIT,
                    "ACXCIRCUIT %p, CIpcEventReader::EnableEvents failed, %!STATUS!",
                    Circuit, status);
        goto exit;
    }

    status = STATUS_SUCCESS;

exit:
    return status;
}

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
Header acxcircuit.h
IRQL PASSIVE_LEVEL

Consulte también