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:
Se possível, dê suporte à impressora fornecendo um minidriver que funciona com um dos seguintes drivers fornecidos pela Microsoft:
Driver de Impressora XPS da Microsoft
Driver de Impressora Universal da Microsoft
Você deve criar uma DLL de gráficos de impressora para ser executada no modo de usuário. Consulte Escolhendo o modo de usuário ou o modo kernel.
Se o dispositivo precisar ter suporte de um driver personalizado, o driver deverá aderir exatamente à arquitetura do driver de impressora da Microsoft. Especificamente:
Você deve criar uma DLL de interface de impressora.
Você deve criar uma DLL de gráficos de impressora. Essa DLL pode ser executada no modo de usuário ou no modo kernel, mas o modo de usuário é preferencial.
Se você criar o código do modo kernel, deverá testar o código usando o Verificador de Driver.
Você deve fornecer um procedimento de instalação baseado em arquivos INF de instalação, conforme descrito em Instalando e configurando drivers de impressora.
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:
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.
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).
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.