User-Mode Driver Framework ( UMDF ) es una plataforma de desarrollo de controladores de dispositivos que se introdujo por primera vez con el sistema operativo Windows Vista de Microsoft y también está disponible para Windows XP . Facilita la creación de controladores para ciertas clases de dispositivos. [1]
Los controladores de dispositivos estándar pueden ser difíciles de escribir porque deben manejar una amplia gama de estados del sistema y del dispositivo, particularmente en un entorno de software multiproceso. Los controladores de dispositivos mal escritos pueden causar daños graves a un sistema (por ejemplo, BSoD o corrupción de datos) ya que todos los controladores estándar tienen altos privilegios al acceder al núcleo directamente. El User-Mode Driver Framework aísla al núcleo de los problemas del acceso directo al controlador, proporcionando en su lugar una nueva clase de controlador con una interfaz de programación de aplicaciones dedicada a nivel de usuario de interrupciones y administración de memoria. Si ocurre un error, el nuevo marco permite un reinicio inmediato del controlador sin afectar el sistema. Esto es particularmente útil para dispositivos que están conectados intermitentemente al sistema o que admiten intercambio en caliente a través de una tecnología de bus como USB o FireWire .
Según Microsoft, los controladores UMDF son más simples de escribir y depurar que los controladores en modo kernel. [2] Sin embargo, UMDF no se utilizaría para dispositivos con alto nivel de rendimiento o con alto estado .
La primera versión de UMDF se envió como parte de la versión 10 de Windows Media Player el 12 de octubre de 2004. Con el nombre en código "Crescent", fue diseñada para admitir el controlador del Protocolo de transferencia de medios y no se proporcionaron interfaces públicas ni documentación para ella. Más tarde, Microsoft decidió convertir UMDF en una plataforma de desarrollo de controladores de dispositivos. [3]
Un controlador UMDF es una DLL basada en el Modelo de objetos componentes (COM) de Microsoft. Sin embargo, UMDF no utiliza COM para cargar, descargar o controlar la concurrencia ; solo utiliza COM como patrón de programación , por ejemplo, aprovechando la interfaz IUnknown de COM . Al iniciarse, UMDF llama a DllGetClassObject para obtener un puntero a una interfaz IClassFactory en el controlador y luego utiliza el método CreateInstance de la interfaz IClassFactory para crear una instancia del objeto de devolución de llamada del controlador.
El objeto del controlador es una instancia de la interfaz IWDFDriver proporcionada por el marco . El controlador proporciona un conjunto de devoluciones de llamadas a través de la interfaz COM IDriverEntry , que es el principal punto de entrada para la personalización del controlador.