Suporte a E/S de 32 bits no driver de 64 bits
O Windows no Windows (WOW64) permite que os aplicativos do modo de usuário do Microsoft Win32 sejam executados no Windows de 64 bits. Ele faz isso interceptando chamadas de função Win32 e convertendo parâmetros de tipos de ponteiro de 32 bits em tipos de ponteiro de 64 bits conforme apropriado antes de fazer a transição para o kernel de 64 bits. Essa conversão, chamada thunking, é feita automaticamente para todas as funções do Win32, com uma exceção importante: os buffers de dados passados para DeviceIoControl. O conteúdo desses buffers, que são apontados pelos parâmetros InputBuffer e OutputBuffer , não são reprovados, pois sua estrutura é específica do driver.
Nota Embora o conteúdo do buffer não seja convertido, os ponteiros do buffer são convertidos em ponteiros de 64 bits.
Aplicativos de modo de usuário chamam DeviceIoControl para enviar uma solicitação de E/S diretamente para um driver de modo kernel especificado. Essa solicitação contém um IOCTL (código de controle de E/S) ou um FSCTL (código de controle do sistema de arquivos) e ponteiros para buffers de dados de entrada e saída. O formato desses buffers de dados é específico para IOCTL ou FSCTL, que, por sua vez, é definido pelo driver do modo kernel. Como o formato do buffer é arbitrário e, como é conhecido pelo driver e não pelo WOW64, a tarefa de conversão dos dados é deixada para o driver.
O driver de 64 bits deverá dar suporte à E/S de 32 bits se todos os itens a seguir forem verdadeiros:
O driver expõe um IOCTL (ou FSCTL) a aplicativos no modo de usuário.
Pelo menos um dos buffers de E/S usados pelo IOCTL contém tipos de dados de precisão de ponteiro.
Seu código IOCTL não pode ser reescrito facilmente para eliminar o uso de tipos de dados de buffer de precisão de ponteiro.