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.
Ověřovač ovladačů má dvě úrovně I/O ověřování:
Ověřování vstupně-výstupních operací úrovně 1 je vždy aktivní, kdykoli je vybráno ověřování vstupně-výstupních operací.
Ověřování vstupně-výstupních operací úrovně 2 je vždy aktivní, když je vybráno ověření vstupně-výstupních operací ve Windows XP a novějších.
Viz Také:Rozšířené ověřování vstupně-výstupních operací ve Windows 7 a novějších verzích operačního systému Windows, rozšířené vstupně-výstupní ověřování se aktivuje automaticky při výběru V/V Ověření. Není k dispozici nebo je nutné ji vybrat jako samostatnou možnost.
Ověřování vstupně-výstupních operací úrovně 1
Pokud je povolené ověřování vstupně-výstupních operací úrovně 1, přidělují se všechny IRP získané prostřednictvím IoAllocateIrp ze speciálního fondu a jejich použití se sleduje.
Kromě toho nástroj Driver Verifier kontroluje neplatná volání vstupně-výstupních operací, včetně:
Pokusí se uvolnit IRP, jehož typ není IO_TYPE_IRP
Předávání neplatných objektů zařízení do funkce IoCallDriver.
Předávání IRP do IoCompleteRequest , které obsahuje neplatný stav nebo má stále nastavenou rutinu zrušení.
Změny IRQL během volání dispečerské rutiny ovladače
Pokusy o uvolnění protokolu IRP, který zůstává přidružený k vláknu
Předává objekt zařízení do IoInitializeTimer , který již obsahuje inicializovaný časovač.
Opakované předání neplatné vyrovnávací paměti do funkcí IoBuildAsynchronousFsdRequest nebo IoBuildDeviceIoControlRequest.
Předání bloku stavu vstupně-výstupních operací do IRP, když je tento blok přidělen na zásobníku, který se příliš rozbalil.
Předání objektu události do IRP, když je tento objekt události přidělen do zásobníku, který byl příliš rozvinutý.
Vzhledem k tomu, že speciální fond IRP má omezenou velikost, je ověřování vstupně-výstupních operací nejúčinnější, pokud se používá pouze na jednom ovladači najednou.
Selhání ověřování vstupně-výstupních operací úrovně 1 způsobují vyvolání kontroly chyb 0xC9. První parametr této kontroly chyb označuje, k jakému narušení došlo. Úplný výpis parametrů najdete v části Kontrola chyb 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION).
Ověřování vstupně-výstupních operací úrovně 2
Chyby ověřování vstupně-výstupních operací úrovně 2 se zobrazují různými způsoby: na modré obrazovce, v souboru s výpisem stavu systému a v ladicím programu jádra.
Na modré obrazovce jsou tyto chyby zaznamenány zprávou IO SYSTEM VERIFICATION ERROR a řetězec WDM DRIVER ERRORXXX, kde XXX je V/V kód chyby.
V souboru s výpisem stavu systému je většina těchto chyb zaznamenána zprávou BugCheck 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION) spolu s kódem chyby vstupně-výstupní operace. V tomto případě se kód chyby vstupně-výstupní operace zobrazí jako první parametr kontroly chyb 0xC9. Zbytek je zaznamenán zprávou Kontrola chyb 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) spolu s kódem chyby Driver Verifier. V tomto případě se kód chyby Driver Verifier zobrazí jako první parametr kontroly chyb 0xC4.
V ladicím programu jádra (KD nebo WinDbg) jsou tyto chyby zaznamenány zprávou WDM DRIVER ERROR a popisným textovým řetězcem. Pokud je ladicí program jádra aktivní, je možné ignorovat chyby úrovně 2 a pokračovat v provozu systému. (To není možné u jiných kontrol chyb.)
Modrá obrazovka, soubor s výpisem stavu systému a ladicí program jádra zobrazují také další informace. Úplný popis většiny chybových zpráv úrovně V/V 2 najdete v tématu Chyba kontroly 0xC9. Zbývající část najdete v části Kontrola chyb 0xC4.
Ve Windows Vista zkontroluje možnost ověřování vstupně-výstupních operací následující chyby ovladače:
Dokončení a zrušení IRPs, které pocházejí z aplikací v uživatelském režimu, trvá příliš dlouho.
Uvolnění zámku pro odebrání, který ještě nebyl získán.
Volání IoReleaseRemoveLock nebo IoReleaseRemoveLockAndWait s značkou, která se liší od značky použité v příslušném volání IoAcquireRemoveLock.
Volání IoCallDriver se zakázanými přerušeními.
Volání IoCallDriver při IRQL přesahujícím DISPATCH_LEVEL.
Návrat z rutiny dispečera řidiče se zakázanými přerušeními.
Vrácení z dispečerské rutiny ovladače se změněným IRQL.
Návrat z výjezdní rutiny ovladače s vypnutými APCs. V tomto případě mohl ovladač zavolat KeEnterCriticalRegion vícekrát než KeLeaveCriticalRegion, což je primární příčina kontroly chyb 0x20 (KERNEL_APC_PENDING_DURING_EXIT) a kontroly chyb 0x1 (APC_INDEX_MISMATCH).
Ve Windows 7 zkontroluje možnost ověřování vstupně-výstupních operací následující chyby ovladače:
- Pokusí se uvolnit irPs voláním ExFreePool. IrPs musí být uvolněny pomocí IoFreeIrp.
Kromě toho můžete pomocí této možnosti zjistit další běžnou chybu ovladače – opětovnou inicializaci odebrání zámků. Přidělování datových struktur pro zámky by mělo probíhat uvnitř rozšíření zařízení. Tím zajistíte, že správce vstupně-výstupních operací uvolní paměť, která obsahuje strukturu IO_REMOVE_LOCK pouze v případě, že se objekt zařízení odstraní. Pokud ovladač provede následující tři kroky, je možné, že po kroku 2 bude aplikace nebo ovladač stále obsahovat odkaz na Zařízení1:
- Přiděluje strukturu IO_REMOVE_LOCK, která odpovídá zařízení Device1, ale provádí přidělení mimo rozšíření zařízení Device1.
- Volá IoReleaseRemoveLockAndWait při odebrání zařízení1.
- Zavolá IoInitializeRemoveLock pro stejný zámek, aby ho znovu použil jako zámek pro odebrání zařízení2.
Je možné, že po kroku 2 aplikace nebo ovladače stále obsahuje odkaz na zařízení 1. Aplikace nebo ovladač stále můžou odesílat žádosti do zařízení Device1, i když bylo toto zařízení odebráno. Proto není bezpečné opakovaně používat stejnou paměť jako nový zámek pro odebrání, dokud správce vstupně-výstupních operací neodstraní zařízení Device1. Opětovná inicializace stejného zámku, zatímco jiné vlákno se ho pokouší získat, může vést k poškození zámku s nepředvídatelnými výsledky pro řidiče a celý systém.
Ve Windows 7 a novějších verzích operačního systému Windows se rozšířené V/V Ověření automaticky aktivuje, když vyberete V/V Ověření.
Aktivace této možnosti
Funkci ověřování vstupně-výstupních operací můžete aktivovat pro jeden nebo více ovladačů pomocí Správce ověření ovladačů nebo příkazového řádku Verifier.exe. Podrobnosti najdete v tématu Výběr možností ověření ovladače.
Na příkazovém řádku.
Na příkazovém řádku je možnost ověřování vstupně-výstupních operací reprezentována bitem 4 (0x10). K aktivaci V/V Ověření použijte hodnotu příznaku 0x10 nebo přidejte 0x10 k hodnotě příznaku. Například:
verifier /flags 0x10 /driver MyDriver.sysFunkce bude aktivní po dalším spuštění.
Můžete také aktivovat a deaktivovat vstupně-výstupní ověření bez restartování počítače přidáním parametru /volatile do příkazu. Například:
verifier /volatile /flags 0x10 /adddriver MyDriver.sysToto nastavení je efektivní okamžitě, ale při vypnutí nebo restartování počítače dojde ke ztrátě. Podrobnosti najdete v tématu Použití volatile nastavení.
Funkce ověřování vstupně-výstupních operací je také součástí standardního nastavení. Například:
verifier /standard /driver MyDriver.sysPoužití Správce ověřovatele ovladačů
- Vyberte Vytvořit vlastní nastavení (pro vývojáře kódu) a potom klikněte na Další.
- Vyberte jednotlivá nastavení z úplného seznamu.
- Vyberte (zkontrolovat) ověřování vstupně-výstupních operací.
Funkce ověřování vstupně-výstupních operací je také součástí standardního nastavení. Chcete-li použít tuto funkci, klikněte ve Správci ověření ovladače na tlačítko Vytvořit standardní nastavení.