Partager via


Télécharger des fichiers spécifiques à la file d’attente

Si un utilisateur décide de créer une connexion d’imprimante à partir d’un système client vers un serveur d’impression, et si une application d’installation a créé les entrées de Registre décrites dans Prise en charge du point et de l’impression pendant l’installation de l’imprimante, les événements suivants se produisent :

  1. L’application utilisateur appelle AddPrinterConnection.

  2. Le fournisseur d’impression distant (Win32spl.dll) du client crée une connexion au serveur.

  3. Le spouleur du serveur envoie des fichiers de pilote au client.

  4. Le Win32spl.dll du client appelle EnumPrinterKey et EnumPrinterDataEx sur le serveur pour copier les entrées de Registre de l’imprimante.

  5. Comme le spouleur du serveur énumère les valeurs de Registre pendant le traitement d’EnumPrinterDataEx, il effectue les opérations suivantes chaque fois qu’il rencontre une sous-clé de la clé CopyFiles de l’imprimante, telle que CopyFiles\ICM :

    • Charge la DLL Point et Print, si elle est spécifiée, et appelle sa fonction GenerateCopyFilePaths , qui peut modifier les chemins d’accès source et/ou de destination.

    • Crée des clés SourceDir et TargetDir , basées sur les chemins d’accès source et de destination retournés par GenerateCopyFilePaths, et les retourne au spouleur client en tant que données EnumPrinterDataEx. (Ces clés n’existent pas vraiment sur le serveur.)

  6. Le Win32spl.dll du client met en cache les clés d’imprimante reçues en réponse aux appels EnumPrinterData et EnumPrinterDataEx.

  7. Pour chaque sous-clé de la clé CopyFiles de l’imprimante, telle que CopyFiles\ICM, le Win32spl.dll du client effectue les opérations suivantes :

    • Charge la DLL de point et d’impression locale, le cas échéant, et appelle sa fonction GenerateCopyFilePaths , qui peut modifier les chemins d’accès source et/ou de destination. (Les entrées sont les clés SourceDir et TargetDir reçues du serveur.)

    • Télécharge tous les fichiers associés à la clé Fichiers à partir du serveur.

    • Journalise un événement, indiquant que les fichiers Point et Print ont été téléchargés.

    • Appelle la fonction SpoolerCopyFileEvent de la DLL Point et Print, si une DLL est fournie, en spécifiant un événement COPYFILE_EVENT_FILES_CHANGED.

  8. Le spouleur client appelle la fonction DrvPrinterEvent du pilote, en spécifiant un événement PRINTER_EVENT_CACHE_REFRESH.

  9. Le spouleur client appelle à nouveau la fonction DrvPrinterEvent du pilote, en spécifiant un événement PRINTER_EVENT_ADD_CONNECTION.

  10. Si une DLL Point et Print est fournie, le spouleur client appelle sa fonction SpoolerCopyFileEvent , en spécifiant un événement COPYFILE_EVENT_ADD_PRINTER_CONNECTION.

Exemple de connexion

Par exemple, supposons qu’une application d’installation a défini les entrées de Registre de serveur décrites dans l’exemple d’installation. En outre, supposons que le serveur est nommé NTPRINT et que le client est nommé MyClient.

Pour se connecter à la file d’attente d’impression nommée HpColor sur NTPRINT, une application utilisateur sur MyClient appelle AddPrinterConnection comme suit :

AddPrinterConnection("\\NTPRINT\HpColor")

Sur le serveur, le spouleur charge Mscms.dll et appelle GenerateCopyFilePaths comme suit :

GenerateCopyFilePaths(
    "HpColor",
    "Color",
    &SplclientInfo1,
    1,
    \\NTPRINT\PRINT$\Color,
    &dwSourceDirSize,
    "Color",
    &dwDestDirSize,
    COPYFILE_FLAG_SERVER_SPOOLER)

Le module Mscms.dll de Microsoft ICM ne modifie pas les chemins d’accès source ou de destination. Il retourne donc simplement ERROR_SUCCESS.

Le spouleur de serveur retourne les clés suivantes à MyClient :

SourceDir: \\NTPRINT\PRINT$\Color
TargetDir: "Color"

Sur le client, la valeur de TargetDir est étendue à C:\Winnt\System32\Spool\Drivers\Color.

Le spouleur sur MyClient effectue les opérations suivantes :

  • Télécharge Mscms.dll et appelle GenerateCopyFilePaths comme suit :

    GenerateCopyFilePaths(
        "\\NTPRINT\HpColor",
        "Color",
        &SplclientInfo1,
        1,
        \\NTPRINT\PRINT$\Color,
        &dwSourceDirSize,
        "C:\Winnt\System32\Spool\Drivers\Color",
        &dwDestDirSize,
        COPYFILE_FLAG_CLIENT_SPOOLER)
    

    Le module Mscms.dll de Microsoft ICM ne modifie pas les chemins d’accès source ou de destination. Il retourne donc simplement ERROR_SUCCESS.

  • Télécharge Hpclrlsr.icm dans C:\Winnt\System32\Spool\Drivers\Color.

  • Journalise un événement, indiquant que les fichiers Point et Print ont été téléchargés.

  • Appelle la fonction SpoolerCopyFileEvent dans Mscms.dll, en spécifiant un événement COPYFILE_EVENT_FILES_CHANGED.

  • Appelle la fonction DrvPrinterEvent du pilote d’imprimante, en spécifiant un événement PRINTER_EVENT_CACHE_REFRESH.

  • Appelle à nouveau la fonction DrvPrinterEvent du pilote d’imprimante, en spécifiant un événement PRINTER_EVENT_ADD_CONNECTION.

  • Appelle la fonction SpoolerCopyFileEvent dans Mscms.dll, en spécifiant un événement COPYFILE_EVENT_ADD_PRINTER_CONNECTION.