Delen via


USB-stuurprogramma's voor de host in Windows

Dit artikel bevat een overzicht van de stuurprogrammastackarchitectuur van Universal Serial Bus (USB).

In de volgende afbeelding ziet u het architectuurblokdiagram van de USB-stuurprogrammastack voor Windows. In het diagram ziet u afzonderlijke USB-stuurprogrammastacks voor USB 2.0 en USB 3.0. Windows laadt de USB 3.0-stuurprogrammastack wanneer een apparaat is gekoppeld aan een xHCI-controller.

Bouwsteendiagram voor USB 2.0- en 3.0-stuurprogrammastacks.

Windows laadt de USB 2.0-stuurprogrammastack voor apparaten die zijn gekoppeld aan eHCI-, oHCI- of uHCI-controllers. De USB 2.0-stuurprogrammastack wordt geleverd in Windows XP met Service Pack 1 (SP1) en latere versies van het Windows-besturingssysteem.

USB 3.0-stuurprogrammastack

Microsoft heeft de USB 3.0-stuurprogramma's gemaakt met behulp van KMDF-interfaces (Kernel Mode Driver Framework). Het KMDF-stuurprogrammamodel vermindert de complexiteit en verbetert de stabiliteit.

USB 3.0-hostcontrollerstuurprogramma (Usbxhci.sys)

Het xHCI-stuurprogramma is het stuurprogramma voor de USB 3.0-hostcontroller. De verantwoordelijkheden van het xHCI-stuurprogramma omvatten het initialiseren van MMIO-registers en hostgegevensstructuren op basis van geheugen voor xHCI-controllerhardware, het toewijzen van overdrachtsaanvragen van stuurprogramma's op de bovenste laag tot het overdragen van aanvraagblokken en het indienen van de aanvragen bij de hardware. Nadat een overdracht is voltooid, verwerkt het stuurprogramma voltooiingsevenementen van de hardware en worden de gebeurtenissen doorgegeven aan de stuurprogrammastack. Het beheert ook de xHCI-controllerapparaatsites en eindpuntcontexten.

Windows laadt het xHCI-stuurprogramma als functieapparaatobject (FDO) in de apparaatstack van de hostcontroller.

USB-hostcontrollerextensie (Ucx01000.sys)

Het stuurprogramma voor de USB-hostcontrollerextensie (een extensie voor KMDF) is de nieuwe extensie voor het onderliggende klassespecifieke hostcontrollerstuurprogramma, zoals het xHCI-stuurprogramma. Het nieuwe stuurprogramma is uitbreidbaar en is ontworpen ter ondersteuning van andere typen hostcontrollerstuurprogramma's die naar verwachting in de toekomst zullen worden ontwikkeld. De extensie van de USB-hostcontroller fungeert als een geabstraheerde interface voor het hubstuurprogramma, biedt een generiek mechanisme voor het in de rij plaatsen van verzoeken aan het stuurprogramma van de hostcontroller en past bepaalde geselecteerde functies aan. Alle I/O-aanvragen die door hogere stuurprogramma's zijn geïnitieerd, bereiken het stuurprogramma voor de hostcontrollerextensie voordat het xHCI-stuurprogramma. Na ontvangst van een I/O-aanvraag valideert de hostcontrollerextensie de aanvraag en stuurt de aanvraag vervolgens door naar de juiste KMDF-wachtrij die is gekoppeld aan het doeleindpunt. Het xHCI-stuurprogramma, wanneer deze gereed is voor verwerking, haalt de aanvraag op uit de wachtrij. De verantwoordelijkheden van het stuurprogramma voor de USB-hostcontrollerextensie zijn:

  • Biedt USB-specifieke objecten voor het xHCI-stuurprogramma.
  • Biedt KMDF-event callback-routines aan het xHCI-stuurprogramma.
  • Beheert en controleert de operaties van de hoofdhub die is gekoppeld aan de hostcontroller.
  • Implementeert functies die kunnen worden geconfigureerd door het clientstuurprogramma, zoals gekoppelde MDL's, streams, enzovoort.

USB-hubstuurprogramma (Usbhub3.sys)

