Udostępnij za pośrednictwem


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:

  1. Sprawdza, czy w systemie nie ma żadnych urządzeń zgłaszających kody problemów z urządzeniami.
  2. Testuje I/O na każdym urządzeniu w systemie przy użyciu wtyczek Simple I/O WDTF. Aby uzyskać więcej informacji, zobacz Wtyczki proste I/O WDTF.
  3. Wyłącza i włącza każde urządzenie w systemie przy użyciu interfejsów akcji WDTF PnP, zobacz IWDTFPNPAction2::DisableDevice i IWDTFPNPAction2::EnableDevice metody, aby uzyskać więcej informacji.
  4. Sprawdza, czy w systemie nie ma żadnych urządzeń zgłaszających kody problemów z urządzeniami.
  5. Testuje funkcje we/wy na każdym urządzeniu w systemie przy użyciu prostych wtyczek we/wy WDTF. Aby uzyskać więcej informacji, zobacz Wtyczki prostego I/O WDTF.
  6. Powtarza kroki 3–5 kilka razy.

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:

  1. 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.

  2. 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ę

  3. 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:

    1. 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.
    2. 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.)

  4. 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

Jak przetestować sterownik w czasie wykonywania przy użyciu programu Visual Studio

Jak wybrać i skonfigurować testy podstawowe urządzeń

testy podstawowe urządzeń

Dostarczone proste wtyczki we/wy WDTF

Jak przetestować sterownik w czasie wykonywania z poziomu wiersza polecenia