Dela via


WinUSB-enhet

Lär dig mer om hur Windows identifierar en WinUSB-enhet i den här artikeln.

Informationen i den här artikeln gäller för dig om du är en OEM-tillverkare eller oberoende maskinvaruleverantör (IHV) som utvecklar en enhet för att använda Winusb.sys som funktionsdrivrutin. Den här artikeln visar hur du läser in drivrutinen automatiskt utan att behöva ange en anpassad INF.

Vad är en WinUSB-enhet

En WinUSB-enhet är en USB-enhet (Universal Serial Bus) vars inbyggda programvara definierar vissa Funktionsbeskrivningar för Microsoft-operativsystem (OS) som rapporterar "WINUSB" som kompatibelt ID.

Syftet med en WinUSB-enhet är att göra det möjligt för Windows att läsa in Winusb.sys som enhetens funktionsdrivrutin utan en anpassad INF-fil. För en WinUSB-enhet behöver du inte distribuera INF-filer för din enhet, vilket gör drivrutinsinstallationsprocessen enkel för slutanvändare. Om du däremot behöver ange en anpassad INF bör du inte definiera enheten som en WinUSB-enhet och ange enhetens maskinvaru-ID i INF.

Microsoft tillhandahåller Winusb.inf som innehåller information som krävs för att installera Winusb.sys som enhetsdrivrutin för en USB-enhet.

Innan Windows 8 behövde du ange en anpassad INF för att kunna läsa in Winusb.sys som funktionsdrivrutin. Den anpassade INF anger enhetsspecifikt maskinvaru-ID och innehåller även avsnitt från in-box Winusb.inf. Dessa avsnitt krävs för att instansiera tjänsten, kopiera binärfiler i inkorgen och registrera enhetsgränssnittets GUID som program behöver för att hitta enheten och kommunicera med den. Information om hur du skriver en anpassad INF finns i WinUSB (Winusb.sys) Installation.

I Windows 8 uppdateras den inbyggda Winusb.inf-filen så att Windows automatiskt matchar INF med en WinUSB-enhet.

Installation av WinUSB-enhet med den medföljande Winusb.inf

I Windows 8 uppdateras den inbyggda Winusb.inf-filen. INF innehåller ett installationsavsnitt som refererar till ett kompatibelt ID som heter USB\MS_COMP_WINUSB.

[Generic.Section.NTamd64]
%USB\MS_COMP_WINUSB.DeviceDesc%=WINUSB,USB\MS_COMP_WINUSB

Den uppdaterade INF innehåller också en ny installationsklass med namnet USBDevice.

Installationsklassen USBDevice är tillgänglig för de enheter som Microsoft inte tillhandahåller en inkorgsdrivrutin för. Sådana enheter tillhör vanligtvis inte väldefinierade USB-klasser som Ljud, Bluetooth och så vidare och kräver en anpassad drivrutin. Om enheten är en WinUSB-enhet tillhör enheten förmodligen inte en USB-klass. Därför måste enheten installeras under installationsklassen USBDevice. Den uppdaterade Winusb.inf underlättar detta krav.

Om att använda USBDevice-klassen

Använd inte USB-installationsklassen för oklassificerade enheter. Den klassen är reserverad för installation av styrenheter, hubbar och sammansatta enheter. Att felanvända USB-klassen kan leda till betydande tillförlitlighets- och prestandaproblem. Använd USBDevice för oklassificerade enheter.

I Windows 8 lägger du till den här definitionen i INF-filen för att använda enhetsklassen USBDevice:

  [Version]
  ...
  Class=USBDevice
  ClassGuid={88BAE032-5A81-49f0-BC3D-A4FF138216D6}
  ...

I Enhetshanteraren ser du en ny nod med namnet USB Universal Serial Bus-enheteroch enheten visas under noden.

Förutom de föregående raderna i Windows 7 måste du skapa dessa registerinställningar i INF:

  ;---------- Add Registry Section ----------
  [USBDeviceClassReg]
  HKR,,,,"Universal Serial Bus devices"
  HKR,,NoInstallClass,,1
  HKR,,SilentInstall,,1
  HKR,,IconPath,%REG_MULTI_SZ%,"%systemroot%\system32\setupapi.dll,-20"

I Enhetshanteraren visas enheten under USB Universal Serial Bus-enheter. Enhetsklassbeskrivningen härleds dock från registerinställningen som anges i DIN INF.

USBDevice-klassen är inte begränsad till WinUSB. Om du har en anpassad drivrutin för enheten kan du använda installationsklassen USBDevice i den anpassade INF:n.

Under enhetsuppräkning läser USB-drivrutinsstacken det kompatibla ID:t från enheten. Om "WINUSB" är det kompatibla ID:t använder Windows det som enhetsidentifierare och hittar en matchning i den uppdaterade inkorgen Winusb.inf och läser sedan in Winusb.sys som enhetens funktionsdrivrutin.

