Testy PnP (podstawy urządzeń)
Podstawowe testy PnP dotyczące urządzeń wymuszają na sterowniku obsługę prawie wszystkich żądań IRP PnP; jednak szczególnie podkreślane są trzy obszary: usunięcie, ponowne równoważenie i niespodziewane usunięcie. Test PnP zapewnia mechanizm testowania każdego z tych elementów oddzielnie lub testowania ich wszystkich razem (czyli jako testu obciążeniowego). Ten test PnP odbywa się przy użyciu kombinacji wywołań interfejsu API trybu użytkownika (za pośrednictwem aplikacji testowej) i wywołań interfejsu API trybu jądra (za pośrednictwem sterownika górnego filtru).
Testy PNP
Testy Plug and Play (PnP) wykonują różne ścieżki kodu związane z systemem PnP w składnikach sterownika i trybu użytkownika. Testy PnP powinny być uruchomione z włączonym Driver Verifier na komputerze testowym. Aby uzyskać informacje na temat włączania weryfikatora sterowników, zobacz właściwości weryfikatora sterowników dla projektów sterowników.
Test | Opis |
---|---|
wyłączyć obsługę rozszerzonego testowania urządzeń (EDT) |
Ten test odinstalowuje sterownik filtru testowego (msdmfilt.sys) jako górny filtr na urządzeniach określonych przy użyciu parametru DQ. Ten filtr testowy jest instalowany w ramach uruchamiania testów w tej kategorii testów Parametry :: zobacz Parametry Testu Podstawowego Urządzenia DQ TestCykl DoSimpleIO IOPeriod DoConcurrentIO IOType |
PNP (wyłącz i włącz) ponowne uruchomienie przy użyciu operacji we/wy przed i po |
Ten test wykonuje podstawowe operacje wyłączania/włączania i we/wy pnp na urządzeniach z ponownym uruchomieniem systemu. Test binarny: Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc Metoda testowa : PNP_DisableEnable_Reboot_With_IO_Before_And_After parametry : — zobacz Parametry testu podstaw fundamentalnych urządzenia DQ IOPeriod |
PNP (wyłącz i włącz) z wejściem/wyjściem przed i po |
Ten test wykonuje operacje wejścia/wyjścia oraz podstawowe przełączanie PnP na urządzeniach. Ten test wykonuje następujące czynności:
Test binarny: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc metoda testowa : PNP_DisableEnable_With_IO_Before_And_After parametry : — zobacz Parametry testu podstawowych urządzeń DQ IOPeriod |
PNP Anuluj Usuń Urządzenie testowe |
Ten test używa sterownika filtrującego EDT do wysyłania polecenia IRP_MN_CANCEL_REMOVE_DEVICE do docelowych stosów urządzeń. Aby uzyskać więcej informacji, zobacz Informacje o testach usuwania urządzeń. Test binarny: Devfund_PnPDTest.dll Metoda testu: PNPCancelRemoveDevice Parametry : — zobacz Podstawowe parametry testu urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Anulowanie testu zatrzymania urządzenia |
Ten test używa sterownika filtru EDT do wysyłania IRP_MN_CANCEL_STOP_DEVICE do stosów urządzeń docelowych. Aby uzyskać więcej informacji, zobacz Informacje o testach ponownego równoważenia. Test binarny: Devfund_PnPDTest.dll Metoda testu: PNPCancelStopDevice Parametry : - zobacz Podstawowe parametry testu urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Usuń test urządzenia PNP DIF |
Ten test używa interfejsu API SetupDi do wysyłania żądania DIF_REMOVE dla instalatorów w celu usunięcia urządzenia. Test binarny: Devfund_PnPDTest.dll Metoda testu: PNPDIFRemoveAndRescanParentDevice Parametry : — zobacz Parametry testu podstaw urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP test wyłączania i włączania urządzenia |
Ten test wyłącza i włącza urządzenia docelowe. Test binarny: Devfund_PnPDTest.dll Metoda testowa : PNPDisableAndEnableDevice parametry — zobacz Podstawowe Parametry Testu Urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO IOType |
ponowne równoważenie pnp niepowodzenie ponownego uruchamiania testu urządzenia |
W tym teście użyto sterownika filtru EDT, aby spróbować wysłać IRP_MN_STOP_DEVICE do stosów urządzeń docelowych. Następnie sterownik filtru EDT odrzuca żądania IRP_MN_START_DEVICE, następujące po żądaniach IRP_MN_STOP_DEVICE, w celu wywołania nieoczekiwanego usunięcia urządzeń docelowych. Aby uzyskać więcej informacji, zobacz Informacje o testach ponownego równoważenia. Test binarny: Devfund_PnPDTest.dll Metoda testu: PNPTryStopDeviceAndFailRestart Parametry : — zobacz Parametry testu podstawowych urządzeń DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Żądanie ponownego równoważenia PNP nowych zasobów Test urządzenia |
W tym teście użyto sterownika filtru EDT, aby spróbować wysłać IRP_MN_STOP_DEVICE do stosów urządzeń docelowych. Manipuluje również wymaganiami dotyczącymi zasobów urządzeń, aby zmaksymalizować prawdopodobieństwo przydzielenia nowych zasobów do urządzeń. Aby uzyskać więcej informacji, zobacz Informacje o testach ponownego równoważenia. Test binarny: Devfund_PnPDTest.dll Metoda testu: "PNPTryStopDeviceRequestNewResourcesAndRestartDevice" Parametry : — zobacz Parametry testu podstawowego urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
PNP Test usuwania urządzenia |
Ten test powoduje wysyłanie IRP_MN_QUERY_REMOVE_DEVICE i IRP_MN_REMOVE_DEVICE do docelowych stosów urządzeń. Aby uzyskać więcej informacji, zobacz Informacje o testach usuwania urządzeń. Test binarny: Devfund_PnPDTest.dll Metoda testowa "": "" PNPRemoveAndRestartDevice Parametry : — zobacz Podstawowe parametry testu urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
test urządzenia zatrzymania PNP (ponownego równoważenia) |
W tym teście użyto sterownika filtru EDT, aby spróbować wysłać IRP_MN_STOP_DEVICE do stosów urządzeń docelowych. Aby uzyskać więcej informacji, zobacz Informacje o testach ponownego równoważenia. Test binarny: Devfund_PnPDTest.dll Metoda testu: PNPTryStopAndRestartDevice Parametry : — zobacz Podstawowe parametry testu urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
test niespodziewanego usunięcia urządzenia PNP |
Ten test używa sterownika filtru EDT do wysyłania IRP_MN_SURPRISE_REMOVAL do stosów urządzeń docelowych. Aby uzyskać więcej informacji, zobacz O teście niespodziewanego usunięcia. Test binarny: Devfund_PnPDTest.dll Metoda Test: PNPSurpriseRemoveAndRestartDevice Parametry : — zobacz Podstawowe parametry testu urządzenia DQ TestCycles DoSimpleIO IOPeriod DoConcurrentIO |
Informacje o testach usuwania urządzeń
- Test usuwania urządzenia PNP
- PnP Test anulowania usuwania urządzenia
Test usuwania urządzenia obejmuje IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE i IRP_MN_REMOVE_DEVICE.
Test próbuje zainstalować sterownik górnego filtru na stosie urządzenia docelowego. Ta próba powoduje usunięcie protokołu IRP zapytania.
Jeśli zapytanie usuwania IRP nie powiedzie się, test uruchomi ponownie komputer, aby włączyć sterownik filtra do stosu urządzenia. Jeśli żądanie usunięcia nie zostanie zawetowane, stos urządzenia zostanie usunięty i uruchomiony ponownie za pomocą sterownika filtru w stosie urządzenia.
Test, używając interfejsów API ustawień, powoduje wysłanie zapytania o usunięcie IRP do stosu urządzenia. Sterownik filtru odrzuca to żądanie usunięcia, dlatego wysyłany jest IRP anulowania. Sterownik filtrujący potwierdzi, że anulowanie operacji usunięcia zakończyło się pomyślnie.
Następnie aplikacja testowa wywołuje odpowiedni instalator klasy i wszystkie zarejestrowane współinstalatory, aby wyłączyć lub włączyć, a także usunąć lub ponownie wyliczyć urządzenie (testuje to obsługę przez instalatory klasy i współinstalatory polecenia DIF_PROPERTYCHANGE z użyciem DICS_DISABLE, DICS_ENABLE i DICS_PROPCHANGE). Podczas odbierania IRP_MN_REMOVE_DEVICE sterownik filtru upewni się, że niższe sterowniki zakończyły tę operację pomyślnie.
Każdy z tych kroków obejmuje wstępne żądanie usunięcia. Jeśli to żądanie zostanie zawetowane, urządzenie nie zostanie usunięte. W razie potrzeby możesz zawetować żądanie usunięcia, na przykład przy przesyłaniu wideo na kamerze USB lub jeśli urządzenie docelowe znajduje się w ścieżce rozruchowej lub stronicowania. Pamiętaj, że po prostu odrzucenie wszystkich żądań usunięcia nie jest zazwyczaj dobrą praktyką. Niepowodzenie wszystkich prób usunięcia nie gwarantuje, że sterownik nigdy nie otrzyma usunięcia, ponieważ IRP usunięcia będzie nadal wydawane po nagłym usunięciu lub jeśli ktoś w stosie urządzenia nie powiedzie się w starcie IRP.
Informacje o teście usuwania zaskoczenia
- Test nieoczekiwanego usunięcia urządzenia PnP
Test niespodziewanego usunięcia obejmuje IRP_MN_SURPRISE_REMOVAL, a następnie IRP_MN_REMOVE_DEVICE.
Podobnie jak w przypadku poprzednich testów, aplikacja testowa podejmie próbę dodania górnego filtru do docelowego stosu urządzeń, a następnie ponownego uruchomienia stosu. Jeśli ta próba nie powiedzie się, test uruchomi ponownie komputer.
Kiedy zostanie wyzwolony przez aplikację testową, sterownik filtra spowoduje, że system wyśle IRP_MN_SURPRISE_REMOVAL do stosu urządzenia, a następnie IRP_MN_REMOVE_DEVICE. Sterownik filtru potwierdzi, że oba te elementy IRPs zostały pomyślnie ukończone przez niższe sterowniki.
Po zakończeniu testu niespodziewanego odłączenia urządzenie zostanie odinstalowane i ponownie wykryte, a ze stosu usunięty zostanie również sterownik filtra.
Informacje o testach ponownego równoważenia
- Test urządzenia PNP Stop (ponowne równoważenie)
- Ponowne równoważenie pnP Żądanie nowego zasobu Test urządzenia
- Test urządzenia ponownego uruchomienia przy niepowodzeniu równoważenia PNP
- PnP Anulowanie testu urządzenia zatrzymania
Podobnie jak w przypadku testu usuwania, aplikacja testowa próbuje dodać górny filtr do stosu docelowego urządzenia, a następnie dokonać ponownego rozruchu stosu urządzenia przy użyciu SetupDiCallClassInstaller z DIF_PROPERTYCHANGE. Jeśli ta próba nie powiedzie się (to znaczy, jeśli ktoś w stosie urządzenia docelowego nie obsłużył poprawnie zapytania o usunięcie IRP), komputer zostanie ponownie uruchomiony, aby przetestować ponowne równoważenie.
W zależności od wybranego testu ponownego równoważenia występują następujące zdarzenia:
Test urządzenia PnP (ponowne równoważenie) Ten test inicjuje procedurę ponownego równoważenia, która powoduje IRP_MN_QUERY_STOP_DEVICE PnP IRP do sterownika urządzenia.
Jeśli jakikolwiek sterownik w stosie zawiedzie to IRP, procedura ponownego równoważenia zostaje porzucona. Należy pamiętać, że w systemie Windows Vista istnieje obsługa ponownego równoważenia na poziomie wieloeziomowym. Jeśli ponowne równoważenie zostanie uruchomione na węźle urządzenia, który nie jest liściem, wszystkie stosy urządzeń obecne w drzewie urządzeń z tym węzłem jako korzeniem również podlegają ponownemu równoważeniu. Jeśli w którymkolwiek z stosów urządzeń podrzędnych zapytanie stop zakończy się niepowodzeniem, cała procedura ponownego równoważenia zostanie porzucona. Dlatego sterowniki nie powinny zatrzymać zapytania w trybie 'fail query stop' bez rzeczywistego powodu. Jeśli ten błąd wystąpi, menedżer PnP wysyła anulowanie zatrzymania (IRP_MN_CANCEL_STOP) do wszystkich stosów urządzeń, do których wcześniej wysłano zapytanie o zatrzymanie.
Jeśli wszystkie stosy urządzeń przeszły pomyślnie test zapytania o zatrzymanie, test kontynuuje z ponownym równoważeniem i wysyła IRP_MN_QUERY_RESOURCE_REQUIREMENTS oraz IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPs, aby znaleźć wymagania dotyczące zasobów urządzeń.
Po tym punkcie możliwe są dwie różne ścieżki w zależności od tego, czy urządzenie docelowe zużywa jakiekolwiek zasoby, czy nie:
Jeśli urządzenie nie zużywa żadnych zasobów, menedżer PnP sam wysyła polecenie anulowania zatrzymania (IRP_MN_CANCEL_STOP_DEVICE) jako optymalizację.
Jeśli urządzenie rzeczywiście zużywa zasoby, procedura ponownego równoważenia jest kończona za pomocą IRP_MN_STOP_DEVICE i IRP_MN_START_DEVICE IRPs.
Dzięki tej opcji zasoby urządzenia nie ulegają zmianie.
pl-PL: PNP test anulowania zatrzymania urządzenia: ten test inicjuje procedurę ponownego równoważenia, ale zapytanie zatrzymania IRP zostało celowo zakończone niepowodzeniem przez sterownik filtru. Kolejność IRP wygląda następująco: IRP_MN_QUERY_STOP_DEVICE (który nie powiódł się z powodu sterownika filtru podczas uruchamiania się, powodując anulowanie ponownego równoważenia) oraz IRP_MN_CANCEL_STOP_DEVICE.
W przypadku tej opcji zasoby urządzenia nie zmieniają się
PNP Żądanie ponownego równoważenia nowych zasobów test urządzenia Ten test inicjuje ponowne równoważenie i manipuluje zapotrzebowaniem na zasoby urządzenia, aby zmaksymalizować szanse, że nowe zasoby zostaną faktycznie przydzielone do urządzenia. Ta opcja pomaga również urządzeniu bez zasobów, aby faktycznie przejść przez pełną procedurę ponownego równoważenia:
Najpierw uruchomiono proste ponowne równoważenie, co powoduje następujące IRPs:
- IRP_MN_QUERY_STOP_DEVICE (przy założeniu, że ten pakiet IRP jest przekazywany przez wszystkie sterowniki. Test obejmował już przypadek, w którym ten pakiet IRP zakończył się niepowodzeniem).
- Zapytanie o Wymagania Zasobów (IRP_MN_QUERY_RESOURCE_REQUIREMENTS)
- Żądanie IRP_MN_FILTER_RESOURCE_REQUIREMENTS (Filtrowanie wymagań zasobów). W odpowiedzi na ten protokół IRP podczas przechodzenia w górę sterownik filtru podejmuje działania na podstawie tego, czy urządzenie zużywa jakiekolwiek zasoby, czy nie:
- Jeśli urządzenie nie ma wymagania dotyczącego zasobów, filtr przypisuje fałszywy zasób.
- Jeśli urządzenie ma wymaganie dotyczące zasobów, próbuje zmienić strukturę listy wymagań dotyczących zasobów w taki sposób, aby zmaksymalizować prawdopodobieństwo zmiany bieżącego przypisania. Jeśli na przykład urządzenie potrzebuje 2 bajtów pamięci w dowolnym miejscu od 00 do FF, a obecnie jest przypisane 3A-3B, zmodyfikuj tak, aby nowe wymaganie zasobu (w kolejności preferencji) wyglądało następująco: 00-39 lub 3C-FF lub 3A-3B. Podobnie jeśli lista wymagań dotyczących zasobów urządzenia ma jakiekolwiek alternatywne wymagania, zmieni kolejność, więc alternatywne wymaganie zostanie wyświetlone wcześniej na liście.
Teraz urządzenie powinno zawsze wykonać procedurę ponownego równoważenia.
IRP_MN_STOP_DEVICE
IRP_MN_START_DEVICE (nowe przydzielone zasoby. Jeśli zostały utworzone fałszywe wymagania, zamaskuj nowe zasoby przed rzeczywistymi sterownikami.)
Ponowne równoważenie PNP nie powiodło się, test ponownego uruchomienia urządzenia Ten test inicjuje ponowne równoważenie, ale gdy sterownik filtru otrzymuje sygnał startu po ponownym równoważeniu, celowo powoduje niepowodzenie. To skutkuje nieoczekiwanym usunięciem IRP, a następnie usunięciem IRP.
Najpierw uruchamia procedurę ponownego wyważania i upewnia się, że sterownik otrzymuje sygnał zatrzymania i uruchomienia poprzez wygenerowanie fałszywego zapotrzebowania na zasoby dla urządzenia, które nie zużywa żadnych zasobów.
- IRP_MN_QUERY_STOP_DEVICE (zakładając, że ten pakiet żądania I/O (IRP) jest przekazywany przez wszystkie sterowniki. Test obejmował już przypadek, w którym ten pakiet żądania I/O (IRP) zakończył się niepowodzeniem).
- IRP_MN_ZAPYTANIE_WYMAGAŃ_ZASOBÓW
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS (jeśli rzeczywiste wymaganie dotyczące zasobów ma wartość null, odfiltruj wymaganie dotyczące przypisywania fałszywych zasobów, więc istnieje zatrzymanie i uruchomienie).
- IRP_MN_STOP_DEVICE
- IRP_MN_START_DEVICE (filtr kończy się niepowodzeniem podczas przesyłania w górę IRP. Ta akcja powoduje niespodziewane usunięcie IRP).
- IRP_MN_SURPRISE_REMOVAL
- IRP_MN_REMOVE
Po zakończeniu testu ponownego równoważenia urządzenie zostanie odinstalowane i ponownie zidentyfikowane, a sterownik filtru zostanie usunięty ze stosu.
Kody błędów urządzenia
Jeśli test wyświetli komunikat o błędzie informujący, że stan urządzenia nie jest prawidłowy, możesz dowiedzieć się więcej o stanie urządzenia za pomocą Menedżera urządzeń. Aby uzyskać podsumowanie różnych kodów błędów urządzenia, zobacz Komunikaty o błędach menedżera urządzeń.
Rozwiązywanie problemów z instalacją przy użyciu dzienników interfejsu API instalatora
Dzienniki interfejsu API instalacji (setupapi.app.log i setupapi.dev.log) mogą zawierać przydatne informacje dotyczące debugowania błędów instalacji sterowników zarejestrowanych przez ten test. Dzienniki instalacji API można znaleźć w katalogu %windir%\inf\ w systemie testowym.
Aby zwiększyć szczegółowość i potencjalną użyteczność tych dzienników, przed uruchomieniem testu ponownego zainstalowania ustaw następujący klucz rejestru na 0x2000FFFF:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel
Tematy pokrewne
Jak przetestować sterownik w czasie wykonywania przy użyciu programu Visual Studio
Jak wybrać i skonfigurować testy podstawowe urządzeń
Dostarczone proste wtyczki we/wy WDTF
Jak przetestować sterownik w czasie wykonywania z poziomu wiersza polecenia