Compatibilidad del controlador de impresora para servicios de directorio de impresoras
Los controladores de impresora no son responsables de publicar una cola de impresión en servicios de directorio. La carpeta de impresión de Microsoft Windows 2000 y versiones posteriores crea un objeto de cola de impresión (llamando a la función SetPrinter del administrador de colas) durante el proceso de instalación de la impresora.
Las propiedades de la cola de impresión se publican para que un usuario pueda buscar impresoras con propiedades concretas mediante la opción Buscar en el menú Inicio de la barra de tareas. La carpeta de impresión publica algunas funcionalidades de impresora que están disponibles en DriverCapabilities, pero no todas. Solo se publican funcionalidades que se consideran útiles para fines de exploración.
Los controladores de impresora pueden agregar o modificar la información de propiedad de un objeto de cola de impresión. Las propiedades de la cola de impresión que se pueden publicar se identifican mediante constantes con prefijo SPLDS_, definidas en winspool.h. Para agregar o modificar las propiedades de la impresora, el controlador debe usar estos identificadores de nombre de propiedad predefinidos.
Para agregar o modificar la información de propiedad de un objeto de cola de impresión, lleve a cabo los pasos siguientes:
Agregue los nombres y valores de propiedad al Registro, en el SPLDS_DRIVER_KEY, mediante una llamada a la función SetPrinterDataEx del administrador de colas.
Llame a la función SetPrinter del administrador de trabajos, con una estructura de entrada de PRINTER_INFO_7 (descrita en la documentación de Windows SDK) y una acción de DSPRINT_UPDATE, para informar al administrador de trabajos de cola de impresión que debe actualizar el objeto de cola de impresión publicado. (Los controladores no deben especificar una acción de DSPRINT_PUBLISH).
Estos pasos deben implementarse dentro de la función DrvPrinterEvent del controlador de impresora, cuando la función recibe un evento PRINTER_EVENT_INITIALIZE.
Si un controlador debe obtener los valores actuales de las propiedades publicadas de una impresora, debe llamar a GetPrinterDataEx o EnumPrinterDataEx para obtener la información del registro, que se mantiene en cola y siempre está actualizada. Una manera alternativa es llamar a GetPrinter para obtener el identificador de objeto de la cola de impresión y, a continuación, llamar a funciones ADSI para obtener los valores de las propiedades publicadas. Esta técnica no se recomienda, ya que consume más recursos y porque es posible que los datos devueltos no siempre estén actualizados.