Compartilhar via


Problemas de 64 bits do WDDM (Modelo de Driver de Exibição do Windows)

Para permitir que aplicativos de 32 bits sejam executados em um sistema operacional de 64 bits, um driver de exibição de modo de usuário de 32 bits deve ser fornecido além do driver de exibição de modo de usuário de 64 bits exigido pelos aplicativos de 64 bits. No entanto, somente a versão de 64 bits de um driver de miniporto de exibição é necessária em um sistema operacional de 64 bits. O Windows no Windows (WOW64) permite que aplicativos de 32 bits sejam executados em um sistema operacional de 64 bits. Para obter mais informações, consulte Suporte a E/S de 32 bits no driver de 64 bits.

Para instalar um driver de exibição no modo de usuário de 32 bits em um sistema operacional de 64 bits, a entrada a seguir deve ser definida em uma seção de registro de adição do arquivo INF para o driver de miniporto de exibição do dispositivo gráfico. Isso deve acontecer para que o nome de DLL do driver de exibição do modo de usuário de 32 bits seja adicionado ao registro durante a instalação do driver:

 [Xxx_SoftwareDeviceSettings]
...
 HKR,, UserModeDriverNameWow, %REG_MULTI_SZ%, Xxx.dll
...

O arquivo INF deve conter informações para direcionar o sistema operacional para copiar o driver de exibição do modo de usuário de 32 bits para o diretório %systemroot%\SysWOW64 do sistema. Para obter mais informações, consulte Diretiva CopyFiles do INF e Seção DestinationDirs do INF.

Como o WOW64 não pode processar estruturas de dados opacas ou não tipadas, como a estrutura D3DDDICB_ALLOCATE passada por meio da função pfnAllocateCb , ela não pode executar uma conversão automática de 32 bits para 64 bits. Portanto, para que o WOW64 funcione corretamente, você deve considerar os seguintes itens ao escrever um driver de exibição de modo de usuário de 32 bits para ser executado em um sistema operacional de 64 bits:

  • Evite ponteiros ou tipos de dados que sejam confidenciais a vários sistemas operacionais, como, SIZE_T ou HANDLE. Além de tornar o tamanho de toda a variável de estrutura, esses tipos de dados de largura variável tornam o alinhamento e a posição de membros individuais diferentes. Se os membros de largura variável forem inevitáveis, você poderá adicionar outro membro para indicar que a estrutura de dados se origina de um driver de exibição no modo de usuário de 32 bits. O driver de miniporto de exibição de 64 bits pode executar corretamente a conversão.

  • Mesmo que os membros de largura variável não estejam presentes, talvez seja necessário considerar os requisitos de alinhamento específicos da arquitetura. Por exemplo, em x64, um UINT64 (ou QWORD) deve estar alinhado a 8 bytes. Como um driver de exibição de modo de usuário de 32 bits compilado por um compilador padrão de 32 bits pode não alinhar esses tipos nativos de 64 bits corretamente, o driver de miniporte de exibição de 64 bits pode não ser capaz de acessar com precisão os dados do driver de exibição do modo de usuário de 32 bits. No entanto, você pode forçar o alinhamento usando as diretivas apropriadas do compilador pragma . Embora o uso de diretivas do compilador pragma possa causar um pequeno desperdício de espaço em sistemas operacionais de 32 bits, isso permite que você use drivers de exibição idênticos de modo de usuário de 32 bits em sistemas operacionais de 32 bits e 64 bits. Se você não puder forçar o alinhamento usando as diretivas apropriadas do compilador pragma , o driver de exibição de modo de usuário de 32 bits executado usando WOW64 em um sistema operacional de 64 bits deve ser diferente do driver de exibição de modo de usuário de 32 bits em execução em um sistema operacional de 32 bits.