Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Den här artikeln innehåller information om USB ContainerID:er för Windows-operativsystemet. Den innehåller riktlinjer för enhetstillverkare att programmera sina USB-enheter med flera funktioner så att de identifieras korrekt av Windows.
Användarna kan dra nytta av alla funktioner i de enheter som är anslutna till deras datorer. Detta omfattar multifunktionsenheter, till exempel en kombinationsskrivare, skanner och kopiatorenhet. Windows har stöd för att konsolidera alla funktioner för en enskild fysisk enhet i en enhetscontainer. En enhetscontainer är en virtuell representation av den fysiska enheten. Den här konsolideringen uppnås genom att tilldela en ContainerID-egenskap till varje enhetsfunktion som räknas upp för den fysiska enheten. Genom att tilldela samma ContainerID-värde till varje enhetsfunktion identifierar Windows att alla enhetsfunktioner tillhör samma fysiska enhet.
Alla typer av enheter som ansluter till en dator via olika busstyper kan stödja enhetscontainrar. Men inte alla busstyper använder samma mekanism för att generera ett ContainerID. För USB-enheter kan enhetsleverantörer använda en ContainerID-beskrivning för att beskriva ContainerID för en fysisk enhet. En ContainerID-beskrivning är en Funktionsbeskrivning för Microsoft OS som kan lagras i USB-enhetens inbyggda programvara. USB-enhetstillverkare måste implementera dessa ContainerID-beskrivningar korrekt på sina enheter för att dra nytta av de nya enhetsfunktioner som är tillgängliga i Windows. USB-enhetstillverkare behöver bara implementera ett enda ContainerID för varje fysisk enhet, oavsett hur många enhetsfunktioner som stöds av enheten.
Mer information om hur du konsoliderar alla funktioner för en enskild enhet i en enhetscontainer finns i Så här genereras container-ID:n.
Mer information om Microsoft OS-beskrivningar för USB-enheter finns i Microsoft OS-beskrivningar för USB-enheter.
Så här genereras ett USB ContainerID
Följande är två sätt att generera ett ContainerID för en USB-enhet:
- Usb-enhetens tillverkare anger ContainerID i enhetens inbyggda programvara med hjälp av en Microsoft OS ContainerID-beskrivning .
- Microsoft USB Hub-drivrutinen skapar automatiskt ett ContainerID för enheten från kombinationen av enhetens produkt-ID (PID), leverantörs-ID (VID), revisionsnummer och serienummer. I den här situationen skapar Microsoft USB Hub-drivrutinen ett ContainerID med minimal funktionalitet. Den här metoden gäller endast för enheter som har ett unikt serienummer.
USB ContainerID-innehåll
Ett USB ContainerID visas för operativsystemet i form av en UUID-sträng (UniversalLy Unique Identifier). ContainerID UUID finns i en ContainerID-beskrivning. En ContainerID-beskrivning är en funktionsbeskrivning på enhetsnivå för Microsoft OS. När operativsystemet begär ett USB ContainerID måste därför fältet wValue i beskrivningsbegäran alltid vara inställt på noll. Mer information om Microsoft OS-funktionsbeskrivningar och deskriptorbegäranden finns i Microsoft OS 1.0 Descriptors Specification (Specifikation för Microsoft OS 1.0-beskrivningar).
En ContainerID-beskrivning består av ett rubrikavsnitt.
| Offset | Fält | Storlek | Typ | Beskrivning |
|---|---|---|---|---|
| 0 | dwLength | 4 | Osignerad DWord | Längden, i byte, på hela ContainerID-beskrivningen . Det här fältet måste alltid anges till värdet 0x18. |
| 4 | bcdVersion | 2 | BCD | Versionsnumret för ContainerID-beskrivningen i binärkodad decimal (BCD), där varje nibble motsvarar en siffra. Den mest betydande byte (MSB) innehåller de två siffrorna före decimaltecknet och den minst signifikanta byte (LSB) innehåller de två siffrorna efter decimaltecknet. Version 1.00 representeras till exempel som 0x0100. Det här fältet måste alltid vara inställt på 0x0100. |
| 6 | wIndex | 2 | Ord | Det här fältet är alltid inställt på 6 för USB ContainerID-beskrivningar . |
En ContainerID-beskrivning består av ett ContainerID-avsnitt.
| Offset | Fält | Storlek | Typ | Beskrivning |
|---|---|---|---|---|
| 0 | bContainerID | 16 | Osignerad DWord | ContainerID-data. |
Enhetstillverkare ansvarar för att säkerställa att varje instans av en enhet har ett universellt unikt 16-bytesvärde för ContainerID. Dessutom måste en enhet rapportera samma ContainerID-värde varje gång den aktiveras. Det finns flera etablerade algoritmer för att generera UUID:er med nästan noll risk för duplicering. Enhetstillverkare kan välja den UUID-genereringsalgoritm som bäst passar deras behov. Det spelar ingen roll vilken UUID-genereringsalgoritm som används så länge resultatet är unikt.
USB ContainerID-syntax
Ett ContainerID rapporteras i UUID-standardsträngformatet {xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Följande är en exempelrepresentation i inbyggd programvara för en 0C B4 A7 2C D1 7B 25 4F B5 73 A1 3A 97 5D DC 07 USB ContainerID, som är formaterad som en {2CA7B40C-7BD1-4F25-B573-A13A975DDC07} UUID-sträng.
UCHAR ExampleContainerIDDescriptor[24] =
{
0x18, 0x00, 0x00, 0x00, // dwLength - 24 bytes
0x00, 0x01, // bcdVersion - 1.00
0x06, 0x00, // wIndex – 6 for a ContainerID
0x0C, 0xB4, 0xA7, 0x2C, // bContainerID -
0xD1, 0x7B, 0x25, 0x4F, // {2CA7B40C-7BD1-4F25-B573-A13A975DDC07}
0xB5, 0x73, 0xA1, 0x3A, // 0C B4 A7 2C D1 7B 25 4F B5 73 A1 3A 97 5D DC 07
0x97, 0x5D, 0xDC, 0x07 //
}
Observera ändringen i byteordningen för de första 8 byteen när den formateras som en UUID-sträng.
Ändringar i Microsoft OS-beskrivningen
För att bevara äldre ContainerID-funktioner innehåller Microsoft OS-strängbeskrivningen ett flaggfält som kan användas för att ange stöd för ContainerID-beskrivningen .
Den aktuella definitionen av Microsoft OS-strängbeskrivningen innehåller ett 1 bytes pad-fält, bPad, i slutet av beskrivningen som normalt är inställt på noll. För USB-enheter som stöder det nya ContainerID omdefinieras bPad-fältet som ett flaggfält, bFlags. Bit 1 i det här fältet används för att ange stöd för ContainerID-beskrivningen . Tabell 3 beskriver fälten i Microsoft OS-strängbeskrivningen för USB-enheter.
| Fält | Längd (byte) | Värde | Beskrivning |
|---|---|---|---|
| bLength | 1 | 0x12 | Beskrivningens längd. |
| bDescriptorType | 1 | 0x03 | Beskrivningstyp. Värdet 0x03 anger en Microsoft OS-strängbeskrivning. |
| qwSignature | 14 | "MSFT100" | Signaturfält. |
| bMS_VendorCode | 1 | Leverantörskod | Leverantörskod. |
| bFlags | 1 | 0x02 | Bit 0: Reserverad Bit 1: Stöd för ContainerID 0: Stöder inte ContainerID Stödjer ContainerID Bitar 2–7: Reserverade |
För närvarande skickar du USB-enheter som stöder Microsoft OS-beskrivningen men som inte stöder ContainerID-beskrivningen och har bPad-fältet inställt på 0x00. USB-hubbens drivrutin förfrågar inte sådana enheter för USB ContainerID-deskriptor.
Containervy för en USB-multifunktionsenhet
ContainerID tillhandahåller information för att konsolidera enheter för USB-enheter med flera funktioner. Bild 1 visar ett exempel på hur alla enheter i en flerfunktionsskrivare konsolideras till en enda enhetscontainer när alla enskilda enheter i produkten använder samma ContainerID.
KRAV för USB ContainerID HCK
Enhetstillverkare måste se till att varje instans av en enhet som de producerar har ett globalt unikt ContainerID-värde så att Windows kan konsolidera funktionerna för varje USB-multifunktionsenhet. Windows Hardware CertificationWindows Hardware Certification Kit innehåller ett krav, DEVFUND-0034, för ett USB ContainerID om det implementeras på en enhet. Om en enhet implementerar ett USB ContainerID testar Windows maskinvarucertifiering ContainerID som en del av Microsoft OS Descriptor-testerna och kontrollerar om ContainerID-värdet är globalt unikt. Mer information om dessa krav för Windows-maskinvarucertifiering finns på webbplatsen windows maskinvarucertifiering.
Rekommendationer för att implementera ett USB ContainerID Följande är rekommendationer för enhetsleverantörer som utformar, tillverkar och skickar USB-enheter:
Lär dig hur Windows förbättrar stödet för flera funktioner och flera USB-transportenheter med hjälp av ett ContainerID. Vi rekommenderar att du börjar med att läsa "Stöd för flera funktioner och grupper av enhetscontainer i Windows".
Kontrollera att serienumret på varje USB-enhet är unikt. Ett krav för Windows-maskinvarucertifiering anger att serienumret måste vara unikt för varje instans av enheten om enheten innehåller ett serienummer.
Ange inte ett ContainerID för en USB-enhet som är inbäddad i ett system. Integrerade USB-enheter bör förlita sig på ACPI BIOS-inställningar eller USB-hubbdeskriptorn DeviceRemovable-bit för porten.
Kontrollera att alla USB-enheter som är anslutna till ett system har unika ContainerID-värden . Dela inte ContainerID-värden eller USB-serienummer över produktlinjerna.
Se till att ställa in funktionen för flyttbara enheter på rätt sätt för enheten.
Anmärkning
Enhetsleverantörer som lägger till en USB ContainerID beskrivning till en USB-enhet som tidigare har skickats måste öka enhetens versionsnummer (bcdDevice) i enhetsbeskrivningen. Detta krävs eftersom USB-hubbens drivrutin cachelagrar Microsoft OS-strängbeskrivningen (eller bristen på en) baserat på enhetens leverantörs-ID, produkt-ID och enhetsversionsnummer. Om du inte ökar enhetens versionsnummer frågar hubbens drivrutin inte efter USB ContainerID för en ny enhet om den tidigare räknade upp en instans av enheten med samma leverantörs-ID, produkt-ID och enhetsversionsnummer som inte stödde USB ContainerID-beskrivningen .