Het nieuwe hubstuurprogramma, in de USB-stuurprogrammastack voor 3.0-apparaten, maakt gebruik van het KMDF-stuurprogrammamodel. Het driver voor de hub voert voornamelijk deze taken uit:

  • Beheert USB-hubs en hun poorten.
  • Inventariseert apparaten en andere hubs die zijn gekoppeld aan hun downstreampoorten.
  • Hiermee maakt u fysieke apparaatobjecten (PPO's) voor de geïnventareerde apparaten en hubs.

Windows laadt het hubstuurprogramma als de FDO in de hubapparaatstack. Apparaatumeratie en hubbeheer in het nieuwe stuurprogramma worden geïmplementeerd via een set statusmachines. Het stuurprogramma voor de hub is afhankelijk van KMDF voor energiebeheer en PnP-functies. Naast hubbeheer voert het hubstuurprogramma ook voorbereidende controles en verwerking uit van bepaalde aanvragen die zijn verzonden door de USB-clientstuurprogrammalaag. Het hubstuurprogramma parseert bijvoorbeeld een selectieconfiguratieaanvraag om te bepalen welke eindpunten door de aanvraag worden geconfigureerd. Na het parseren van de informatie verzendt het hubstuurprogramma de aanvraag naar de extensie van de USB-hostcontroller of verdere verwerking.

USB 2.0-stuurprogrammastack

Windows laadt de USB 2.0-stuurprogrammastack voor apparaten die zijn gekoppeld aan eHCI-, oHCI- of uHCI-controllers. ** De stuurprogramma's in de USB 2.0-stuurprogrammastack worden meegeleverd met Windows XP met SP1 en latere versies van het Windows-besturingssysteem. De USB 2.0-stuurprogrammastack is ontworpen om usb-apparaten met hoge snelheid te vergemakkelijken, zoals gedefinieerd in de USB 2.0-specificatie.

Onderaan de USB-stuurprogrammastack bevindt zich het stuurprogramma van de hostcontroller. Het bestaat uit het poortstuurprogramma, Usbport.sysen een of meer van drie minipoortstuurprogramma's die gelijktijdig worden uitgevoerd. Wanneer het systeem hostcontrollerhardware detecteert, wordt een van deze minipoortstuurprogramma's geladen. Het minipoortstuurprogramma, nadat het is geladen, laadt het poortstuurprogramma, Usbport.sys. Het poortstuurprogramma verwerkt deze aspecten van de taken van het stuurprogramma van de hostcontroller die onafhankelijk zijn van het specifieke protocol.

Het minipoortstuurprogramma Usbuhci.sys (universal host controller interface) vervangt het Uhcd.sys miniklassestuurprogramma dat is geleverd met Windows 2000. Het minipoortstuurprogramma Usbohci.sys (open hostcontrollerinterface) vervangt Openhci.sys. Het Usbehci.sys minipoortstuurprogramma ondersteunt usb-apparaten met hoge snelheid en is geïntroduceerd in Windows XP met SP1 en hoger en Windows Server 2003 en hoger.

In alle versies van Windows die USB 2.0 ondersteunen, kan het besturingssysteem tegelijkertijd USB 1.1- en USB 2.0-hostcontrollers beheren. Wanneer het besturingssysteem detecteert dat beide typen controller aanwezig zijn, worden er twee afzonderlijke apparaatknooppunten gemaakt, één voor elke hostcontroller. Windows laadt vervolgens het Usbehci.sys minipoortstuurprogramma voor de usb 2.0-compatibele hostcontrollerhardware en Usbohci.sys of Openhci.sys voor de USB 1.1-compatibele hardware, afhankelijk van de systeemconfiguratie.

Boven het poortstuurprogramma bevindt zich het USB-busstuurprogramma, Usbhub.sys, ook wel bekend als het hubstuurprogramma. Dit is het apparaatstuurprogramma voor elke hub in het systeem.

USB-stuurprogramma voor generieke bovenliggende klasse (Usbccgp.sys)

Het generieke bovenliggende stuurprogramma van de USB-common class is het door Microsoft geleverde stuurprogramma voor samengestelde apparaten. Het hubstuurprogramma inventariseert en laadt het bovenliggende samengestelde stuurprogramma als deviceClass 0 of 0xef is en numInterfaces groter is dan 1 in de apparaatdescriptor. Het hubstuurprogramma genereert de Compatibele ID voor het moederstuurprogramma als "USB\COMPOSITE". Usbccgp.sys maakt gebruik van WDM-routines (Windows Driver Model).

Het bovenliggende samengestelde stuurprogramma somt alle functies in een samengesteld apparaat op en maakt een PDO voor elk van deze. Hierdoor wordt het juiste klasse- of clientstuurprogramma geladen voor elke functie in het apparaat. Elk functiestuurprogramma (onderliggende PDO) verzendt aanvragen naar het bovenliggende stuurprogramma, waarmee ze worden verzonden naar het USB-hubstuurprogramma.

Usbccgp.sys is opgenomen in Windows XP met SP1 en latere versies van het Windows-besturingssysteem. In Windows 8 is het stuurprogramma bijgewerkt voor het implementeren van functies opschorten en externe ontwaakfuncties zoals gedefinieerd in de USB 3.0-specificatie.

Zie voor meer informatie generieke USB-stuurprogramma (Usbccgp.sys).

WinUSB (Winusb.sys)

Windows USB (WinUSB) is een algemeen stuurprogramma van Microsoft voor USB-apparaten. WinUSB-architectuur bestaat uit een kernelmodusstuurprogramma (Winusb.sys) en een dynamische koppelingsbibliotheek (Winusb.dll) in de gebruikersmodus). Voor apparaten waarvoor geen aangepast functiestuurprogramma is vereist, kan Winusb.sys worden geïnstalleerd in de kernelmodusstack van het apparaat als het functiestuurprogramma. Processen in de gebruikersmodus kunnen vervolgens communiceren met Winusb.sys met behulp van een set I/O-beheeraanvragen van apparaten of door WinUsb_Xxx functies aan te roepen. Zie Inleiding tot WinUSB voor ontwikkelaars voor meer informatie.

