Sdílet prostřednictvím


Přenosný

Všechny ovladače musí být přenosné napříč všemi hardwarovými platformami podporovanými systémem Windows. Aby vývojáři ovladačů dosáhli přenositelnosti mezi platformami, měli by:

  • Kód v jazyce C (bez jazyka sestavení).

  • Interagujte s Windows pouze pomocí programovacích rozhraní a hlaviček, které jsou součástí WDK.

Kódování ovladačů v jazyce C

Všechny ovladače v režimu jádra by měly být napsané v jazyce C, aby je bylo možné znovu zkompilovat pomocí kompilátoru jazyka C kompatibilního se systémem, znovu propojit a spustit na různých platformách Microsoft Windows bez nutnosti přepisování nebo nahrazení jakéhokoli kódu. Většina komponent operačního systému je kódována zcela v jazyce C, přičemž pouze malé části součástí HAL a jádra jsou napsány v assembleru, takže operační systém je snadno přenosný napříč hardwarovými platformami. V ovladačích v režimu jádra nelze použít mnoho konstruktorů jazyka C++, proto byste měli pečlivě vyhodnotit použití těchto konstruktorů. Další informace o problémech, ke kterým dochází, když ovladače obsahují funkce jazyka C++, naleznete v dokumentu C++ pro ovladače režimu jádra: Pros a Cons white paper.

Ovladače by neměly spoléhat na funkce některého konkrétního kompilátoru C kompatibilního se systémem nebo knihovny podpory jazyka C, pokud tyto funkce nejsou zaručeny podporovány jinými systémově kompatibilními kompilátory. Obecně platí, že kód ovladače by měl odpovídat standardu ANSI C, a nezávisí na ničem, co tento standard popisuje jako "definované implementace".

Pro zápis přenosných ovladačů je nejlepší se vyhnout:

  • Závislosti na datových typech, které se mohou lišit velikostí nebo uspořádáním na různých platformách.

  • Volání jakékoli funkce standardní knihovny jazyka C, která udržuje stav.

  • Volání jakékoli standardní funkce knihovny modulu runtime jazyka C, pro kterou operační systém poskytuje alternativní rutinu podpory.

Použití rozhraní WDK-Supplied

Každá výkonná komponenta Windows NT exportuje sadu rutin pro podporu ovladačů režimu jádra, které volají ovladače a všechny ostatní komponenty režimu jádra. Pokud se základní implementace rutiny podpory v průběhu času změní, její volající zůstanou přenosní, protože rozhraní pro definující komponentu se nezmění.

WDK poskytuje sadu souborů hlaviček, které definují systémové datové typy a konstanty, které ovladače (a všechny ostatní komponenty režimu jádra) používají k zajištění přenositelnosti z jedné platformy do druhé. Všechny ovladače režimu jádra zahrnují jeden z hlavních souborů hlaviček WDK v režimu jádra, Wdm.h nebo Ntddk.h. Soubory hlavní hlavičky přetahují nejen hlavičky zadané systémem, které definují základní typy režimu jádra, ale také vhodné výběry z hlaviček specifických pro procesor, pokud je ovladač zkompilován s odpovídající direktivou kompilátoru.

Některé ovladače, jako jsou ovladače miniportu SCSI, ovladače NDIS a ovladače miniportu videa, zahrnují další soubory hlaviček dodané systémem.

Pokud ovladač vyžaduje definice závislé na platformě, je nejlepší tyto definice izolovat v rámci příkazů #ifdef , aby každý ovladač mohl být zkompilován a propojen pro příslušnou hardwarovou platformu. Téměř vždy se však můžete vyhnout implementaci jakéhokoli kódu specifického pro platformu, podmíněně zkompilovaného v ovladači pomocí rutin podpory, maker, konstant a typů, které poskytují soubory hlaviček WDK.

Ovladače režimu jádra můžou používat rutiny RtlXxx režimu jádra, které jsou zdokumentované v WDK. Ovladače režimu jádra nemohou volat rutiny RtlXxx uživatelského režimu.