Foutencontrole in USBPORT D1 (DRIVER_IRQL_NOT_LESS_OR_EQUAL) stopt tijdens het overbrengen van gegevens van USB en USB-interface selecteren


Symptomen


Tijdens het initialiseren en communicatie met een USB-apparaat op een computer met Windows 7 of Windows Server 2008 R2 aangesloten, loopt de computer vast en wordt een Stop-foutbericht met de volgende strekking weergegeven:

STOP 0x000000D1 (0000000000000000, 0000000000000002, 0000000000000000, parameter4 )
DRIVER_IRQL_NOT_LESS_OR_EQUAL


Oorzaak


Dit probleem wordt veroorzaakt door een fout in het Microsoft USB 1.1 en 2.0 Host Controller-stuurprogramma (USBPORT. SYS). USBPORT geen toegang tot de pipe-lijst voor een USB-apparaat, die leiden een inconsistente (beschadigd) pipe lijst onder bepaalde voorwaarden tot kan te synchroniseren.

Deze fout wordt alleen kunnen worden blootgesteld als het USB-apparaat een samengesteld apparaat, met meerdere logische USB-apparaten worden geïmplementeerd als onderliggende elementen van één fysieke (parent) USB-apparaat is zijn.

In dit scenario is een functiestuurprogramma selecteren van de Interface voor de functie waarmee u de leidingen die zijn gekoppeld aan de vorige Interface van pipe-lijst van het apparaat verwijdert. Deze bewerking is niet beveiligd met een slot (niet atomisch is), en de lijst van de pijp in een inconsistente toestand gedurende korte tijd verlaat.

Functiestuurprogramma van een andere is ondertussen Bezig met overboekingen naar of van een van de leidingen. Tijdens het verwerken van een nieuwe USB-overdracht USBPORT begeleidt pipe-lijst van het apparaat voor het valideren van de USB een pipe worden verwijderd uit de lijst, is het doel van de overdracht, pipe tegenkomt dereferences de NULL-koppelingsaanwijzer uit de pipe worden verwijderd en zorgt ervoor dat de foutencontrole D1 stoppen.

Oplossing


Om dit probleem te omzeilen, kunt de ontwikkelaar van een samengestelde USB-stuurprogramma (Usbccgp vervanging) synchroniseren Selecteer Interface aanvragen met i/o-aanvragen, als volgt.

Wanneer een aanvraag voor de Interface selecteert voor een functie wordt ontvangen:
  1. Nieuwe overdracht voor alle functies van het samengestelde apparaat, dan de functie die is gekoppeld aan de aanvraag voor de Interface selecteert u de wachtrij (behandeling).
  2. Na een korte vertraging (voor aanvragen om te verwerken in behandeling), zenden de aanvraag voor de Interface selecteert (Usbhub PDO [fysiek apparaatobject] voor samengesteld apparaat) en wacht tot de Interface selecteert u aanvraag te voltooien.
  3. Na voltooiing van de aanvraag voor de Interface selecteert u hervatten transfers voor alle functies en overdracht eerder-in de wachtrij te sturen.
Houd er rekening mee dat de bovenstaande oplossing niet volledig te de foutencontrole, afhankelijk van de details van de uitvoering en de exacte reproductie scenario elimineren kan. Deze tijdelijke oplossing moet echter aanzienlijk verminderen de frequentie van voorkomen van dit probleem.

Ook kan deze oplossing gevolgen hebben voor de USB-functie stuurprogramma's waarvan overdrachten tijdelijk in de wachtrij geplaatst bij het verwerken van de aanvraag voor de Interface selecteert. USB-apparaat of stuurprogramma ontwikkelaars die dit probleem optreedt worden aangemoedigd tot het verrichten van de ondersteuning voor Microsoft Windows Driver Kit voor meer specifieke leidraad met deze oplossing implementeren.

Meer informatie


Een oplossing voor dit probleem kan worden overwogen voor toekomstige versies van Windows.

Zie de volgende koppelingen voor meer informatie over ondersteuningsopties voor Windows Driver Kit:
Ondersteuning voor stuurprogramma-Kits en hulpprogramma 's
Ondersteuning voor Windows-stuurprogramma Kit 7.0