In Windows 8 bevat het door Microsoft verstrekte informatiebestand (INF) voor WinUSB, Winusb.inf, USB\MS_COMP_WINUSB als een apparaat-id-tekenreeks. Hierdoor kan Winusb.sys automatisch als functiestuurprogramma worden geladen voor apparaten met een bijpassende WinUSB-compatibele id in de MS OS-descriptor. Dergelijke apparaten worden WinUSB-apparaten genoemd. Hardwarefabrikanten hoeven geen INF-bestand te distribueren voor hun WinUSB-apparaat, waardoor het installatieproces van het stuurprogramma eenvoudiger wordt voor de eindgebruiker. Zie WinUSB-apparaat voor meer informatie.

USB-client-stuurprogramma

Elk USB-apparaat, samengesteld of niet-samengesteld, wordt beheerd door een clientstuurprogramma. Een USB-clientstuurprogramma is een klasse of apparaatstuurprogramma dat een client is van de USB-stuurprogrammastack. Dergelijke stuurprogramma's omvatten klasse- en apparaatspecifieke stuurprogramma's van Microsoft of een externe leverancier. Zie Stuurprogramma's voor de ondersteunde USB-apparaatklassen voor een lijst met klassestuurprogramma's van Microsoft. Een clientstuurprogramma maakt aanvragen om met het apparaat te communiceren door openbare interfaces aan te roepen die worden weergegeven door de USB-stuurprogrammastack.

Een clientstuurprogramma voor een samengesteld apparaat verschilt niet van een clientstuurprogramma voor een niet-samengesteld apparaat, met uitzondering van de locatie in de stuurprogrammastack.

Een clientstuurprogramma voor een niet-samengesteld apparaat bevindt zich direct boven het hubstuurprogramma.

Voor een samengesteld USB-apparaat dat meerdere functies beschikbaar maakt en geen stuurprogramma voor bovenliggende klassen heeft, laadt Windows het algemene BOVENLIGGENde USB-stuurprogramma (Usbccgp.sys) tussen het hubstuurprogramma en de clientstuurprogrammalaag. Het hoofd stuurprogramma maakt een afzonderlijke PDO voor elke functie van een composiet apparaat. Clientstuurprogramma's (FDO's voor functies) worden boven het generieke bovenliggende stuurprogramma geladen. Leveranciers kunnen ervoor kiezen om voor elke functie een afzonderlijk clientstuurprogramma op te geven.

Een USB-clientstuurprogramma kan worden uitgevoerd in de gebruikersmodus of kernelmodus, afhankelijk van de vereisten van het stuurprogramma. USB-clientstuurprogramma's kunnen worden geschreven met KMDF-, UMDF- of WDM-routines.

Helperbibliotheken voor clientstuurprogramma's

Microsoft biedt de volgende helperbibliotheken waarmee stuurprogramma's en toepassingen in de kernelmodus kunnen communiceren met de USB-stuurprogrammastack:

  • Usbd.sys

    Microsoft biedt de Usbd.sys bibliotheek waarmee routines voor USB-clientstuurprogramma's worden geëxporteerd. De helperroutines vereenvoudigen de operationele taken van een clientstuurprogramma. Met behulp van de helperroutines kan een USB-clientstuurprogramma bijvoorbeeld USB-aanvraagblokken (URL's) bouwen voor bepaalde specifieke bewerkingen, zoals het selecteren van een configuratie en deze URL's verzenden naar de USB-stuurprogrammastack.

  • Usbdex.lib

    Deze helperbibliotheek is nieuw voor Windows 8. De bibliotheek exporteert routines voornamelijk voor het toewijzen en bouwen van URBs. Deze routines vervangen enkele van de verouderde routines die worden geëxporteerd door Usbd.sys. De nieuwe routines vereisen dat het clientstuurprogramma zich registreert bij de USB-stuurprogrammastack, die de ingang voor registratie onderhoudt. Deze ingang wordt gebruikt voor oproepen naar andere Usbdex.lib routines. Bepaalde URB's die door de nieuwe routines worden toegewezen, hebben een URB-context die het USB-stuurprogramma toepast voor betere tracering en verwerking. Zie Toewijzen en bouwen van URB's voor meer informatie.

  • Winusb.dll

    Winusb.dll is een DLL-bestand in de gebruikersmodus waarmee WinUSB-functies worden weergegeven voor de communicatie met Winusb.sys, die wordt geladen als het functiestuurprogramma van een apparaat in de kernelmodus. Toepassingen gebruiken deze functies om het apparaat te configureren, informatie over het apparaat op te halen en I/O-bewerkingen uit te voeren. Zie How to Access a USB Device by Using WinUSB Functions (Een USB-apparaat openen met WinUSB-functies) voor meer informatie over het gebruik van deze functies.