Información general sobre el controlador de pantalla indirecta
El modelo de controlador de pantalla indirecta (IDD) proporciona un modelo de controlador en modo de usuario simple para admitir monitores que no están conectados a salidas de pantalla de GPU tradicionales. Algunos escenarios típicos en los que se requiere un IDD incluyen:
- Transmitir la salida de pantalla a través de una red a un cliente remoto (pantalla remota).
- Crear monitores virtuales para aplicaciones como entornos de escritorio virtual (pantallas virtuales).
- Conectar una llave a un equipo a través de USB que tiene un monitor normal (VGA, DVI, HDMI, DP, etc.) conectado.
Implementación de IDD
Un IDD es el controlador UMDF proporcionado por terceros para el dispositivo. Puede desarrollar un IDD mediante la funcionalidad expuesta por IddCx (eXtension de clase de controlador de pantalla indirecta) para interactuar con los subsistemas de gráficos de Windows de las maneras siguientes:
- Cree el adaptador de gráficos que representa el dispositivo de pantalla indirecta.
- Notifique los monitores que se conectan y desconectan del sistema.
- Proporcione descripciones de los monitores conectados.
- Proporcione los modos de pantalla disponibles.
- Admita otras funciones de visualización, como el cursor del mouse de hardware, gamma, las comunicaciones I2C y el contenido protegido.
- Procese las imágenes de escritorio para que se muestren en el monitor.
Dado que un IDD es un controlador UMDF, también es responsable de implementar todas las funciones de UMDF, como comunicaciones de dispositivos, administración de energía, plug and play, etc.
El IDD se ejecuta en la sesión 0 sin ningún componente que se ejecute en la sesión de usuario, por lo que cualquier inestabilidad del controlador no afecta a la estabilidad del sistema en su conjunto.
En el diagrama siguiente se proporciona información general sobre la arquitectura.
Modelo en modo de usuario
El IDD es un modelo solo en modo de usuario sin compatibilidad con componentes en modo kernel. Por lo tanto, el controlador puede usar cualquier API de DirectX para procesar la imagen de escritorio. De hecho, IddCx proporciona la imagen de escritorio para codificar en una superficie de DirectX.
El controlador no debe llamar a las API en modo de usuario que no sean adecuadas para el uso del controlador, como GDI, API de ventanas, OpenGL o Vulkan.
El IDD debe compilarse como un controlador universal de Windows para que se pueda usar en varias plataformas Windows.
En tiempo de compilación:
- El IDD de UMDF declara la versión de IddCx en la que se creó.
- El sistema operativo garantiza que se cargue la versión correcta de IddCx cuando se carga el controlador.
Convenciones de nomenclatura de funciones y devolución de llamada de IddCx
Prefijo | Tipo | Notas |
---|---|---|
EVT_IDD_CX_XXX | Función de devolución de llamada de IDD | Los IDD implementan devoluciones de llamada específicas de IddCx, como EVT_IDD_CX_ADAPTER_COMMIT_MODES, y devoluciones de llamada de WDF pertinentes, como EVT_WDF_DEVICE_D0_EXIT. |
IddCxXxx | Función | Funciones de extensión de clase IddCx proporcionadas por el sistema a las que los IDD pueden llamar; por ejemplo, IddCxAdapterInitAsync. |
PFN_IDDCX_XXX | Punteros a funciones de IddCx | Los IDD no usan estos punteros. En su lugar, los controladores deben usar las funciones IddCxXxx equivalentes. |
Código de ejemplo
Microsoft proporciona una implementación de IDD de ejemplo en GitHub de ejemplos de controladores de Windows. En este ejemplo se muestra cómo conectar un monitor, cómo responder a una configuración de modo y cómo recibir fotogramas.