Descarga de archivos específicos de la cola
Si un usuario decide crear una conexión de impresora desde un sistema cliente a un servidor de impresión y si una aplicación de instalación ha creado las entradas del Registro descritas en Punto auxiliar e Impresión durante las instalaciones de impresora, se producen los siguientes eventos:
La aplicación de usuario llama a AddPrinterConnection.
El proveedor de impresión remoto (Win32spl.dll) del cliente crea una conexión con el servidor.
El administrador de colas del servidor envía archivos de controlador al cliente.
El Win32spl.dll del cliente llama a EnumPrinterKey y EnumPrinterDataEx en el servidor para copiar las entradas del Registro de la impresora.
Como el administrador de trabajos de cola del servidor enumera los valores del Registro durante el procesamiento de EnumPrinterDataEx, realiza las siguientes operaciones cada vez que encuentra una subclave de la clave CopyFiles de la impresora, como CopyFiles\ICM:
Carga el archivo DLL de punto e impresión, si se especifica, y llama a su función GenerateCopyFilePaths , que puede modificar las rutas de acceso de origen o destino.
Crea claves SourceDir y TargetDir , basadas en las rutas de acceso de origen y destino devueltas por GenerateCopyFilePaths, y las devuelve al administrador de colas de cliente como datos EnumPrinterDataEx. (Estas claves no existen realmente en el servidor).
El Win32spl.dll del cliente almacena en caché las claves de impresora recibidas en respuesta a las llamadas a EnumPrinterData y EnumPrinterDataEx.
Para cada subclave de la clave CopyFiles de la impresora, como CopyFiles\ICM, el Win32spl.dll del cliente realiza las siguientes operaciones:
Carga el archivo DLL de punto e impresión local, si se proporciona uno, y llama a su función GenerateCopyFilePaths , que puede modificar las rutas de acceso de origen o destino. (Las entradas son las claves SourceDir y TargetDir recibidas del servidor).
Descarga todos los archivos asociados a la clave Files del servidor.
Registra un evento, que indica que se descargaron los archivos Point e Print.
Llama a la función SpoolerCopyFileEvent del archivo DLL de punto e impresión, si se proporciona un archivo DLL, especificando un evento de COPYFILE_EVENT_FILES_CHANGED.
El administrador de colas de cliente llama a la función DrvPrinterEvent del controlador, especificando un evento de PRINTER_EVENT_CACHE_REFRESH.
El administrador de colas de cliente llama de nuevo a la función DrvPrinterEvent del controlador, especificando un evento de PRINTER_EVENT_ADD_CONNECTION.
Si se proporciona un archivo DLL de punto e impresión, el administrador de colas de cliente llama a su función SpoolerCopyFileEvent , especificando un evento de COPYFILE_EVENT_ADD_PRINTER_CONNECTION.
Ejemplo de conexión
Por ejemplo, supongamos que una aplicación de instalación ha definido las entradas del Registro del servidor descritas en el ejemplo de instalación. Además, supongamos que el servidor se denomina NTPRINT y que el cliente se denomina MyClient.
Para conectarse a la cola de impresión denominada HpColor en NTPRINT, una aplicación de usuario en MyClient llama a AddPrinterConnection de la siguiente manera:
AddPrinterConnection("\\NTPRINT\HpColor")
En el servidor, el administrador de colas carga Mscms.dll y llama a GenerateCopyFilePaths de la siguiente manera:
GenerateCopyFilePaths(
"HpColor",
"Color",
&SplclientInfo1,
1,
\\NTPRINT\PRINT$\Color,
&dwSourceDirSize,
"Color",
&dwDestDirSize,
COPYFILE_FLAG_SERVER_SPOOLER)
El módulo Mscms.dll de Microsoft ICM no modifica las rutas de acceso de origen o destino, por lo que simplemente devuelve ERROR_SUCCESS.
El administrador de colas de servidor devuelve las siguientes claves a MyClient:
SourceDir: \\NTPRINT\PRINT$\Color
TargetDir: "Color"
En el cliente, el valor de TargetDir se expande a C:\Winnt\System32\Spool\Drivers\Color.
El administrador de colas de MyClient realiza las siguientes operaciones:
Descarga Mscms.dll y llama a GenerateCopyFilePaths de la siguiente manera:
GenerateCopyFilePaths( "\\NTPRINT\HpColor", "Color", &SplclientInfo1, 1, \\NTPRINT\PRINT$\Color, &dwSourceDirSize, "C:\Winnt\System32\Spool\Drivers\Color", &dwDestDirSize, COPYFILE_FLAG_CLIENT_SPOOLER)
El módulo Mscms.dll de Microsoft ICM no modifica las rutas de acceso de origen o destino, por lo que simplemente devuelve ERROR_SUCCESS.
Descarga Hpclrlsr.icm en C:\Winnt\System32\Spool\Drivers\Color.
Registra un evento, que indica que se descargaron los archivos Point e Print.
Llama a la función SpoolerCopyFileEvent en Mscms.dll, especificando un evento de COPYFILE_EVENT_FILES_CHANGED.
Llama a la función DrvPrinterEvent del controlador de impresora, especificando un evento de PRINTER_EVENT_CACHE_REFRESH.
Llama de nuevo a la función DrvPrinterEvent del controlador de impresora, especificando un evento de PRINTER_EVENT_ADD_CONNECTION.
Llama a la función SpoolerCopyFileEvent en Mscms.dll, especificando un evento de COPYFILE_EVENT_ADD_PRINTER_CONNECTION.