Partilhar via


Portátil

Todos os drivers devem ser portáteis em todas as plataformas de hardware suportadas pelo Windows. Para alcançar a portabilidade entre plataformas, os programadores de drivers devem:

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

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

Desenvolvimento de drivers em C

Todos os drivers de modo kernel devem ser escritos em C para que possam ser recompilados com um compilador C compatível com o sistema, revinculados e executados em diferentes plataformas Microsoft Windows sem reescrever ou substituir qualquer código. A maioria dos componentes do sistema operacional são codificados inteiramente em C, com apenas pequenas partes dos componentes HAL e kernel escritos em linguagem assembly, de modo que o sistema operacional é prontamente portátil entre plataformas de hardware. Você não pode usar muitas construções de linguagem C++ em drivers de modo kernel, então você deve avaliar cuidadosamente o uso dessas construções. Para obter mais informações sobre problemas que surgem quando os drivers incluem recursos C++, consulte o white paper C++ for Kernel Mode Drivers: Pros and Cons .

Os drivers não devem confiar nos recursos de qualquer compilador C ou biblioteca de suporte C compatível com o sistema em particular se esses recursos não tiverem garantia de serem suportados 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 este padrão descreve como "definido pela implementação".

Para escrever drivers portáteis, é melhor evitar:

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

  • Chamar qualquer função de biblioteca de execução padrão C que mantenha o estado.

  • Chamar qualquer função de biblioteca de tempo de execução padrão em C para a qual o sistema operativo fornece uma rotina de suporte alternativa.

Usando interfaces WDK-Supplied

Cada componente executivo do Windows NT exporta um conjunto de rotinas de suporte para drivers em modo kernel que os drivers e todos os outros componentes em modo kernel utilizam. 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 muda.

O WDK fornece um conjunto de arquivos de cabeçalho que definem tipos de dados específicos do sistema e constantes 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 de modo kernel incluem um dos arquivos de cabeçalho mestre do modo kernel WDK, Wdm.h ou Ntddk.h. Os arquivos de cabeçalho mestre recebem não apenas cabeçalhos fornecidos pelo sistema que definem os tipos básicos de modo kernel, mas também seleções apropriadas de quaisquer cabeçalhos específicos da arquitetura do processador quando um driver é compilado com a diretiva de compilador correspondente.

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

Se um driver requer definições dependentes de plataforma, é melhor isolar essas definições dentro #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 WDK.

Os drivers de modo kernel podem usar rotinas Rtl Xxx de modo kernel documentadas no WDK. Os drivers de modo kernel não podem chamar rotinas Rtl Xxx de modo utilizador.