Den här bilden är för en MUTT-enhet med ett enda gränssnitt som definieras som en WinUSB-enhet, vilket innebär att Winusb.sys läses in som drivrutin för enheten.

Skärmbild av Windows Device Manager som visar en WinUSB-enhet.

För versioner av Windows tidigare än Windows 8 är den uppdaterade Winusb.inf tillgänglig via Windows Update. Om datorn har konfigurerats för att hämta drivrutinsuppdatering automatiskt installeras WinUSB-drivrutinen utan några användaråtgärder med hjälp av det nya INF-paketet.

Så här ändrar du enhetsbeskrivningen för en WinUSB-enhet

För en WinUSB-enhet visar Enhetshanteraren "WinUsb-enhet" som enhetsbeskrivning. Strängen härleds från Winusb.inf. Om det finns flera WinUSB-enheter får alla enheter samma enhetsbeskrivning.

För att unikt identifiera och särskilja enheten i Enhetshanteraren tillhandahåller Windows 8 en ny egenskap i en enhetsklass som instruerar systemet att prioritera enhetsbeskrivningen som rapporteras av enheten (i dess iProduct strängbeskrivning) framför beskrivningen i INF. Den USBDevice-klass som definierats i Windows 8 anger den här egenskapen. När en enhet installeras under klassen USBDevice frågar Windows enheten efter en enhetsbeskrivning och anger Device Manager-strängen till det som hämtas i frågan. I så fall ignoreras enhetsbeskrivningen som anges i INF. Observera enhetsbeskrivningssträngarna: "MUTT" i föregående bild. Strängen tillhandahålls av USB-enheten i dess produktsträngsbeskrivning.

Den nya klassegenskapen stöds inte i tidigare versioner av Windows. Om du vill ha en anpassad enhetsbeskrivning i en tidigare version av Windows måste du skriva en egen anpassad INF.

Så här konfigurerar du en WinUSB-enhet

För att identifiera en USB-enhet som en WinUSB-enhet måste enhetens inbyggda programvara ha Microsoft OS-beskrivningar. Information om deskriptorerna finns i specifikationerna som beskrivs här: Microsoft OS-beskrivningar.

Stöd för utökade funktionsbeskrivningar

För att USB-drivrutinsstacken ska veta att enheten stöder utökade funktionsbeskrivningar måste enheten definiera en OS-strängbeskrivning som lagras vid strängindexet 0xEE. Under uppräkningen frågar drivrutinsstacken efter strängbeskrivningen. Om beskrivningen finns förutsätter drivrutinsstacken att enheten innehåller en eller flera os-funktionsbeskrivningar och de data som krävs för att hämta dessa funktionsbeskrivningar.

Den hämtade strängbeskrivningen har ett bMS_VendorCode fältvärde. Värdet anger leverantörskoden som USB-drivrutinsstacken måste använda för att hämta den utökade funktionsbeskrivningen.

Information om hur du definierar en OS-strängbeskrivning finns i "Operativsystemets strängbeskrivning" i specifikationerna som beskrivs här: Microsoft OS-beskrivningar.

Ange det kompatibla ID:t

En utökad kompatibel ID OS-funktionsbeskrivning som krävs för att samordna den inbyggda Winusb.inf och ladda WinUSB-drivrutinsmodulen.

Den utökade kompatibla funktionsbeskrivningen för ID OS innehåller ett rubrikavsnitt följt av ett eller flera funktionsavsnitt beroende på om enheten är en sammansatt eller icke-kompatibel enhet. Rubrikavsnittet anger längden på hela beskrivningen, antalet funktionsavsnitt och versionsnumret. För en icke-komposita enhet följs huvudet av ett funktionsavsnitt som är associerat med enhetens enda gränssnitt. Fältet compatibleID i avsnittet måste ange "WINUSB" som fältvärde. För en sammansatt enhet finns det flera funktionsavsnitt. Fältet compatibleID för varje funktionsavsnitt måste ange "WINUSB".

Registrera ett GUID för enhetsgränssnittet

En funktionsbeskrivning för utökade egenskaper för operativsystemet som krävs för att registrera dess GUID för enhetsgränssnittet. GUID krävs för att hitta enheten från ett program eller en tjänst, konfigurera enheten och utföra I/O-åtgärder.

I tidigare versioner av Windows görs GUID-registrering i enhetsgränssnittet via den anpassade INF:n. Från och med Windows 8 bör enheten rapportera gränssnittets GUID genom att använda operativsystemets funktionsbeskrivare för utökade egenskaper.

