Compartir a través de


Enumeración estática

La enumeración estática es la capacidad del controlador para detectar e informar de la existencia de dispositivos durante la inicialización del sistema, con una capacidad limitada de notificar los cambios posteriores a la configuración del sistema.

Los controladores de bus pueden usar la enumeración estática si el número y el tipo de dispositivos o subunits funcionales están predeterminados y permanentes, y no depende de la configuración del sistema en el que se ejecuta el controlador.

Por ejemplo, el controlador de una tarjeta de sonido puede actuar como controlador de autobús y crear objetos de dispositivo físico (PPO) independientes para cada una de las funcionalidades de la tarjeta, como MIDI, audio y joystick.

Listas hijas estáticas

El marco permite a los controladores admitir la enumeración estática proporcionando listas secundarias estáticas. Cada lista secundaria estática representa una lista de dispositivos secundarios que están conectados a un dispositivo primario. El controlador de bus del dispositivo primario debe identificar los dispositivos secundarios del dispositivo primario, agregarlos a la lista de dispositivos secundarios estáticos del dispositivo primario y crear un PDO para cada dispositivo secundario.

Crear una lista secundaria estática

Cada vez que un controlador crea un objeto de dispositivo de marco que representa un objeto de dispositivo funcional (FDO) para un dispositivo, el marco crea una lista secundaria estática vacía para el dispositivo.

Cuando el marco llama a la función de devolución de llamada EvtDriverDeviceAdd de un controlador de bus, la función de devolución de llamada debe llamar a WdfDeviceCreate para crear un FDO para el dispositivo primario. Para obtener más información sobre cómo crear un FDO, consulte Creación de objetos de dispositivo en un controlador de funciones.

A continuación, el controlador debe enumerar los elementos secundarios del dispositivo primario, crear archivos PPO para los elementos secundarios y agregar los elementos secundarios a la lista secundaria.

Opcionalmente, el controlador puede llamar a WdfDeviceSetBusInformationForChildren para proporcionar al marco información sobre el bus. Se recomienda hacerlo porque facilita que los dispositivos y aplicaciones secundarios identifiquen el bus.

Para crear un PDO para un dispositivo secundario detectado, el controlador de bus debe:

  1. Llame a WdfPdoInitAllocate para obtener una estructura WDFDEVICE_INIT .

  2. Inicialice la estructura WDFDEVICE_INIT.

  3. Llame a WdfDeviceCreate para crear un objeto de dispositivo de marco que represente un PDO.

Para obtener más información sobre cómo crear un PDO, consulte Creación de objetos de dispositivo en un controlador de Bus.

Después de llamar a WdfDeviceCreate, el controlador debe llamar a WdfFdoAddStaticChild para agregar el dispositivo secundario a la lista secundaria.

Modificación de una lista secundaria estática

Dado que los controladores solo deben usar listas secundarias estáticas para las configuraciones de dispositivo predeterminadas y permanentes, es poco necesario que un controlador modifique una lista secundaria estática después de crearla. Si el controlador determina que un dispositivo secundario se ha vuelto inaccesible, el controlador puede llamar a WdfPdoMarkMissing. (Si un dispositivo secundario sigue siendo accesible pero deja de responder y se convierte en inutilizable, el controlador debe establecer el miembro Failed de la estructura WDF_DEVICE_STATE en WdfTrue y llamar a WdfDeviceSetDeviceState a continuación).

Recorrer una lista secundaria estática

Si necesita recuperar el contenido de una lista secundaria estática, el controlador puede recorrer la lista haciendo lo siguiente:

  1. Llamando a WdfFdoLockStaticChildListForIteration.

  2. Llamar a WdfFdoRetrieveNextStaticChild tantas veces como sea necesario.

  3. Llamar a WdfFdoUnlockStaticChildListFromIteration.