Crear objetos de dispositivo en un controlador de función
Cada controlador de función crea un objeto de dispositivo de marco para cada uno de sus dispositivos compatibles que existen en el sistema. Dado que estos objetos de dispositivo se crean mediante controladores de función, se denominan objetos de dispositivo funcionales (FDO). Cada FDO es una representación del controlador de función de un dispositivo.
Un controlador de función debe crear un objeto de dispositivo de marco cada vez que el marco llame a la función de devolución de llamada EvtDriverDeviceAdd del controlador. El marco llama a esta función de devolución de llamada para informar al controlador de que existe uno de sus dispositivos compatibles en el sistema.
La función de devolución de llamada EvtDriverDeviceAdd del controlador recibe un puntero a una estructura de WDFDEVICE_INIT . El controlador 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 función pueden llamar a métodos de inicialización de FDO de marco.
La creación de un objeto de dispositivo de marco en un controlador de función suele incluir los pasos siguientes:
Registro de funciones de devolución de llamada de PnP, energía y directiva de energía.
La mayoría de los controladores de función llaman a WdfDeviceInitSetPnpPowerEventCallbacks para registrar las funciones de devolución de llamada de PnP y power. Para obtener más información sobre estas funciones de devolución de llamada, consulte Compatibilidad con PnP y administración de energía en controladores de función.
Si el dispositivo admite inactividad de bajo consumo o tiene funcionalidades de reactivación, el controlador de función normalmente también llama a WdfDeviceInitSetPowerPolicyEventCallbacks para registrar las funciones de devolución de llamada de la directiva de energía. Para obtener más información sobre estas funciones de devolución de llamada, consulte Propiedad de Power Policy.
Registrar funciones de devolución de llamada específicas del controlador de función.
Algunos controladores de función llaman a WdfFdoInitSetEventCallbacks, si deben participar en la especificación de los recursos de hardware del sistema que requiere un dispositivo. Para obtener más información sobre los recursos de hardware, consulte Recursos de hardware para controladores de Framework-Based.
Registro de funciones de devolución de llamada de eventos de archivo.
Si el controlador debe responder cuando una aplicación se abre o cierra un archivo en un dispositivo, el controlador debe llamar a WdfDeviceInitSetFileObjectConfig para registrar funciones de devolución de llamada para el objeto de archivo de marco. Para obtener más información, vea Uso de objetos de archivo de marco.
Establecer atributos de solicitud de E/S.
Si el controlador recibirá solicitudes de E/S de objetos de cola de marco, el controlador puede llamar a WdfDeviceInitSetRequestAttributes para configurar la memoria de contexto que el marco asignará a los objetos de solicitud de un dispositivo. Para obtener más información, vea Uso del contexto de objeto de solicitud.
Establecimiento de las características del dispositivo.
Normalmente, un controlador de función llama a algunos de los métodos siguientes para especificar las características de un dispositivo:
- WdfDeviceInitSetDeviceType, para identificar el tipo de hardware que admite el controlador.
- WdfDeviceInitSetIoType, para identificar un método para acceder a los búferes de datos, si el controlador controla las solicitudes de E/S de las aplicaciones.
- WdfDeviceInitSetCharacteristics, para establecer características del dispositivo, como si el dispositivo es de solo lectura o admite medios extraíbles.
- WdfDeviceInitSetExclusive, si el dispositivo requiere acceso exclusivo por una aplicación a la vez.
- WdfDeviceInitSetPowerInrush, si el dispositivo requiere un pincel de corriente cuando pasa de un estado de baja potencia a su estado de funcionamiento (D0).
- WdfDeviceInitSetPowerPageable o WdfDeviceInitSetPowerNotPageable, para indicar si el controlador debe tener acceso a datos paginables mientras el sistema realiza la transición entre un estado de suspensión y el estado de trabajo (S0).
- WdfDeviceInitAssignName, para asignar un nombre al objeto de dispositivo.
- WdfDeviceInitAssignSDDLString, para asignar un descriptor de seguridad al objeto de dispositivo.
- WdfDeviceInitSetDeviceClass, para identificar la clase de instalación del dispositivo.
Obtención de propiedades del dispositivo.
A veces, los controladores de función deben obtener información sobre las propiedades del dispositivo que ha establecido el controlador para el bus del dispositivo u otro controlador de nivel inferior. El controlador puede llamar a WdfFdoInitQueryProperty o WdfFdoInitAllocAndQueryProperty para obtener esta información. Los nuevos controladores destinados a Windows 8.1 y versiones posteriores pueden llamar a WdfFdoInitQueryPropertyEx y WdfFdoInitAllocAndQueryPropertyEx.
Acceso a la clave del Registro del dispositivo.
Algunos controladores de función deben obtener información sobre el dispositivo o controlador que otro controlador, un usuario o un paquete de instalación ha colocado en el registro. El controlador puede llamar a WdfFdoInitOpenRegistryKey para abrir la clave del Registro del dispositivo o del controlador. Para obtener más información, vea Uso del Registro en controladores de Framework-Based.
Crear una configuración de lista secundaria predeterminada que se usará para la enumeración dinámica.
Si va a escribir un controlador de función para un bus y el controlador realizará una enumeración dinámica de dispositivos secundarios conectados al bus, el controlador debe llamar a WdfFdoInitSetDefaultChildListConfig. Para obtener más información, vea Enumerar los dispositivos en un bus.
Creación del objeto de dispositivo.
El último paso para crear un objeto de dispositivo es llamar a WdfDeviceCreate.