Compartilhar via


Portátil

Todos os drivers devem ser portáteis em todas as plataformas de hardware com suporte do Windows. Para alcançar a portabilidade entre plataformas, os desenvolvedores de drivers devem:

  • Código em C (sem linguagem de assembly).

  • Interaja com o Windows usando apenas as interfaces de programação e os cabeçalhos fornecidos no WDK.

Programando drivers em C

Todos os drivers do modo kernel devem ser gravados em C para que possam ser recompilados com um compilador C compatível com o sistema, revinculados e executados em diferentes plataformas do Microsoft Windows sem reescrever ou substituir nenhum código. A maioria dos componentes do sistema operacional é codificada inteiramente em C, com apenas pequenas partes dos componentes HAL e kernel escritos na linguagem assembly, de modo que o sistema operacional seja prontamente portátil entre plataformas de hardware. Você não pode usar muitos construtos da linguagem C++ em drivers em modo kernel, portanto, você deve avaliar cuidadosamente o uso desses construtos. Para obter mais informações sobre problemas que surgem quando os drivers incluem recursos C++, consulte o documento técnico C++ para Drivers de Modo Kernel: Prós e Contras.

Os drivers não deverão contar com os recursos de qualquer compilador C compatível com o sistema específico ou biblioteca de suporte C se esses recursos não tiverem garantia de que têm suporte por outros compiladores compatíveis com o sistema. Em geral, o código do driver deve estar em conformidade com o padrão ANSI C e não depender de nada que esse padrão descreva como "definido pela implementação".

Para escrever drivers portáteis, é melhor evitar:

  • Dependências em tipos de dados que podem variar de tamanho ou layout de uma plataforma para outra.

  • Chamando qualquer função de biblioteca de runtime C padrão que mantenha o estado.

  • Chamar qualquer função de biblioteca de runtime C padrão para a qual o sistema operacional fornece uma rotina de suporte alternativa.

Usando interfaces de WDK-Supplied

Cada componente executivo do Windows NT exporta um conjunto de rotinas de suporte para drivers no modo kernel, que os drivers e todos os outros componentes em modo kernel chamam. Se a implementação subjacente de uma rotina de suporte mudar ao longo do tempo, seus chamadores permanecerão portáteis porque a interface para o componente definidor não será alterada.

O WDK fornece um conjunto de arquivos de cabeçalho que definem tipos de dados e constantes específicos do sistema que os drivers (e todos os outros componentes do modo kernel) usam para ajudar a manter a portabilidade de uma plataforma para outra. Todos os drivers do modo kernel incluem um dos arquivos de cabeçalho mestre do modo kernel do WDK, Wdm.h ou Ntddk.h. Os arquivos de cabeçalho mestre incluem não apenas os cabeçalhos fornecidos pelo sistema que definem os tipos básicos de modo núcleo, mas também seleções apropriadas de cabeçalhos específicos da arquitetura do processador quando um driver é compilado com a correspondente diretiva do compilador.

Alguns drivers, como drivers de miniporto SCSI, drivers NDIS e drivers de miniporto de vídeo, incluem outros arquivos de cabeçalho fornecidos pelo sistema.

Se um driver exigir definições dependentes da plataforma, é melhor isolar essas definições em #ifdef instruções, para que cada driver possa ser compilado e vinculado para a plataforma de hardware apropriada. No entanto, você quase sempre pode evitar a implementação de qualquer código compilado condicionalmente específico da plataforma em um driver usando as rotinas de suporte, macros, constantes e tipos fornecidos pelos arquivos de cabeçalho mestre do WDK.

Os drivers no modo kernel podem usar rotinas rtlxxx no modo kernel documentadas no WDK. Os drivers no modo kernel não podem chamar rotinas rtlxxx no modo de usuário.