Impresión de Terminal Server
Importante
A partir del WDK para Windows 11, versión 22H2, ya no se admiten los coins instaladores redistribuibles de WDF. Para obtener información sobre cómo solucionar este cambio, consulte Los co-instaladores redistribuibles de WDF no funcionan en el artículo problemas conocidos de WDK .
Microsoft Windows admite Terminal Services, una tecnología que permite a varios usuarios conectarse a un único sistema de servidor. Este sistema de servidor se denomina terminal server. Para obtener una explicación detallada de Terminal Services, consulte la documentación de Windows SDK.
Si está desarrollando un minidriver de impresora o controlador para Windows, no tiene que hacer nada especial para admitir impresoras conectadas a servidores terminales. Sin embargo, debes seguir todas las directrices de diseño, implementación e instalación especificadas en el Kit de controladores de Windows (WDK). En concreto, debe usar las reglas siguientes:
Si es posible, admita la impresora proporcionando un minidriver que funcione con uno de los siguientes controladores suministrados por Microsoft:
Controlador de impresora De Microsoft XPS
Controlador de impresora universal de Microsoft
Debe diseñar un archivo DLL de gráficos de impresora para que se ejecute en modo de usuario. Consulta Elegir el modo de usuario o el modo kernel.
Si el dispositivo debe ser compatible con un controlador personalizado, el controlador debe cumplir exactamente la arquitectura del controlador de impresora de Microsoft. Concretamente:
Debe crear un archivo DLL de interfaz de impresora.
Debe crear un archivo DLL de gráficos de impresora. Este archivo DLL se puede ejecutar en modo de usuario o en modo kernel, pero se prefiere el modo de usuario.
Si crea código en modo kernel, debe probar el código mediante el Comprobador de controladores.
Debe proporcionar un procedimiento de instalación basado en los archivos INF de instalación, tal y como se describe en Instalación y configuración de controladores de impresora.
Todo el código de controlador personalizado debe ser reentrant. El código en modo de usuario debe emplear objetos de sección críticos (descritos en la documentación de Windows SDK). El código en modo kernel debe usar semáforos (consulte EngCreateSemaphore y funciones relacionadas).
Los controladores de impresora y los componentes de cola personalizados solo deben tener acceso al Registro a través de interfaces proporcionadas específicamente para estos controladores y componentes de cola, como se describe en las secciones adecuadas del WDK.
Consideraciones para la instalación
Normalmente, todo lo que debe hacer para la instalación es proporcionar un archivo INF que el instalador de clase de impresora de Microsoft puede leer cuando un usuario invoca el Asistente para agregar impresoras . A veces, también se necesita código de instalación personalizado (un instalador de coinsertor o un instalador de clase). Si debe crear código de instalación personalizado, recuerde lo siguiente:
El usuario o el código de instalación deben poner el servidor de terminal en modo de instalación. (Para obtener más información, consulte la documentación de Microsoft Windows SDK).
No intente reemplazar los archivos del sistema. La protección de archivos de Windows prohíbe el reemplazo de archivos del sistema.
Evite requerir reinicios del sistema tanto como sea posible. Use estas directrices:
No reemplace los archivos de controlador que no han cambiado. Por ejemplo, los archivos compartidos por varios dispositivos no deben actualizarse si la versión más actual ya está instalada.
Si se debe reemplazar un archivo, el código de instalación debe realizar pasos para descargar la versión anterior y, a continuación, cargar la nueva versión (por ejemplo, deteniendo el servicio de controladores, reemplazando el archivo y reiniciando el servicio).
Requerir que un usuario cierre la sesión y, a continuación, vuelva a iniciar sesión, es preferible requerir un reinicio del sistema.
Para obtener más información sobre los instaladores de co-instaladores y los instaladores de clase, vea Escribir instaladores de clase y co-instaladores.
Antes de escribir código de instalación personalizado, es importante leer las directrices de programación de Terminal Services proporcionadas en la documentación de Windows SDK.
Consideraciones sobre la interfaz de usuario
El código de instalación personalizado que ejecuta un usuario puede mostrar una interfaz de usuario.
Casi todo el código del controlador de impresora se ejecuta en el contexto de ejecución del administrador de trabajos y, por tanto, no puede mostrar una interfaz de usuario. Las interfaces de usuario solo se pueden mostrar mediante archivos DLL de interfaz de impresora y solo desde dentro de las funciones siguientes:
Las funciones DrvDevicePropertySheets y DrvDocumentPropertySheets , que crean páginas de propiedades.
La función DrvPrinterEvent , que recibe códigos de evento que identifican eventos de impresora. La función solo puede mostrar una interfaz de usuario para los códigos de evento PRINTER_EVENT_ADD_CONNECTION y PRINTER_EVENT_DELETE_CONNECTION.
El resto del código del controlador de impresora se ejecuta en el contexto del administrador de trabajos de impresión. Desde este contexto, se permite llamar a MessageBox o MessageBoxEx , pero debe establecer MB_SERVICE_NOTIFICATION. Estas funciones se describen en la documentación de Windows SDK.