Creación de objetos de dispositivo en un controlador de bus
Cada controlador de bus debe crear un objeto de dispositivo de marco cuando detecta que un dispositivo secundario está conectado a un dispositivo primario. El dispositivo primario suele ser un bus, pero también puede ser un dispositivo multifunción para el que cada función requiere un conjunto independiente de controladores (como una tarjeta de sonido que admite audio digital y MIDI). Los objetos de dispositivo que crean los controladores de bus se denominan objetos de dispositivo físico (PPO) porque cada uno representa una conexión real de un elemento de hardware (el elemento secundario) a otro (el elemento primario).
El proceso de identificación e notificación de los dispositivos que están conectados a un bus se denomina enumeración de bus.
Si un controlador de bus realiza la enumeración dinámica de bus, su función de devolución de llamada EvtChildListCreateDevice recibe un identificador de una estructura WDFDEVICE_INIT .
Si un controlador de bus realiza la enumeración de bus estático, debe llamar a WdfPdoInitAllocate para obtener un identificador en una estructura de WDFDEVICE_INIT.
Para obtener más información sobre la enumeración de bus, vea Enumeración de los dispositivos en un bus.
Un controlador de bus puede llamar a un conjunto de métodos de inicialización de objetos de dispositivo de marco, que almacenan información en la estructura WDFDEVICE_INIT . Además, los controladores de autobús pueden llamar a métodos de inicialización de PDO del marco.
La creación de un objeto de dispositivo de marco para un dispositivo secundario enumerado normalmente incluye los pasos siguientes:
Registro de funciones de devolución de llamada específicas del controlador de bus.
La mayoría de los controladores de bus llaman a WdfPdoInitSetEventCallbacks, ya que deben especificar los recursos de hardware del sistema que requiere un dispositivo. Para obtener más información sobre cómo especificar recursos de hardware, consulte Recursos de hardware para controladores de Framework-Based. Se pueden registrar funciones de devolución de llamada adicionales si el dispositivo y el controlador admiten la ejección.
Generación de informes de cadenas de identificación de dispositivos.
Los controladores de bus deben notificar las cadenas de identificación del dispositivo mediante una llamada a WdfPdoInitAssignDeviceID, WdfPdoInitAssignInstanceID, WdfPdoInitAddCompatibleID y WdfPdoInitAddHardwareID para cada tipo de cadena que admita el dispositivo. Además, los controladores de bus que usan la versión 1.9 o posterior del marco pueden llamar a WdfPdoInitAssignContainerID.
Notificar si el controlador de bus puede admitir el dispositivo en modo sin formato.
Si el controlador de bus admite el modo sin formato para el dispositivo, debe llamar a WdfPdoInitAssignRawDevice.
Proporcionar texto que se pueda mostrar que describe el dispositivo.
Los controladores de bus llaman a WdfPdoInitAddDeviceText y WdfPdoInitSetDefaultLocale para proporcionar texto que describa el dispositivo a los usuarios, en varios idiomas.
Creación del objeto de dispositivo.
El último paso para crear un objeto de dispositivo es llamar a WdfDeviceCreate.
Si el controlador encuentra un error al inicializar la estructura WDFDEVICE_INIT que obtuvo de WdfPdoInitAllocate, el controlador debe llamar a WdfDeviceInitFree en lugar de WdfDeviceCreate.
Una vez que el controlador de bus ha creado el objeto de dispositivo, normalmente llama a WdfDeviceSetPnpCapabilities y WdfDeviceSetPowerCapabilities para notificar las funcionalidades de energía y Plug and Play del dispositivo.
Cada controlador de bus también es el controlador de función para el adaptador de bus. Por lo tanto, el controlador también debe proporcionar una función de devolución de llamada EvtDriverDeviceAdd . Esta función de devolución de llamada crea un objeto de dispositivo funcional (FDO) para cada adaptador de bus del sistema. Para obtener más información sobre la creación de FDO, consulte Creación de objetos de dispositivo en un controlador de funciones.