Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.