Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
A moderna plataforma de impressão é o meio preferido do Windows para comunicar com as impressoras. Recomendamos que utilize o controlador de classe da caixa de entrada IPP da Microsoft, juntamente com as Aplicações de Suporte de Impressão (PSA), para personalizar a experiência de impressão no Windows 10 e 11 para o desenvolvimento de dispositivos de impressora.
Para obter mais informações, consulte Guia de design do aplicativo de suporte de impressão v1 e v2.
A execução em modo de usuário de DLLs gráficas de impressora fornece as seguintes vantagens em relação à execução em modo kernel:
Espaço de pilha ilimitado.
Acesso a APIs do Win32.
Menos potencial para causar falhas no sistema.
Depuração mais fácil, com depuradores de modo de usuário.
Melhores capacidades de ponto flutuante, uma vez que não é necessário o uso de funções gráficas de ponto flutuante DDI.
Possibilidade de chamar qualquer DLL de modo de utilizador personalizadas fornecidas pelo fornecedor que não sejam parte da arquitetura de driver de impressora descrita do Microsoft Windows 2000 e posterior.
No Windows Vista, não é possível instalar um driver de impressora de modo kernel. Se um aplicativo tentar fazer isso, as funções AddPrinterDriver e AddprinterDriverEx (descritas na documentação do SDK do Windows) falharão com o código de erro ERROR_KM_DRIVER_BLOCKED.
A tabela a seguir mostra os modos de execução de driver de impressora permitidos:
| Versão do sistema operacional | Modo de execução permitido da DLL de gráficos da impressora |
|---|---|
| Windows NT 4.0 | kernel |
| Janelas 2000 | usuário ou kernel |
| Windows XP e Server 2003 | modo kernel disponível para impressoras existentes; Modo de usuário necessário para novas instalações de impressora |
| Windows Vista | utilizador |
Usando os gráficos DDI no modo de usuário
Uma DLL de gráficos de impressora em modo utilizador não está limitada a chamar os Serviços de Suporte GDI e outras funcionalidades de retorno de chamada DDI de gráficos prefixadas por Eng. No entanto, existem algumas regras que devem ser seguidas:
Como as DLLs gráficas de modo núcleo, as DLLs gráficas de modo de utilizador devem chamar as DDIs gráficas que criam ou modificam uma superfície de desenho. Essas funções de callback são os Serviços de Suporte GDI, e não é permitido chamar os equivalentes Win32 dessas funções de desenho.
Para DLLs de modo utilizador, as chamadas para essas funções de retorno de desenho são intercetadas pelo cliente GDI de modo utilizador, que por sua vez passa as chamadas para o mecanismo de renderização gráfica (GRE) de modo núcleo do GDI.
A seguinte lista de funções DDI gráficas com o prefixo Eng não pode ser chamada por DLLs em modo utilizador:
As DLLs gráficas de impressora em modo utilizador podem continuar a usar funções DDI para serviços de ponto flutuante GDI.
Convertendo uma DLL gráfica de impressora existente para o modo de usuário
Se você já desenvolveu uma DLL gráfica de impressora que é executada no modo kernel, você pode converter a DLL para execução no modo de usuário. Para converter, adicione uma função DrvQueryDriverInfo à DLL e, em seguida, siga as regras para construir uma DLL de gráficos de impressora.
Criando uma nova DLL de gráficos de impressora no modo de usuário
Para desenvolver uma nova DLL gráfica de impressora que seja executada no modo de usuário, você pode continuar a usar todas as funções DDI gráficas usadas por DLLs de modo kernel. No entanto, você também tem as seguintes opções:
Para funções prefixadas Eng que têm equivalentes Win32 exatos, é recomendável que você chame as funções Win32. A tabela a seguir lista essas funções prefixadas Eng, juntamente com seus equivalentes Win32.
Função com prefixo "Eng" Equivalente a Win32 EngAllocMem HeapAlloc EngAllocUserMem HeapAlloc EngEnumForms EnumForms EngFreeMem HeapFree EngFreeUserMem HeapFree EngFindImageProcAddress GetProcAddress EngGetForm GetForm EngGetLastError GetLastError EngGetPrinter GetPrinter EngGetPrinterData GetPrinterData EngGetPrinterDriver GetPrinterDriver EngLoadImage LoadLibrary EngMulDiv MulDiv EngSetLastError SetLastError EngSetPrinterData SetPrinterData EngUnloadImage Biblioteca Gratuita EngWritePrinter WritePrinter Para funções com prefixo Eng que correspondem a funções Win32 com funcionalidade semelhante, também é recomendável chamar as funções Win32. A tabela a seguir lista várias dessas funções prefixadas Eng, juntamente com suas contrapartes Win32.
Função com prefixo "Eng" Equivalente a Win32 EngAcquireSemaphore EnterCriticalSection EngCreateSemaphore Aloque um objeto CRITICAL_SECTION e inicialize-o usando uma chamada para a função Win32 InitializeCriticalSection. EngDeleteSemaphore EliminarSecçãoCrítica EngFindResource FindResource EngFreeModule Biblioteca Gratuita EngLoadModule LoadLibrary EngMultiByteToWideChar MultiByteToWideChar EngQueryLocalTime GetLocalTime EngReleaseSemaphore ReleaseSemaphore EngWideCharToMultiByte WideCharToMultiByte Para funções que criam ou modificam um serviço de desenho, os novos drivers devem continuar a chamar os serviços de suporte GDI e não seus equivalentes Win32.
Em vez de usar funções DDI gráficas para GDI Floating-Point Services, você pode usar o tipo de dados FLOAT.