Compartilhar via


Impressão do Servidor de Terminal

Importante

A partir do WDK para Windows 11, versão 22H2, não há mais suporte para os co-instaladores redistribuíveis do WDF. Para saber como contornar essa alteração, confira Os co-instaladores redistribuíveis do WDF não funcionam no artigo Problemas conhecidos do WDK .

O Microsoft Windows dá suporte aos Serviços de Terminal, uma tecnologia que permite que vários usuários se conectem a um único sistema de servidor. Esse sistema de servidores é chamado de servidor de terminal. Para obter uma discussão detalhada sobre os Serviços de Terminal, consulte a documentação do SDK do Windows.

Se você estiver desenvolvendo um minidriver de impressora ou driver para Windows, não precisará fazer nada especial para dar suporte a impressoras conectadas a servidores de terminal. No entanto, você deve seguir todas as diretrizes de design, implementação e instalação especificadas no WDK (Kit de Driver do Windows). Especificamente, você deve usar as seguintes regras:

Todo o código de driver personalizado deve ser reentrante. O código de modo de usuário deve empregar objetos de seção críticos (descritos na documentação do SDK do Windows). O código do modo kernel deve usar semáforos (consulte EngCreateSemaphore e funções relacionadas).

Os drivers de impressora e os componentes personalizados do spooler devem acessar o registro somente por meio de interfaces fornecidas especificamente para esses drivers e componentes do spooler, conforme descrito nas seções apropriadas do WDK.

Considerações de instalação

Normalmente, tudo o que você precisa fazer para a instalação é fornecer um arquivo INF que possa ser lido pelo instalador de classe de impressora da Microsoft quando um usuário invoca o assistente Adicionar Impressora . Às vezes, o código de instalação personalizado (um co-instalador ou instalador de classe) também é necessário. Se você precisar criar um código de instalação personalizado, lembre-se do seguinte:

  • O usuário ou o código de instalação devem colocar o servidor de terminal no modo de instalação. (Para obter mais informações, consulte a documentação do SDK do Microsoft Windows.)

  • Não tente substituir arquivos do sistema. A proteção de arquivos do Windows proíbe a substituição de arquivos do sistema.

  • Evite exigir reinicializações do sistema o máximo possível. Use as seguintes diretrizes:

    1. Não substitua arquivos de driver que não foram alterados. Por exemplo, os arquivos compartilhados por vários dispositivos não devem ser atualizados se a versão mais atual já estiver instalada.

    2. Se um arquivo precisar ser substituído, o código de instalação deverá executar etapas para descarregar a versão antiga e carregar a nova versão (por exemplo, interrompendo o serviço de driver, substituindo o arquivo e reiniciando o serviço).

    3. Exigir que um usuário faça logoff e, em seguida, fazer logon novamente, é preferível a exigir uma reinicialização do sistema.

Para obter mais informações sobre co-instaladores e instaladores de classe, consulte Escrevendo instaladores de classe e co-instaladores.

Antes de escrever o código de instalação personalizado, é importante ler as diretrizes de programação dos Serviços de Terminal fornecidas na documentação do SDK do Windows.

Considerações sobre a interface do usuário

O código de instalação personalizado executado por um usuário pode exibir uma interface do usuário.

Quase todo o código do driver de impressora é executado no contexto de execução do spooler e, portanto, não pode exibir uma interface do usuário. As interfaces do usuário só podem ser exibidas por DLLs de interface da impressora e somente de dentro das seguintes funções:

  • As funções DrvDevicePropertySheets e DrvDocumentPropertySheets , que criam páginas de propriedades.

  • A função DrvPrinterEvent , que recebe códigos de evento que identificam eventos de impressora. A função pode exibir uma interface do usuário somente para os códigos de evento PRINTER_EVENT_ADD_CONNECTION e PRINTER_EVENT_DELETE_CONNECTION.

Todos os outros códigos de driver de impressora são executados no contexto do spooler. Nesse contexto, é permitido chamar MessageBox ou MessageBoxEx , mas você deve definir MB_SERVICE_NOTIFICATION. Essas funções são descritas na documentação do SDK do Windows.