Introducción a las clases de interfaz de dispositivo

Cualquier controlador de un dispositivo físico, lógico o virtual al que el código en modo de usuario pueda dirigir las solicitudes de E/S debe proporcionar un nombre para sus clientes en modo de usuario. Con el nombre, una aplicación en modo de usuario (u otro componente del sistema) identifica el dispositivo desde el que solicita E/S.

En Windows NT 4.0 y versiones anteriores del sistema operativo basado en NT, los controladores denominan sus objetos de dispositivo y, a continuación, configuran vínculos simbólicos en el Registro entre estos nombres y un nombre lógico Win32 visible para el usuario.

A partir de Windows 2000, los controladores no asignan nombres a los objetos de dispositivo. En su lugar, usan interfaces de dispositivo que se agrupan por clases de interfaz de dispositivo. Una clase de interfaz de dispositivo es una manera de exportar la funcionalidad del dispositivo y del controlador a otros componentes del sistema, incluidos otros controladores, así como aplicaciones en modo de usuario. Un controlador puede registrar y habilitar una instancia de interfaz de dispositivo de la clase de interfaz de dispositivo para cada objeto de dispositivo al que se puedan enviar solicitudes de E/S en modo de usuario. Cada clase de interfaz de dispositivo debe representar una funcionalidad conceptual que cualquier interfaz de dispositivo de esa clase debe admitir o representar como un contrato de E/S determinado.

Cada clase de interfaz de dispositivo está asociada a un GUID. El sistema define GUID para las clases comunes de interfaz de dispositivo en archivos de encabezado específicos del dispositivo. Los proveedores pueden crear clases de interfaz de dispositivo adicionales.

Por ejemplo, tres tipos diferentes de dispositivos de mouse podrían registrar interfaces de dispositivo que son miembros de la misma clase de interfaz de dispositivo, incluso si uno se conecta a través de un puerto USB, un segundo a través de un puerto serie y el tercero a través de un puerto infrarrojo. Cada controlador registra su dispositivo como miembro de la clase de interfaz GUID_DEVINTERFACE_MOUSE. Este GUID se define en el archivo de encabezado Ntddmou.h.

Los controladores pueden registrar y habilitar interfaces de dispositivo para un dispositivo que controlan para tantas clases de interfaz de dispositivo para las que el dispositivo y el controlador admiten la funcionalidad. Por ejemplo, un controlador para un disco que se puede montar debe registrarse para su clase de interfaz de disco (GUID_DEVINTERFACE_DISK) y la clase de dispositivo montable (MOUNTDEV_MOUNTED_DEVICE_GUID).

Cuando un controlador registra una instancia de interfaz de dispositivo de una clase de interfaz de dispositivo, el administrador de E/S asocia el dispositivo y el GUID de clase de interfaz de dispositivo con un nombre de vínculo simbólico. El controlador debe habilitar la interfaz del dispositivo para que ese vínculo simbólico se pueda usar para que un controlador o una aplicación envíen E/S. El registro del nombre del vínculo persiste en los inicios del sistema, pero el controlador debe habilitar la interfaz del dispositivo en cada enumeración del dispositivo. Una aplicación que usa una clase de interfaz de dispositivo determinada puede consultar las instancias de las interfaces de dispositivo de esa clase y recibir una lista de nombres de vínculo simbólicos que representan los dispositivos que admiten la interfaz. Después, la aplicación puede usar el nombre del vínculo simbólico como destino para las solicitudes de E/S.

No confunda las interfaces de dispositivo con las interfaces que los controladores pueden exportar en respuesta a una solicitud de IRP_MN_QUERY_INTERFACE . Ese IRP se usa para pasar puntos de entrada rutinarios entre controladores en modo kernel.