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 subunidades funcionales están predeterminados y permanentes, y no dependen 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 bus y crear objetos de dispositivo físico (PPO) independientes para cada una de las capacidades de la tarjeta, como MIDI, audio y joystick.
Listas secundarias 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 para el dispositivo primario debe identificar los dispositivos secundarios del elemento primario, agregarlos a la lista de elementos 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 del 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 Creating Device Objects in a Function Driver.
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 secundarios y las aplicaciones identifiquen el bus.
Para crear un PDO para un dispositivo secundario detectado, el controlador de bus debe:
Llame a WdfPdoInitAllocate para obtener una estructura WDFDEVICE_INIT .
Inicialice la estructura WDFDEVICE_INIT.
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 Creating Device Objects in a Bus Driver.
Después de llamar a WdfDeviceCreate, el controlador debe llamar a WdfFdoAddStaticChild para agregar el dispositivo secundario a la lista secundaria.
Modificar una lista secundaria estática
Dado que los controladores solo deben usar listas secundarias estáticas para configuraciones de dispositivos que están 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 no es accesible, el controlador puede llamar a WdfPdoMarkMissing. (Si un dispositivo secundario sigue siendo accesible, pero deja de responder e inutilizable, el controlador debe establecer el miembro Failed de la estructura WDF_DEVICE_STATEen WdfTrue y, a continuación, llamar a WdfDeviceSetDeviceState).
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:
Llamar a WdfFdoLockStaticChildListForIteration.
Llamar a WdfFdoRetrieveNextStaticChild tantas veces como sea necesario.
Llamar a WdfFdoUnlockStaticChildListFromIteration.