Compartir a través de


Administración de la vida útil de controlador de ACX WDF

En este tema se hace un resumen sobre la administración de la vida útil de un controlador de ACX WDF y la limpieza de memoria más adecuada. Para obtener información general sobre ACX, consulte Introducción a las extensiones de clase de audio ACX.

Nota:

Los encabezados y bibliotecas de ACX no vienen incluidos en WDK 10.0.22621.2428 (lanzado el 24 de octubre de 2023), pero están disponibles en versiones anteriores, así como en las últimas versiones (compilaciones de la serie 25000) Insider Preview del WDK. Para obtener más información sobre las versiones preliminares del WDK, consulte Instalación de versiones preliminares del Kit de controladores de Windows (WDK).

Inicialización e inicio de ACX WDF

Es necesario realizar una inicialización de ACX adecuada, para permitir una limpieza correcta de los recursos de ACX, de WDF y de memoria. Aquí encontrará resumida más información sobre las fases principales de la enumeración de dispositivos en Enumeración de dispositivos de ACX.

  • Entrada de controlador en WDF
  • Agregar dispositivo en WDF
  • Preparar hardware en WDF
  • Entrada de dispositivo D0 en WDF
  • Proceso de creación de circuitos de ACX (los pines de ACX y objetos de jack están asociados al circuito)
  • Proceso de creación de transmisiones de ACX

Limpieza de objetos de ACX WDF

En este tema se describe cómo se limpian objetos de ACX WDF en este orden.

  • Proceso de cierre de transmisiones de ACX
  • Proceso de eliminación de circuitos de ACX
  • Hardware de versión de dispositivo en WDF
  • Descarga de controlador en WDF

Hay varios métodos válidos para crear y limpiar objetos de WDF y ACX. En este tema se tratan algunos aspectos importantes sobre cómo se administra la vida útil de los objetos de ACX/WDF.

Eventos PnP de consumo de energía y destrucción de objetos

Los eventos PnP de consumo de energía pueden provocar la creación y destrucción de objetos. Para obtener más información sobre los eventos PnP de consumo de energía, consulte Administración de energía de ACX y Secuencias de devolución de llamada de PnP y consumo de energía en WDF.

Administración de la vida útil de referencia de objetos en WDF

WDF usa volúmenes de referencias para ayudar a realizar un seguimiento de la vida útil de los objetos. Puede ser adecuado en una función de devolución de llamada de limpieza para anular las referencias de objeto. La estructura llama a esta función de devolución de llamada de limpieza para que el controlador pueda llamar a WdfObjectDereference si anteriormente había llamado a WdfObjectReference para el objeto que se va a eliminar. Para obtener más información, consulte WdfObjectReference y WdfObjectDereference.

Procedimientos recomendados de desarrollo de controladores de Surface Team

Para ver una descripción de los errores comunes que se producen en el código del controlador con administración de la memoria y vida útil de los objetos, consulte dichas secciones en Procedimientos recomendados de desarrollo de controladores de Surface Team.

Proceso de cierre de transmisiones de ACX

Cuando el cliente cierra la transmisión, el controlador debe ponerse en marcha para cerrar y limpiar los recursos asociados a la transmisión. Para obtener más información, consulte Streaming de ACX: Proceso de cierre de transmisiones. Es importante que el controlador no limpie los recursos que aceptan la transmisión y que el proceso de limpieza tenga en cuenta los efectos en el cliente.

Proceso de eliminación de circuitos de ACX

ACX puede crear un circuito dinámico a petición. Para ello, el controlador asigna una estructura WDFDEVICE_INIT llamando a WdfPdoInitAllocate. Luego, el controlador indica las devoluciones de llamada de PnP/consumo de energía que quiere recibir y crea el dispositivo. El controlador invoca a AcxDeviceRemoveCircuitDevice para quitar el dispositivo de audio de la lista de dispositivos.

Para obtener más información, consulte Eliminación dinámica de circuito de ACX en Circuitos de ACX.

Hardware de versión de dispositivo en WDF

La función de devolución de llamada EVT_WDF_DEVICE_RELEASE_HARDWARE se usa para en la función de devolución de llamada de eventos EvtDeviceReleaseHardware de un controlador para realizar operaciones necesarias cuando ya no se puede acceder a un dispositivo.

Limpieza del contexto del dispositivo en WDF

Este código del ejemplo AudioCodec refleja el uso de una estructura WDF_OBJECT_ATTRIBUTES para crear un EvtCleanupCallback.

    WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, CODEC_DEVICE_CONTEXT);
    attributes.EvtCleanupCallback = Codec_EvtDeviceContextCleanup;

En este ejemplo, la devolución de llamada con un WdfDevice limpia el contexto del dispositivo.

VOID
Codec_EvtDeviceContextCleanup(
    _In_ WDFOBJECT      WdfDevice
)

{
    WDFDEVICE               device;
    PCODEC_DEVICE_CONTEXT   devCtx;

    device = (WDFDEVICE)WdfDevice;
    devCtx = GetCodecDeviceContext(device);
    ASSERT(devCtx != nullptr);

    if (devCtx->Capture)
    {
        CodecC_CircuitCleanup(devCtx->Capture);
    }
}

Descarga de controlador en WDF

Cuando se descarga el controlador, debe liberar todos los recursos restantes. Para obtener más información, consulte Liberar recursos asignados por controladores.

Un controlador registra una función de devolución de llamada EvtDriverUnload cuando llama a WdfDriverCreate. La función de devolución de llamada EvtDriverUnload debe eliminar la asignación de los recursos del sistema no específicos del dispositivo asignados por la rutina DriverEntry del controlador. Para obtener más información, consulte función de devolución de llamada EVT_WDF_DRIVER_UNLOAD.

Este código del ejemplo AudioCodec refleja la estructura de una devolución de llamada de descarga de controladores.

EVT_WDF_DRIVER_UNLOAD               AudioCodecDriverUnload;

void AudioCodecDriverUnload(
    _In_ WDFDRIVER Driver
)
{
    PAGED_CODE();

    if (!Driver)
    {
        ASSERT(FALSE);
        return;
    }

    WPP_CLEANUP(WdfDriverWdmGetDriverObject(Driver));

// Here is where you would cleanup any allocated resources associated with the driver.

    return;
}

Consulte también

Enumeración de dispositivos de ACX

Administración de energía de ACX

Secuencias de devolución de llamada de PnP y administración de energía

Resumen de objetos de ACX

Introducción a extensiones de clase de audio (ACX)

Documentación de referencia de la ACX