Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Weryfikator sterowników ma dwa poziomy weryfikacji we/wy:
Weryfikacja we/wy na poziomie 1 jest zawsze aktywna za każdym razem, gdy wybrano weryfikację we/wy.
Weryfikacja we/wy na poziomie 2 jest zawsze aktywna za każdym razem, gdy w systemie Windows XP lub nowszym wybrano weryfikację we/wy.
Zobacz Również:Rozszerzona Weryfikacja We/Wy W systemie Windows 7 i nowszych wersjach systemu operacyjnego Windows, Rozszerzona Weryfikacja We/Wy jest automatycznie aktywowana po wybraniu Weryfikacji We/Wy. Nie jest dostępna lub konieczna do wybrania jej jako oddzielnej opcji.
Weryfikacja I/O poziomu 1
Po włączeniu Weryfikacji We/Wy Poziomu 1, wszystkie IRP-y uzyskane za pośrednictwem IoAllocateIrp są przydzielane ze specjalnej puli, a ich użycie jest śledzone.
Ponadto weryfikator sterowników sprawdza nieprawidłowe wywołania we/wy, w tym:
Próbuje zwolnić protokół IRP, którego typ nie jest IO_TYPE_IRP
Przekazywanie nieprawidłowych obiektów urządzenia do IoCallDriver
Przekazywanie IRP do IoCompleteRequest, który zawiera nieprawidłowy stan lub nadal ma ustawioną procedurę anulowania
Zmiany poziomu IRQL podczas wywołania procedury dyspozycyjnej sterownika
Próbuje zwolnić protokół IRP, który pozostaje skojarzony z wątkiem
Przekazanie obiektu urządzenia do IoInitializeTimer, który już zawiera zainicjowany czasomierz
Przekazanie nieprawidłowego bufora do IoBuildAsynchronousFsdRequest lub IoBuildDeviceIoControlRequest
Przekazywanie bloku stanu we/wy do IRP, gdy ten blok jest przydzielany na stosie, który został zbyt daleko rozwinięty.
Przekazywanie obiektu zdarzenia do IRP, gdy ten obiekt zdarzenia jest przydzielany na stosie, który został nadmiernie rozwinięty
Ponieważ specjalna pula IRP ma ograniczony rozmiar, weryfikacja I/O jest najbardziej skuteczna, gdy jest używana tylko na jednym sterowniku jednocześnie.
Błędy weryfikacji we/wy na poziomie 1 powodują wystąpienie sprawdzenia błędu 0xC9. Pierwszy parametr tego sprawdzania błędów wskazuje, jakie naruszenie wystąpiło. Aby uzyskać pełną listę parametrów, zobacz Sprawdzanie błędów 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION).
Weryfikacja we/wy poziomu 2
Błędy weryfikacji we/wy poziomu 2 są wyświetlane na różne sposoby: na niebieskim ekranie, w pliku zrzutu awaryjnego i debugerze jądra.
Na niebieskim ekranie te błędy są zanotowane przez komunikat BŁĄD WERYFIKACJI SYSTEMU WE/WY i ciąg BŁĄD STEROWNIKA WDMXXX, gdzie XXX jest kodem błędu WE/WY.
W pliku zrzutu awaryjnego większość z tych błędów jest zanotowana przez komunikat BugCheck 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION), wraz z kodem błędu wejścia/wyjścia. W tym przypadku kod błędu I/O jest wyświetlany jako pierwszy parametr kontroli błędów 0xC9. Pozostałe są oznaczone komunikatem Bug Check 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION), wraz z kodem błędu Weryfikatora Sterowników. W tym przypadku kod błędu Weryfikatora sterownika jest wyświetlany jako pierwszy parametr sprawdzania błędów 0xC4.
W debugerze jądra (KD lub WinDbg) te błędy są zanotowane przez komunikat BŁĄD STEROWNIKA WDM i opisowy ciąg tekstowy. Gdy debuger jądra jest aktywny, można zignorować błędy poziomu 2 i wznowić operację systemu. (Nie jest to możliwe w przypadku innych testów usterek).
Niebieski ekran, plik zrzutu awaryjnego i debuger jądra wyświetla również dodatkowe informacje. Aby uzyskać pełny opis większości komunikatów o błędach na poziomie weryfikacji we/wy 2, zobacz Sprawdzanie błędów 0xC9. W pozostałej części zobacz sprawdzanie błędów 0xC4.
Począwszy od okna Vista, opcja Weryfikacja we/wy sprawdza następujące błędy sterownika:
Ukończenie i anulowanie IRP pochodzących z aplikacji działających w trybie użytkownika trwa zbyt długo.
Zwalnianie blokady usuwania, która nie została jeszcze nabyta.
Wywoływanie IoReleaseRemoveLock lub IoReleaseRemoveLockAndWait z parametrem tagu, który różni się od parametru tagu używanego w odpowiednim wywołaniu IoAcquireRemoveLock.
Wywoływanie usługi IoCallDriver z wyłączonymi przerwaniami.
Wywoływanie IoCallDriver na poziomie IRQL większym niż DISPATCH_LEVEL.
Powrót z procedury obsługi sterownika z wyłączonymi przerwaniami.
Powrót z procedury wysyłania sterownika ze zmienionym środowiskiem IRQL.
Powrót z procedury wysyłania sterownika z wyłączonymi wywołaniami APC. W takim przypadku sterownik mógł wywoływać KeEnterCriticalRegion więcej razy niż KeLeaveCriticalRegion, co jest główną przyczyną błędu sprawdzania 0x20 (KERNEL_APC_PENDING_DURING_EXIT) oraz błędu sprawdzania 0x1 (APC_INDEX_MISMATCH).
Począwszy od systemu Windows 7, opcja Weryfikacja we/wy sprawdza następujące błędy sterownika:
- Próbuje zwolnić środowiska IRPs przez wywołanie exFreePool. IRP muszą zostać zwolnione za pomocą IoFreeIrp.
Ponadto można użyć tej opcji, aby wykryć kolejną typową usterkę sterownika — ponowne inicjowanie usuwania blokad. Struktury danych związane z blokadami powinny być alokowane wewnątrz rozszerzeń urządzeń. Dzięki temu menedżer we/wy zwalnia pamięć, która przechowuje strukturę IO_REMOVE_LOCK tylko wtedy, gdy obiekt urządzenia zostanie usunięty. Jeśli sterownik wykonuje następujące trzy kroki, możliwe, że po kroku 2 aplikacja lub sterownik nadal przechowuje odwołanie do urządzenia Device1:
- Przydziela strukturę IO_REMOVE_LOCK odpowiadającą urządzeniu Device1, ale strukturę alokuje poza rozszerzeniem Device1.
- Wywołuje IoReleaseRemoveLockAndWait podczas usuwania urządzenia Device1.
- Wywołuje metodę IoInitializeRemoveLock dla tej samej blokady, aby użyć jej ponownie jako blokady usuwania dla urządzenia Device2.
Możliwe, że po kroku 2 aplikacja lub sterownik nadal przechowuje odwołanie do urządzenia Device1. Aplikacja lub sterownik nadal może wysyłać żądania do urządzenia Device1, mimo że to urządzenie zostało usunięte. W związku z tym nie można bezpiecznie ponownie użyć tej samej pamięci co nowa blokada usuwania, dopóki menedżer we/wy nie usunie urządzenia Device1. Ponowne inicjowanie tej samej blokady, gdy inny wątek próbuje go uzyskać, może spowodować uszkodzenie blokady, z nieprzewidywalnymi wynikami sterownika i całego systemu.
W systemie Windows 7 i nowszych wersjach systemu operacyjnego Windows rozszerzona weryfikacja operacji we/wy jest automatycznie aktywowana po wybraniu Weryfikacja operacji we/wy.
Aktywowanie tej opcji
Funkcję weryfikacji we/wy można aktywować dla co najmniej jednego sterownika za pomocą Menedżera weryfikatora sterowników lub wiersza polecenia Verifier.exe. Aby uzyskać szczegółowe informacje, zobacz Wybieranie opcji weryfikatora sterowników.
W wierszu polecenia.
W wierszu polecenia opcja Weryfikacja we/wy jest reprezentowana przez bit 4 (0x10). Aby aktywować weryfikację we/wy, użyj wartości flagi 0x10 lub dodaj 0x10 do wartości flagi. Przykład:
verifier /flags 0x10 /driver MyDriver.sysFunkcja będzie aktywna po następnym rozruchu.
Możesz również aktywować i dezaktywować weryfikację we/wy bez ponownego uruchamiania komputera, dodając parametr /volatile do polecenia. Przykład:
verifier /volatile /flags 0x10 /adddriver MyDriver.sysTo ustawienie jest skuteczne natychmiast, ale zostanie utracone po zamknięciu lub ponownym uruchomieniu komputera. Aby uzyskać szczegółowe informacje, zobacz Używanie zmiennych ustawień.
Funkcja weryfikacji we/wy jest również uwzględniona w ustawieniach standardowych. Przykład:
verifier /standard /driver MyDriver.sysKorzystanie z Menedżera weryfikatora sterowników
- Wybierz pozycję Utwórz ustawienia niestandardowe (dla deweloperów kodu), a następnie kliknij przycisk Dalej.
- Wybierz poszczególne ustawienia z pełnej listy.
- Wybierz (zaznacz) weryfikację I/O.
Funkcja weryfikacji we/wy jest również uwzględniona w ustawieniach standardowych. Aby użyć tej funkcji, w Menedżerze weryfikatora sterowników kliknij pozycję Utwórz ustawienia standardowe.