Modelo de programación DDI de UMDF
Advertencia
UMDF 2 es la versión más reciente de UMDF y sustituye a UMDF 1. Todos los controladores UMDF nuevos deben escribirse con UMDF 2. No se agregan nuevas características a UMDF 1 y hay compatibilidad limitada con UMDF 1 en versiones más recientes de Windows 10. Los controladores universales de Windows deben usar UMDF 2.
Los ejemplos de UMDF 1 archivados se pueden encontrar en la actualización de ejemplos de controladores de Windows 11, versión 22H2 - mayo de 2022.
Para obtener más información, consulta Introducción con UMDF.
El marco y el controlador UMDF se comunican a través de la DDI de UMDF. La DDI de UMDF es similar a la DDI de KMDF, salvo que la DDI de UMDF se basa en COM. Por lo tanto, los escritores de controladores familiarizados con KMDF comprenderán UMDF.
Para cada tipo de objeto de marco, la UMDF define una interfaz a través de la cual se manipulan instancias del objeto. Cada interfaz admite métodos y propiedades. Los métodos definen las acciones que se pueden realizar en nombre del objeto y las propiedades establecidas y recuperan las características del objeto. El controlador implementa algunas interfaces y otras. Las interfaces expuestas por un objeto de marco son del formulario IWDF<,> mientras que las interfaces de devolución de llamada de eventos expuestas por un controlador son de la acción> de objeto I<de forma, donde <el objeto>>< representa una cola, solicitud, etc., y <la acción> indica lo que hace la interfaz. Los métodos de las interfaces de devolución de llamada comienzan por "On".
El controlador UMDF se comunica con los objetos del marco a través de sus métodos y propiedades. El marco se comunica con el controlador a través de notificaciones de eventos, que son funciones de devolución de llamada a las que el marco puede llamar para notificar al controlador sobre eventos específicos. Para registrar las funciones de devolución de llamada, el controlador puede llamar, por ejemplo, a los siguientes métodos de objeto de marco y puede pasar un puntero a la interfaz IUnknown asociada a todas las interfaces de las funciones de devolución de llamada que admite el controlador.
Como ejemplo de la comunicación entre controladores y marcos, considere el objeto de cola de E/S predeterminado de un dispositivo. Un controlador puede llamar a métodos, como IWDFIoQueue::GetState, para recuperar información de estado sobre la cola de E/S o IWDFIoQueue::RetrieveNextRequest para recuperar una solicitud de la cola de E/S. Un controlador también puede solicitar notificaciones en la cola de E/S llamando al método IWDFDevice::CreateIoQueue para registrar interfaces de devolución de llamada, como IQueueCallbackRead e IQueueCallbackWrite. Posteriormente, el marco llama a los métodos de estas interfaces cuando una aplicación envía solicitudes de lectura y escritura.
El marco proporciona cualquier sincronización necesaria entre los métodos de devolución de llamada del controlador. De forma predeterminada, el marco se sincroniza en el nivel de objeto de dispositivo; Es decir, el marco no llama simultáneamente a los métodos de devolución de llamada de eventos en el nivel de objeto de dispositivo o por debajo de él. Un controlador puede invalidar este valor predeterminado solicitando ninguna sincronización. Para obtener más información, vea Especificar un modo de sincronización de devolución de llamada.