Compartilhar via


Baixar arquivos específicos da fila

Se um usuário decidir criar uma conexão de impressora de um sistema cliente para um servidor de impressão e se um aplicativo de instalação tiver criado as entradas do Registro descritas em Ponto de Suporte e Impressão durante as instalações da impressora, ocorrerão os seguintes eventos:

  1. O aplicativo de usuário chama AddPrinterConnection.

  2. O provedor de impressão remota do cliente (Win32spl.dll) cria uma conexão com o servidor.

  3. O spooler do servidor envia arquivos de driver para o cliente.

  4. O Win32spl.dll do cliente chama EnumPrinterKey e EnumPrinterDataEx no servidor para copiar as entradas do registro da impressora.

  5. Como o spooler do servidor enumera valores de registro durante o processamento de EnumPrinterDataEx, ele executa as seguintes operações sempre que encontra uma subchave da chave CopyFiles da impressora, como CopyFiles\ICM:

    • Carrega a DLL de Ponto e Impressão, se especificada, e chama sua função GenerateCopyFilePaths , que pode modificar caminhos de origem e/ou de destino.

    • Cria chaves SourceDir e TargetDir , com base em caminhos de origem e destino retornados por GenerateCopyFilePaths, e as retorna ao spooler do cliente como dados EnumPrinterDataEx. (Essas chaves realmente não existem no servidor.)

  6. O Win32spl.dll do cliente armazena em cache as chaves de impressora recebidas em resposta às chamadas EnumPrinterData e EnumPrinterDataEx.

  7. Para cada subchave da chave CopyFiles da impressora, como CopyFiles\ICM, o Win32spl.dll do cliente executa as seguintes operações:

    • Carrega a DLL de Ponto e Impressão local, se for fornecida, e chama sua função GenerateCopyFilePaths , que pode modificar caminhos de origem e/ou de destino. (As entradas são as chaves SourceDir e TargetDir recebidas do servidor.)

    • Baixa todos os arquivos associados à chave Arquivos do servidor.

    • Registra um evento, indicando que os arquivos Point e Print foram baixados.

    • Chama a função SpoolerCopyFileEvent da DLL de Ponto e Impressão, se uma DLL for fornecida, especificando um evento COPYFILE_EVENT_FILES_CHANGED.

  8. O spooler do cliente chama a função DrvPrinterEvent do driver, especificando um evento PRINTER_EVENT_CACHE_REFRESH.

  9. O spooler do cliente chama a função DrvPrinterEvent do driver novamente, especificando um evento PRINTER_EVENT_ADD_CONNECTION.

  10. Se uma DLL de Ponto e Impressão for fornecida, o spooler do cliente chamará sua função SpoolerCopyFileEvent , especificando um evento COPYFILE_EVENT_ADD_PRINTER_CONNECTION.

Exemplo de conexão

Por exemplo, suponha que um aplicativo de instalação tenha definido as entradas do registro de servidor descritas no exemplo de instalação. Além disso, suponha que o servidor seja chamado de NTPRINT e que o cliente se chama MyClient.

Para se conectar à fila de impressão chamada HpColor no NTPRINT, um aplicativo de usuário no MyClient chama AddPrinterConnection da seguinte maneira:

AddPrinterConnection("\\NTPRINT\HpColor")

No servidor, o spooler carrega Mscms.dll e chama GenerateCopyFilePaths da seguinte maneira:

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

O módulo Mscms.dll do Microsoft ICM não modifica os caminhos de origem ou de destino, portanto, ele apenas retorna ERROR_SUCCESS.

O spooler do servidor retorna as seguintes chaves para MyClient:

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

No cliente, o valor de TargetDir se expande para C:\Winnt\System32\Spool\Drivers\Color.

O spooler no MyClient executa as seguintes operações:

  • Baixa Mscms.dll e chama GenerateCopyFilePaths da seguinte maneira:

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

    O módulo Mscms.dll do Microsoft ICM não modifica os caminhos de origem ou de destino, portanto, ele apenas retorna ERROR_SUCCESS.

  • Baixa Hpclrlsr.icm para C:\Winnt\System32\Spool\Drivers\Color.

  • Registra um evento, indicando que os arquivos Point e Print foram baixados.

  • Chama a função SpoolerCopyFileEvent em Mscms.dll, especificando um evento COPYFILE_EVENT_FILES_CHANGED.

  • Chama a função DrvPrinterEvent do driver de impressora, especificando um evento PRINTER_EVENT_CACHE_REFRESH.

  • Chama a função DrvPrinterEvent do driver de impressora novamente, especificando um evento PRINTER_EVENT_ADD_CONNECTION.

  • Chama a função SpoolerCopyFileEvent em Mscms.dll, especificando um evento COPYFILE_EVENT_ADD_PRINTER_CONNECTION.