Condividi tramite


Scaricare file specifici della coda

Se un utente decide di creare una connessione stampante da un sistema client a un server di stampa e se un'applicazione di installazione ha creato le voci del Registro di sistema descritte in Supporto punto e stampa durante le installazioni della stampante, si verificano gli eventi seguenti:

  1. L'applicazione utente chiama AddPrinterConnection.

  2. Il provider di stampa remota del client (Win32spl.dll) crea una connessione al server.

  3. Lo spooler del server invia i file del driver al client.

  4. Il client Win32spl.dll chiama EnumPrinterKey e EnumPrinterDataEx nel server per copiare le voci del Registro di sistema della stampante.

  5. Poiché lo spooler del server enumera i valori del Registro di sistema durante l'elaborazione di EnumPrinterDataEx, esegue le operazioni seguenti ogni volta che rileva una sottochiave della chiave CopyFiles della stampante, ad esempio CopyFiles\ICM:

    • Carica la DLL Point and Print, se specificata e chiama la funzione GenerateCopyFilePaths , che può modificare i percorsi di origine e/o di destinazione.

    • Crea chiavi SourceDir e TargetDir, in base ai percorsi di origine e di destinazione restituiti da GenerateCopyFilePaths e li restituisce al client spooler come dati EnumPrinterDataEx. Queste chiavi non esistono realmente nel server.

  6. Il client Win32spl.dll memorizza nella cache le chiavi della stampante ricevute in risposta alle chiamate EnumPrinterData e EnumPrinterDataEx.

  7. Per ogni sottochiave della chiave CopyFiles della stampante, ad esempio CopyFiles\ICM, il client Win32spl.dll esegue le operazioni seguenti:

    • Carica la DLL punto e stampa locale, se disponibile e chiama la funzione GenerateCopyFilePaths , che può modificare i percorsi di origine e/o di destinazione. Gli input sono le chiavi SourceDir e TargetDir ricevute dal server.

    • Scarica tutti i file associati alla chiave File dal server.

    • Registra un evento, che indica che i file point e print sono stati scaricati.

    • Chiama la funzione SpoolerCopyFileEvent di Point and Print DLL, se viene fornita una DLL, specificando un evento COPYFILE_EVENT_FILES_CHANGED.

  8. Il client spooler chiama la funzione DrvPrinterEvent del driver, specificando un evento PRINTER_EVENT_CACHE_REFRESH.

  9. Il client spooler chiama di nuovo la funzione DrvPrinterEvent del driver, specificando un evento PRINTER_EVENT_ADD_CONNECTION.

  10. Se viene fornita una DLL Point and Print, il client spooler chiama la funzione SpoolerCopyFileEvent , specificando un evento COPYFILE_EVENT_ADD_PRINTER_CONNECTION.

Esempio di connessione

Si supponga, ad esempio, che un'applicazione di installazione abbia definito le voci del Registro di sistema del server descritte nell'esempio di installazione. Si supponga inoltre che il server sia denominato NTPRINT e che il client sia denominato MyClient.

Per connettersi alla coda di stampa denominata HpColor in NTPRINT, un'applicazione utente in MyClient chiama AddPrinterConnection come indicato di seguito:

AddPrinterConnection("\\NTPRINT\HpColor")

Nel server il spooler carica Mscms.dll e chiama GenerateCopyFilePaths come indicato di seguito:

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

Il modulo di Mscms.dll microsoft ICM non modifica i percorsi di origine o di destinazione, quindi restituisce solo ERROR_SUCCESS.

Lo spooler del server restituisce le chiavi seguenti a MyClient:

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

Nel client il valore di TargetDir si espande su C:\Winnt\System32\Spool\Drivers\Color.

Il spooler in MyClient esegue le operazioni seguenti:

  • Scarica Mscms.dll e chiama GenerateCopyFilePaths come indicato di seguito:

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

    Il modulo di Mscms.dll microsoft ICM non modifica i percorsi di origine o di destinazione, quindi restituisce solo ERROR_SUCCESS.

  • Scarica Hpclrlsr.icm in C:\Winnt\System32\Spool\Drivers\Color.

  • Registra un evento, che indica che i file point e print sono stati scaricati.

  • Chiama la funzione SpoolerCopyFileEvent in Mscms.dll, specificando un evento COPYFILE_EVENT_FILES_CHANGED.

  • Chiama la funzione DrvPrinterEvent del driver della stampante, specificando un evento PRINTER_EVENT_CACHE_REFRESH.

  • Chiama di nuovo la funzione DrvPrinterEvent del driver della stampante, specificando un evento PRINTER_EVENT_ADD_CONNECTION.

  • Chiama la funzione SpoolerCopyFileEvent in Mscms.dll, specificando un evento COPYFILE_EVENT_ADD_PRINTER_CONNECTION.