Testy PnP (základy zařízení)
Základní testy PnP zařízení nutí ovladač řešit téměř všechny IRP PnP; existují však tři oblasti, které jsou zdůrazněny konkrétně: odstranění, přerozdělení prostředků a neočekávané odstranění. Test PnP poskytuje mechanismus pro testování každého z těchto samostatně nebo testování všech dohromady (to znamená jako zátěžový test). Toto testování PnP se provádí pomocí kombinace volání rozhraní API v uživatelském režimu (prostřednictvím testovací aplikace) a volání rozhraní API v režimu jádra (prostřednictvím ovladače s horním filtrem).
Testy PNP
Testy Plug and Play (PnP) provádějí různé cesty kódu související s PnP v komponentách ovladače a uživatelského režimu. Testy PnP by se měly spouštět pomocí nástroje Driver Verifier na testovacím počítači. Informace o aktivaci nástroje Driver Verifier naleznete v tématu Vlastnosti nástroje Driver Verifier pro projekty ovladačů.
Test | Popis |
---|---|
zakázat podporu rozšířeného testování zařízení (EDT) |
Tento test odinstaluje ovladač filtru testů (msdmfilt.sys) jako horní filtr na zařízeních zadaných pomocí parametru DQ. Tento filtr testů se nainstaluje jako součást spouštění testů v této kategorii testů. Parametry : – viz Základní parametry testu zařízení DQ Testovací Cyklus DoSimpleIO ioPeriod DoConcurrentIO IOType |
PNP (zakázání a povolení) restart s IO před a po |
Tento test provádí základní operace zakázání a povolení PnP a vstupně-výstupní operace na zařízeních s následným restartováním systému. Test binární : Devfund_PNP_DisableEnable_Reboot_With_IO_BeforeAndAfter.wsc Zkušební metoda : PNP_DisableEnable_Reboot_With_IO_Before_And_After Parametry : – viz Základní parametry testu zařízení DQ IOPeriod |
PNP (zakázání a povolení) s vstupně-výstupními operacemi před a po |
Tento test provádí vstupně-výstupní operace a základní zakázání nebo povolení PnP na zařízeních. Tento test provede následující:
Test binární: Devfund_PNP_DisableEnable_With_IO_BeforeAndAfter.wsc Metoda testu : PNP_DisableEnable_With_IO_Before_And_After parametry : – viz Parametry testu základy zařízení DQ IOPeriod |
PNP Zrušit test zařízení |
Tento test používá ovladač filtru EDT k odesílání IRP_MN_CANCEL_REMOVE_DEVICE do cílových svazků zařízení. Další informace naleznete v o testech odebrání zařízení. Test binární: Devfund_PnPDTest.dll Testovací metoda : PNPCancelRemoveDevice Parametry : – viz Parametry testu základy zařízení DQ testovací cyklus DoSimpleIO ioPeriod DoConcurrentIO |
PNP test zařízení Zrušit zastavení |
Tento test používá ovladač filtru EDT k odesílání IRP_MN_CANCEL_STOP_DEVICE do cílových zásobníků zařízení. Pro více informací si přečtěte téma O testech vyrovnávání. Test binární: Devfund_PnPDTest.dll Metoda testu : PNPCancelStopDevice Parametry : – viz Parametry testu základní funkce zařízení DQ testovací cyklus DoSimpleIO IOobdobí DoConcurrentIO |
PNP DIF Test odstranění zařízení |
Tento test využívá rozhraní SetupDi API k odeslání požadavku DIF_REMOVE, aby instalační programy odebraly zařízení. binární test: Devfund_PnPDTest.dll Metoda testu : PNPDIFRemoveAndRescanParentDevice Parametry : – viz Základní parametry testu zařízení DQ testovací cyklus DoSimpleIO IOPeriod DoConcurrentIO |
PNP test deaktivace a aktivace zařízení |
Tento test zakáže a povolí cílová zařízení. Test binární: Devfund_PnPDTest.dll Testovací metoda : PNPDisableAndEnableDevice parametry : – viz Parametry testu základy zařízení DQ testovací cyklus DoSimpleIO IOPeriod DoConcurrentIO IOType |
selhání obnovení rovnováhy PNP při restartování testu zařízení |
Tento test používá ovladač filtru EDT k pokusu o odeslání IRP_MN_STOP_DEVICE do cílových zásobníků zařízení. Ovladač filtru EDT pak selhává požadavky IRP_MN_START_DEVICE (které následují požadavky IRP_MN_STOP_DEVICE), aby spustily neočekávané odebrání cílových zařízení. Další informace najdete v tématu O testech Vyrovnávání. Test binární: Devfund_PnPDTest.dll Testovací metoda : PNPTryStopDeviceAndFailRestart Parametry : – viz Parametry testu Základní funkce zařízení DQ testovací cyklus DoSimpleIO IOPeriod DoConcurrentIO |
PNP – Znovu vyvážit požadavek na test zařízení s novými prostředky |
Tento test používá ovladač filtru EDT k pokusu o odeslání IRP_MN_STOP_DEVICE do cílových zásobníků zařízení. Zároveň manipuluje s požadavky na prostředky zařízení, aby se maximalizovala šance, že se zařízením přidělují nové prostředky. Další informace najdete v kapitole o testech vyrovnávání. Test binární: Devfund_PnPDTest.dll Testovací metoda : PNPTryStopDeviceRequestNewResourcesAndRestartDevice parametry : – viz Parametry testu základy zařízení DQ testovací cyklus DoSimpleIO IOPeriod DoConcurrentIO |
Test odebrání zařízení PNP |
Tento test způsobí odeslání IRP_MN_QUERY_REMOVE_DEVICE a IRP_MN_REMOVE_DEVICE do cílových zásobníků zařízení. Další informace naleznete v tématu o testech týkajících se odebrání zařízení. Binární test : Devfund_PnPDTest.dll Testovací metoda : PNPRemoveAndRestartDevice parametry : – viz Parametry testu základy zařízení DQ testovací cyklus DoSimpleIO ioPeriod DoConcurrentIO |
test zařízení PNP Stop (rebalance) |
Tento test používá ovladač filtru EDT k pokusu o odeslání IRP_MN_STOP_DEVICE do zásobníků cílových zařízení. Další informace najdete v tématu o testech vyrovnávání. test binární: Devfund_PnPDTest.dll Testovací metoda : PNPTryStopAndRestartDevice parametry : – viz Parametry testu základů zařízení DQ testovací cyklus DoSimpleIO IOPeriod DoConcurrentIO |
PNP test překvapivého odebrání zařízení |
Tento test používá ovladač filtru EDT k odesílání IRP_MN_SURPRISE_REMOVAL do cílových stacků zařízení. Další informace naleznete v tématu O testu překvapivého odebrání. binární test: Devfund_PnPDTest.dll Testovací metoda : PNPSurpriseRemoveAndRestartDevice Parametry : – viz Základní parametry testu zařízení DQ testovací cyklus DoSimpleIO IOPeriod DoConcurrentIO |
Úvod k testům odebrání zařízení
- Test odebrání zařízení PNP
- PNP Zrušit odebrání testu zařízení
Test odebrání zařízení zahrnuje IRP_MN_QUERY_REMOVE_DEVICE, IRP_MN_CANCEL_REMOVE_DEVICE a IRP_MN_REMOVE_DEVICE.
Test se pokusí nainstalovat ovladač horního filtru do zásobníku cílového zařízení. Výsledkem tohoto pokusu je odebrání dotazu IRP.
Pokud toto IRP pro odstranění dotazu selže, test restartuje počítač, aby se ovladač filtru umístil do zásobníku zařízení. Pokud požadavek na odebrání nebude vetován, zásobník zařízení bude odstraněn a znovu spuštěn s ovladačem filtru v zásobníku zařízení.
Test pomocí rozhraní API pro nastavení způsobí, že do zásobníku zařízení bude odeslán IRP pro dotaz na odebrání. Ovladač filtru nepřijme tento požadavek na odebrání, takže se odešle IRP pro zrušení odebrání. Ovladač filtru prohlásí, že zrušení odebrání proběhlo úspěšně.
Dále testovací aplikace zavolá příslušný instalační program třídy a všechny registrované spolunainstalační programy, aby zakázaly, povolily, odstranily nebo znovu přečetly zařízení (to testuje zpracování ze strany instalačního programu třídy a spolunainstalačních programů DIF_PROPERTYCHANGE s DICS_DISABLE, DICS_ENABLE a DICS_PROPCHANGE). Při příjmu IRP_MN_REMOVE_DEVICE ovladač filtru ověří, že nižší ovladače úspěšně dokončily tuto operaci.
Každý z těchto kroků zahrnuje předběžnou žádost o odebrání. Pokud je tento požadavek vetován, zařízení se neodebere. V případě potřeby můžete zvolit zamítnutí žádosti o odebrání, například při streamování videa na USB kameře nebo pokud je cílové zařízení ve spouštěcí nebo stránkovací cestě. Mějte na paměti, že nevyhovět všem žádostem o odebrání není obecně považováno za dobrý postup. Selhání všech požadavků na odebrání nezaručuje, že ovladač nikdy neobdrží odebrání, protože IRP pro odebrání bude stále vydáno po neočekávaném odebrání, nebo pokud kdokoli v zásobníku zařízení selže při spuštění IRP.
O testu odstranění překvapení
- Test nečekaného odebrání zařízení PNP
Test neočekávaného odstranění zahrnuje IRP_MN_SURPRISE_REMOVAL následované IRP_MN_REMOVE_DEVICE.
Stejně jako v předchozích testech se testovací aplikace pokusí přidat do zásobníku cílového zařízení horní filtr a poté zásobník restartuje. Pokud tento pokus není úspěšný, test restartuje počítač.
Při aktivaci testovací aplikací ovladač filtru způsobí, že systém odešle do zásobníku zařízení IRP_MN_SURPRISE_REMOVAL a potom IRP_MN_REMOVE_DEVICE. Ovladač filtru zajistí, že oba tyto IRP jsou úspěšně dokončeny nižšími drivery.
Po dokončení testu neočekávaného odebrání se zařízení odinstaluje a znovu zpracuje, čímž se odstraní i ovladač filtru ze stacku.
O testech vyrovnávání
- Test zařízení PNP Stop (Rebalance)
- Žádost o vyvážení PNP – Test zařízení – Nové zdroje
- Opětovné vyvážení PNP selhalo, restartovat zařízení testem
- Test zařízení pro zrušení zastavení PNP
Stejně jako u testu odebrání se testovací aplikace pokusí přidat k zásobníku cílového zařízení horní filtr a poté restartovat zásobník zařízení pomocí SetupDiCallClassInstaller s DIF_PROPERTYCHANGE. Pokud tento pokus není úspěšný (tj. pokud někdo v cílovém zásobníku zařízení selhal dotazovat-odebrat IRP), test restartuje počítač, aby otestoval znovu vyvážení.
V závislosti na tom, který test rovnováhy zvolíte, dojde k následujícím událostem:
Test PNP Stop (Rebalance) zařízení Tento test iniciuje proceduru rebalancování, která spouští IRP_MN_QUERY_STOP_DEVICE PnP IRP k ovladači zařízení.
Pokud některý ovladač v zásobníku selže, postup obnovení rovnováhy se zruší. Upozorňujeme, že v systému Windows Vista existuje podpora pro vyrovnávání více úrovní. Pokud se na ne-listovém uzlu zařízení zahájí rebalance, všechny zásobníky zařízení, které jsou ve stromu zařízení s tímto uzlem jako kořenem, také procházejí rebalance. A pokud některý z podřízených zásobníků zařízení selže, zastaví se celý postup vyrovnávání. Ovladače proto nesmí selhat zastavením dotazu bez skutečného důvodu. Pokud k tomuto selhání dojde, správce PnP odešle zrušení zastavení (IRP_MN_CANCEL_STOP) do všech zařízení, kterým bylo odesláno zastavení dotazu.
Pokud všechny zapojené zásobníky zařízení úspěšně projdou zastavením dotazu, test pokračuje vyrovnáním a odešle IRP_MN_QUERY_RESOURCE_REQUIREMENTS a IRP_MN_FILTER_RESOURCE_REQUIREMENTS IRPS, aby zjistil požadavky na prostředky zařízení.
Po tomto bodu jsou možné dvě různé cesty v závislosti na tom, jestli cílové zařízení využívá nějaké prostředky, nebo ne:
Pokud zařízení nespotřebovává žádné prostředky, správce PnP sám odešle zrušení zastavení (IRP_MN_CANCEL_STOP_DEVICE) jako optimalizaci.
Pokud zařízení skutečně spotřebovává prostředky, dokončí se procedura vyrovnávání s IRP_MN_STOP_DEVICE a IRP_MN_START_DEVICE irps.
S touto možností se prostředky zařízení nemění.
PNP Cancel Stop Device test: Tento test zahájí proceduru vyrovnávání, ale ovladač filtru záměrně neprojde dotazem na zastavení IRP. Pořadí IRP vypadá jako IRP_MN_QUERY_STOP_DEVICE (který je při spuštění selháván ovladačem filtru, což způsobuje zrušení přerozdělení) a IRP_MN_CANCEL_STOP_DEVICE.
S touto možností se prostředky zařízení nemění.
PNP Rebalance Request New Resources Device test Tento test zahájí proces vyvážení a manipuluje s požadavky na prostředky zařízení, aby zvýšil šance, že budou zařízení skutečně přiděleny nové prostředky. Tato možnost také pomáhá zařízení bez prostředků skutečně projít kompletním postupem vyvážení:
Nejprve se spustí jednoduché vyrovnání, což způsobuje následující IRPs:
- IRP_MN_QUERY_STOP_DEVICE (za předpokladu, že tento IRP je předáván všemi ovladači. Test již pokrývá případ, kdy tento IRP selhal.)
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS. V reakci na tento IRP, během procesu zpracování, ovladač filtru provede akci na základě toho, zda zařízení využívá nějaké prostředky, nebo ne:
- Pokud zařízení nemá žádný požadavek na prostředky, filtr přiřadí falešný prostředek.
- Pokud má zařízení požadavek na prostředek, pokusí se změnit strukturu seznamu požadavků na prostředky takovým způsobem, který maximalizuje pravděpodobnost změny aktuálního přiřazení. Pokud například zařízení potřebuje 2 bajty paměti kdekoli mezi 00 až FF a aktuálně je přiřazeno 3A-3B, upravte tak, aby nový požadavek na prostředek (v pořadí podle preference) vypadal jako 00–39 nebo 3C-FF nebo 3A-3B. Podobně pokud seznam požadavků na prostředky zařízení obsahuje nějaké alternativní požadavky, změní jejich pořadí tak, aby alternativní požadavek přišel dříve v seznamu.
Zařízení by teď mělo vždy dokončit proceduru vyvážení.
IRP_MN_STOP_DEVICE
IRP_MN_START_DEVICE (nové přidělené prostředky. Pokud byly vytvořeny falešné požadavky, skryjte nové prostředky před skutečnými ovladači.)
Selhání obnovení rovnováhy PNP při restartu zařízení test Tento test iniciuje obnovení rovnováhy, ale když ovladač filtru dostane start po obnovení, záměrně selže, což způsobí IRP pro neočekávané odebrání následovaný odebráním IRP.
Nejprve spustí proceduru vyrovnávání a zajistí, aby se ovladač zastavil a znovu spustil tím, že vygeneruje falešné požadavky na prostředky pro zařízení, které nespotřebovává žádné prostředky.
- IRP_MN_QUERY_STOP_DEVICE (za předpokladu, že tento IRP přechází všechny ovladače. Test již probral případ, kdy tento IRP selhal.)
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS (Pokud je skutečný požadavek na prostředky null, filtr přidělí falešný požadavek na prostředky, což způsobí zastavení a následné spuštění.)
- IRP_MN_STOP_DEVICE
- IRP_MN_START_DEVICE (Filtr selže tento IRP při výstupu. Tato akce způsobí překvapivé odstranění IRP.)
- Překvapivé odstranění IRP_MN
- IRP_MN_REMOVE
Po dokončení testu vyvážení se zařízení odinstaluje a znovu zaregistruje, čímž se také odstraní ovladač filtru ze stohu.
Kódy chyb zařízení
Pokud test zobrazí chybovou zprávu s informací, že stav zařízení není v pořádku, můžete se o stavu zařízení dozvědět více prostřednictvím Správce zařízení. Souhrn různých kódů chyb zařízení najdete v tématu Chybové zprávy správce zařízení.
Ladění chyb instalace pomocí protokolů rozhraní API pro instalaci
Protokoly rozhraní API instalace (setupapi.app.log a setupapi.dev.log) můžou obsahovat užitečné informace pro ladění chyb instalace ovladačů protokolovaných tímto testem. Protokoly rozhraní API pro nastavení najdete v adresáři %windir%\inf\ v testovacím systému.
Pokud chcete zvýšit úroveň podrobností a potenciální užitečnost těchto protokolů, nastavte následující klíč registru na 0x2000FFFF před spuštěním testu znovuinstalace.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Setup\LogLevel
Související témata
Jak otestovat ovladač za běhu pomocí sady Visual Studio
Jak vybrat a nakonfigurovat testy Device Fundamentals
Základní funkce zařízení – Testy