Control de versiones del controlador de impresión
Importante
La plataforma de impresión moderna es el medio preferido de Windows para comunicarse con impresoras. Se recomienda usar el controlador de clase de bandeja de entrada IPP de Microsoft, junto con aplicaciones de soporte técnico de impresión (PSA), para personalizar la experiencia de impresión en Windows 10 y 11 para el desarrollo de dispositivos de impresora.
Para obtener más información, consulte Plataforma de impresión moderna y la Guía de diseño de aplicaciones para compatibilidad con impresión.
Los minicontroladores de impresoras basados en Unidrv y Pscript5, así como los controladores de impresora monolíticos (controladores desarrollados completamente por un IHV), deben usar el control de versiones del controlador de impresora en Microsoft Windows XP y versiones posteriores. El administrador de trabajos de impresión de Windows XP y versiones posteriores usa la información de control de versiones para permitirle seleccionar los archivos de controlador correctos durante la instalación de una nueva versión del sistema operativo o service pack, o cuando se establece una nueva conexión de punto e impresión.
El control de versiones del controlador de impresora no se admite en Windows 2000 ni en versiones anteriores del sistema operativo basado en NT. En esas versiones del sistema operativo, el administrador de trabajos de impresión basa su decisión sobre si reemplazar un archivo de controlador determinado únicamente en la marca de tiempo del archivo. Un archivo más reciente siempre se elige en preferencia a un archivo anterior, aunque el archivo con la fecha más reciente podría tener el conjunto de características anterior. Dado que es tan fácil cambiar la fecha de un archivo, esto puede impedir que el administrador de trabajos de impresión realice la elección correcta en los archivos que elija.
Para asegurarse de que se instalan las versiones correctas de los archivos de controlador, basta con agregar números de versión a esos archivos. Para ello, puede realizar modificaciones menores en pdrvver.h (que se incluye con el Kit para controladores de Windows) e incluir ese archivo en el archivo de recursos DLL del controlador de impresora. La configuración de un controlador monolítico, mediante la instalación basada en INF, también se beneficia del control de versiones del controlador, ya que un archivo DLL más reciente no se sobrescribe en un archivo DLL anterior, aunque el archivo DLL anterior pueda tener una marca de tiempo más reciente.
El encabezado pdrvver.h consta casi exclusivamente de directivas de #define de preprocesador. Las dos primeras, VER_FILETYPE y VER_FILESUBTYPE, que no deben modificarse, indican que el archivo es un archivo de recursos para un controlador, específicamente un controlador de impresora. Las constantes VFT_DRV y VFT2_DRV_VERSIONED_PRINTER, que aparecen con VER_FILETYPE y VER_FILESUBTYPE, se describen en la estructura VS_FIXEDFILEINFO. Las que necesita cambiar son las cuatro últimas, que son las siguientes:
VER_FILEVERSION
Esta constante debe establecerse en una secuencia de cuatro valores WORD delimitados por comas. La tercera y cuarta WORD se usan para establecer las WORD de nivel superior e inferior, respectivamente, del miembro dwFileVersionLS de la estructura VS_FIXEDFILEINFO.
A continuación se describe el significado de cada una de las cuatro WORD.
Primer WORD
Reservado. Este valor debe establecerse en 0.
Segunda WORD
Representa la versión principal del controlador. Para los controladores en modo de usuario, establézcala en 0x0003. Para los controladores en modo kernel, establézcala en 0x0002.
Tercera WORD
Representa el número del conjunto de características con un byte alto y bajo.
Byte alto
Representa una versión principal del conjunto de características. Se supone que una versión más reciente tiene un superconjunto de la funcionalidad de la versión anterior. Incremente este valor con cada nueva versión principal.
Para minicontroladores basados en Unidrv y Pscript5 que se ejecutan en Windows XP y versiones posteriores, incluidas las actualizaciones de Windows y Service Packs, se debe establecer en 0x05.
Byte bajo
Representa una versión secundaria del conjunto de características: una nueva versión de la misma base de código o arquitectura. Incremente este valor con cada nueva versión secundaria.
Para minicontroladores basados en Unidrv y Pscript5 que se ejecutan en las siguientes versiones del sistema operativo, este byte debe establecerse como se muestra:
Windows XP: establézcalo en 0x01.
Primer Service Pack de Windows XP: establézcalo en 0x01. (El número de corrección de errores en particular aparece en la cuarta WORD).
Primera actualización de Windows: establézcalo en 0x02.
Cuarta WORD
Representa una corrección de errores o una versión de Service Pack. Incremente este valor en la versión de un nuevo binario, cuando se trata de una colección de correcciones de errores o un Service Pack.
Este es un ejemplo de controlador monolítico:
#define VER_FILEVERSION 0, 3, 0X0100, 0X0002
En orden, de izquierda a derecha, el primer valor de WORD es cero, que debe ser. El valor de la segunda WORD es tres, lo que indica que se trata de un controlador en modo de usuario. En la tercera WORD, el valor de byte alto (0X01) indica que esta es la primera versión principal y el byte bajo de la misma WORD (0x00) indica que, hasta ahora, no hay ninguna versión secundaria. La cuarta WORD (0x0002) indica que se trata de la segunda corrección de errores o la versión del Service Pack. (No se distingue entre estos tipos de versiones).
Estos son algunos ejemplos de minicontrolador basados en Unidrv-/Pscript5:
#define VER_FILEVERSION 0, 3, 0X0501, 0X0001
En orden, de izquierda a derecha, el primer valor de WORD es cero, como antes. El valor de la segunda WORD es tres, lo que indica que se trata de un controlador en modo de usuario. En la tercera WORD, los valores de byte alto y de byte bajo (0X05 y 0x01, respectivamente) indican que se trata de una versión para Windows XP. La cuarta WORD (0x0001) indica que se trata de la primera corrección de errores o la versión del Service Pack.
#define VER_FILEVERSION 0, 3, 0X0502, 0X0000
Como antes, la primera WORD es cero y la segunda indica que se trata de un minicontrolador en modo de usuario. La tercera WORD (0x0502) indica que esta es la primera versión de Windows Update publicada después de Windows XP. La cuarta WORD (0x0000) indica que no es una corrección de errores ni una versión del Service Pack.
VER_FILEDESCRIPTION_STR
Esta constante debe establecerse en un nombre que identifique al controlador, como en el ejemplo siguiente.
#define VER_FILEDESCRIPTION_STR "Sample Printer Driver Resource DLL"
VER_INTERNALNAME_STR
Establezca esta constante en un nombre que especifique el nombre interno del archivo (sin incluir la ruta de acceso), como en el ejemplo siguiente.
#define VER_INTERNALNAME_STR "SAMPLERES.DLL"
VER_ORIGINALFILENAME_STR
Establezca esta constante en un nombre que especifique el nombre original del archivo (sin incluir la ruta de acceso), como en el ejemplo siguiente.
#define VER_ORIGINALFILENAME_STR "SAMPLERES.DLL"