Funktionsbeskrivningen för utökade egenskaper för operativsystemet innehåller ett rubrikavsnitt som följs av ett eller flera anpassade egenskapsavsnitt. Rubrikavsnittet beskriver hela beskrivningen av utökade egenskaper, inklusive dess totala längd, versionsnummer och antalet anpassade egenskapsavsnitt. Om du vill registrera enhetsgränssnittets GUID lägger du till ett anpassat egenskapsavsnitt som anger fältet bPropertyName till "DeviceInterfaceGUID" och wPropertyNameLength till 40 byte. Generera ett unikt GUID för enhetsgränssnittet med hjälp av en GUID-generator och ange fältet bPropertyData till det GUID,till exempel "{8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}". GUID anges som en Unicode-sträng och längden på strängen är 78 byte (inklusive null-avslutaren).

       
bPropertyData 78 byte 7B 00 38 00 46 00 45 00 36 00 44 00 34 00 44 00 37 00 2D 00 34 00 39 00 00 44 00 2D 00 34 00 31 00 45 00 37 00 2D 00 39 00 34 00 38 00 36 00 2D 00 34 00 39 00 41 00 46 00 43 00 36 00 42 00 46 00 45 00 34 00 37 00 35 00 7D 00 00 00 Egenskapsvärdet är {8FE6D4D7-49DD-41E7-9486-49AFC6BFE475}.

Under enhetsuppräkning hämtar USB-drivrutinsstacken sedan värdet DeviceInterfaceGUID från os-funktionsbeskrivningen för utökade egenskaper och registrerar enheten i enhetens maskinvarunyckel. Ett program kan hämta värdet med hjälp av SetupDiXxx API:er (se SetupDiOpenDevRegKey). För mer information, se Hur man får åtkomst till en USB-enhet genom att använda WinUSB-funktioner.

Aktivera eller inaktivera WinUSB-energisparfunktioner

Innan Windows 8, för att konfigurera energihanteringsfunktionerna i WinUSB, var du tvungen att skriva registerpostvärden i HW.AddReg-avsnittet av din anpassade INF.

I Windows 8 och senare kan du ange energisparinställningar på enheten. Du kan rapportera värden via funktionsbeskrivningen för utökade egenskaper för operativsystemet som aktiverar eller inaktiverar funktioner i WinUSB för den enheten. Det finns två funktioner som kan konfigureras: selektiv avstängning och systemväckning. Selektiv avstängning gör att enheten kan gå in i lågeffektläge när den är inaktiv. Systemvakning syftar på möjligheten för en enhet att väcka ett system när systemet är i lågeffektstillstånd.

Information om energisparfunktioner i WinUSB finns i WinUSB Power Management.

Egenskapsnamn Beskrivning
EnhetensVilolägeAktiverat Det här värdet är inställt på 1 för att indikera att enheten kan stängas av när den är inaktiv (selektiv paus).
Förvalt viloläge Det här värdet är inställt på 1 för att indikera att enheten kan pausas när den är inaktiv som standard.
Standard inaktivitetstidsgräns Det här värdet är inställt på 5 000 millisekunder för att ange hur lång tid i millisekunder som ska vänta innan du fastställer att en enhet är inaktiv.
Användarinställning för enhetens viloläge aktiverat Det här värdet är inställt på 1 så att användaren kan styra enhetens möjlighet att aktivera eller inaktivera selektiv USB-återställning. En kryssruta Tillåt att datorn inaktiverar den här enheten för att spara ström på enhetens strömsparhanteringsegenskapssida och användaren kan markera eller avmarkera kryssrutan för att aktivera eller inaktivera selektivt USB-uppehåll.
SystemVäckningAktiverad Det här värdet är inställt på 1 så att användaren kan styra enhetens möjlighet att väcka systemet från ett lågeffektstillstånd. När det är aktiverat visas kryssrutan Tillåt att den här enheten aktiverar datorn på egenskapssidan för enhetskrafthantering. Användaren kan markera eller avmarkera kryssrutan för att aktivera eller inaktivera USB-systemvakning.

Om du till exempel vill aktivera selektiv avstängning på enheten, lägger du till ett anpassat egenskapsavsnitt som ställer in fältet bPropertyName till Unicode-strängen "DeviceIdleEnabled" och wPropertyNameLength till 36 byte. Ange fältet bPropertyData till "0x00000001". Egenskapsvärdena lagras som 32-bitars heltal med little-endian-struktur.

Under uppräkningen läser USB-drivrutinsstacken funktionsbeskrivningarna för utökade egenskaper och skapar registerposter under den här nyckeln:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\USB\<Enhetsidentifierare>\<Instansidentifierare>\Enhetsparametrar

Den här bilden visar exempelinställningar för en WinUSB-enhet.

Skärmbild av Windows Registereditorn som visar inställningar för en WinUSB-enhet.

Fler exempel finns i specifikationerna för Microsoft OS-beskrivningar.