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.
Ovladače tvoří významné procento celkového kódu, který se spouští v režimu jádra. Ovladač režimu jádra je v podstatě součástí operačního systému. Ovladače, které jsou spolehlivé a zabezpečené, proto významně přispívají k celkové důvěryhodnosti operačního systému. Pokud chcete vytvořit spolehlivý ovladač v režimu jádra, postupujte podle těchto pokynů:
Zabezpečte objekty zařízení správně.
Uživatelský přístup k ovladačům a zařízením systému je řízen popisovači zabezpečení, které systém přiřazuje k objektům zařízení. Systém nejčastěji nastavuje parametry zabezpečení zařízení při instalaci zařízení. Další informace najdete v tématu Vytváření zabezpečených instalací zařízení. Někdy je vhodné, aby ovladač hrál roli při řízení přístupu ke svému zařízení. Další informace naleznete v tématu Zabezpečení objektů zařízení.
Ověřte správně objekty zařízení.
Pokud ovladač vytvoří více typů objektů zařízení, musí zkontrolovat, jaký typ přijímá v každém protokolu IRP. Další informace naleznete v tématu Selhání ověření objektů zařízení.
Používejte bezpečné řetězcové funkce.
Při manipulaci s řetězci by ovladač měl místo řetězcových funkcí poskytovaných knihovnami jazyka C/C++ používat bezpečné řetězcové funkce. Další informace naleznete v tématu Použití bezpečných řetězcových funkcí.
Ověřte handles objektů.
Ovladače, které přijímají popisovače objektů jako vstup, musí ověřit, zda jsou popisovače platné, přístupné a odpovídají očekávanému typu. Další informace o používání popisovačů objektů najdete v následujících tématech:
Podporujte víceprocesorové systémy správně.
Nikdy nepředpokládáme, že váš ovladač bude běžet pouze v systémech s jedním procesorem. Informace o programovacích technikách, které můžete použít k zajištění správného fungování ovladače v multiprocesorových systémech, najdete v následujících tématech:
Správně pracujte s ovladačem.
Je důležité vždy ověřit, že váš ovladač je ve stavu, ve kterém ho předpokládáte. Pokud například ovladač obdrží IRP, už obsluhuje IRP stejného typu? Pokud řidič tuto situaci nezkontroluje, může dojít ke ztrátě prvního protokolu IRP. Další informace naleznete v tématu Selhání kontroly stavu řidiče.
Ověřte vstupní hodnoty protokolu IRP.
Z hlediska spolehlivosti i zabezpečení je nezbytné ověřit všechny hodnoty spojené s protokolem IRP, jako jsou adresy vyrovnávací paměti a délky. Následující témata obsahují informace o ověřování vstupních hodnot protokolu IRP:
DispatchReadWrite s využitím vyrovnávacího vstupně-výstupního systému
Chyby ve vyrovnávací paměti při vstupně-výstupních operacích
DispatchReadWrite s využitím přímého vstupu/výstupu
Chyby v přímých vstupně-výstupních operacích
problémy se zabezpečením pro kódy řízení vstupně-výstupních operací
Správně zpracujte I/O zásobník.
Při předávání irPs zásobníku ovladačů je důležité, aby ovladače volali IoSkipCurrentIrpStackLocation nebo IoCopyCurrentIrpStackLocationToNext , aby nastavili umístění zásobníku vstupně-výstupních operací dalšího ovladače. Nepište kód, který přímo kopíruje jednu polohu I/O zásobníku do další.
Správně zpracujte dokončení operací IRP.
Ovladač nesmí nikdy dokončit protokol IRP se stavovou hodnotou STATUS_SUCCESS, pokud ve skutečnosti nepodporuje a nezpracuje protokol IRP. Informace o správných způsobech zpracování operací dokončení IRP najdete v tématu Dokončení IRP.
Zpracujte správně operace zrušení protokolu IRP.
Operace zrušení můžou být obtížné správně kódovat, protože se obvykle provádějí asynchronně. Problémy s kódem, který zpracovává operace zrušení, mohou být dlouho bez upozornění, protože tento kód se obvykle nespustí často v běžícím systému.
Nezapomeňte si přečíst a porozumět všem informacím uvedeným v části Zrušení IRPs. Věnujte zvláštní pozornost synchronizaci zrušení IRP a bodům, které je třeba zvážit při rušení IRP.
Jedním ze způsobů, jak se vyhnout problémům se synchronizací spojenými s operacemi zrušení, je implementovat bezpečnou frontu IRP pro zrušení. Fronta IRP bezpečná při zrušení je fronta spravovaná ovladačem, která byla zavedena pro Windows XP a novější verze operačního systému, ale je také zpětně kompatibilní s dřívějšími verzemi.
Správně zpracujte operace vyčištění a uzavření IRP.
Ujistěte se, že rozumíte rozdílu mezi požadavky IRP_MJ_CLEANUP a IRP_MJ_CLOSE. Žádosti o vyčištění dorazí poté, co aplikace uzavře všechny popisovače objektu souboru, ale někdy předtím, než jsou dokončeny všechny I/O požadavky. Požadavky na zavření přicházejí poté, co byly dokončeny nebo zrušeny všechny vstupně-výstupní požadavky na objekt souboru. Další informace najdete v následujících tématech:
Rutiny DispatchCreate, DispatchClose a DispatchCreateClose
Další informace o správném zpracování IRP naleznete v tématu Další chyby při zpracování IRP.
Použití ověřovatele ovladačů
Driver Verifier je nejdůležitější nástroj, který můžete použít pro zajištění spolehlivosti vašeho ovladače. Kontrolér ovladačů může zkontrolovat různé běžné problémy s ovladači, včetně některých z těch, které jsou popsány v této části. Použití Driver Verifier však nenahrazuje pečlivé, promyšlené softwarové návrh.