Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera informacje o identyfikatorach KONTENERIDUSB dla systemu operacyjnego Windows. Zawiera on wytyczne dla producentów urządzeń w celu programowania ich wielofunkcyjnych urządzeń USB, aby zostały prawidłowo wykryte przez system Windows.
Użytkownicy mogą korzystać ze wszystkich możliwości urządzeń połączonych ze swoimi komputerami. Obejmuje to urządzenia wielofunkcyjne, takie jak kombinacja drukarki, skanera i urządzenia kopiującego. System Windows obejmuje obsługę konsolidowania wszystkich funkcji pojedynczego urządzenia fizycznego w kontenerze urządzeń. Kontener urządzenia to wirtualna reprezentacja urządzenia fizycznego. Ta konsolidacja jest osiągana przez przypisanie właściwości ContainerID do każdej funkcji urządzenia, która jest wyliczana dla urządzenia fizycznego. Przypisując tę samą wartość ContainerID do każdej funkcji urządzenia, system Windows rozpoznaje, że wszystkie funkcje urządzenia należą do tego samego urządzenia fizycznego.
Wszystkie typy urządzeń łączących się z komputerem za pośrednictwem różnych typów magistrali mogą obsługiwać kontenery urządzeń. Jednak nie wszystkie typy magistrali używają tego samego mechanizmu do generowania identyfikatora ContainerID. W przypadku urządzeń USB dostawcy urządzeń mogą użyć deskryptora ContainerID do opisania identyfikatora ContainerID dla urządzenia fizycznego. Deskryptor containerID to deskryptor funkcji systemu operacyjnego Firmy Microsoft, który może być przechowywany w oprogramowaniu układowym urządzenia USB. Producenci urządzeń USB muszą poprawnie zaimplementować te deskryptory ContainerID na swoich urządzeniach, aby móc korzystać z nowych funkcji urządzeń dostępnych w systemie Windows. Producenci urządzeń USB muszą zaimplementować tylko jeden identyfikator ContainerID dla każdego urządzenia fizycznego, niezależnie od liczby funkcji urządzeń obsługiwanych przez urządzenie.
Aby uzyskać więcej informacji na temat konsolidowania wszystkich funkcji pojedynczego urządzenia w kontenerze urządzeń, zobacz Jak są generowane identyfikatory kontenerów.
Aby uzyskać więcej informacji na temat deskryptorów systemu operacyjnego Microsoft dla urządzeń USB, zobacz Deskryptory systemu operacyjnego Microsoft dla urządzeń USB.
Jak jest generowany identyfikator kontenera USB
Poniżej przedstawiono dwa sposoby generowania identyfikatora ContainerID dla urządzenia USB:
- Producent urządzenia USB określa identyfikator ContainerID w oprogramowaniu układowym urządzenia przy użyciu deskryptora ContainerID systemu operacyjnego Microsoft.
- Sterownik koncentratora USB firmy Microsoft automatycznie tworzy identyfikator ContainerID dla urządzenia z kombinacji identyfikatora produktu (PID), identyfikatora dostawcy (VID), numeru wersji i numeru seryjnego. W takiej sytuacji sterownik koncentratora USB firmy Microsoft tworzy identyfikator ContainerID z minimalną funkcjonalnością. Ta metoda ma zastosowanie tylko do urządzeń, które mają unikatowy numer seryjny.
Zawartość identyfikatora kontenera USB
Identyfikator kontenera USB jest przedstawiany systemowi operacyjnemu w postaci ciągu uniwersalnego unikatowego identyfikatora (UUID). Identyfikator UUID kontenera jest zawarty w deskryptorze ContainerID. Deskryptor containerID to deskryptor funkcji systemu operacyjnego firmy Microsoft na poziomie urządzenia. W związku z tym, gdy system operacyjny żąda identyfikatora ContainerID USB, pole wValue żądania deskryptora musi być zawsze ustawione na zero. Aby uzyskać więcej informacji na temat deskryptorów funkcji i żądań deskryptorów systemu operacyjnego Microsoft, zobacz Specyfikacja deskryptorów systemu operacyjnego Microsoft 1.0.
Deskryptor ContainerID składa się z sekcji nagłówka.
| Przesunięcie | (No changes needed) | Rozmiar | Typ | Opis |
|---|---|---|---|---|
| 0 | dwLength | 4 | Niepodpisany d-word | Długość w bajtach całego deskryptora ContainerID . To pole musi być zawsze ustawione na wartość 0x18. |
| 4 | bcdVersion | 2 | BCD | Numer wersji deskryptora ContainerID w kodzie dziesiętnym zakodowanym binarnie (BCD), gdzie każdy nibble odpowiada cyfrze. Najbardziej znaczący bajt (MSB) zawiera dwie cyfry przed punktem dziesiętnym, a najmniej znaczący bajt (LSB) zawiera dwie cyfry po przecinku dziesiętnym. Na przykład wersja 1.00 jest reprezentowana jako 0x0100. To pole musi być zawsze ustawione na 0x0100. |
| 6 | wIndex | 2 | Słowo | To pole jest zawsze ustawione na 6 dla deskryptorów USB ContainerID . |
Deskryptor ContainerID składa się z sekcji ContainerID.
| Przesunięcie | (No changes needed) | Rozmiar | Typ | Opis |
|---|---|---|---|---|
| 0 | bContainerID | 16 | Niepodpisane DWord | Dane identyfikatora kontenera . |
Producenci urządzeń są odpowiedzialni za zapewnienie, że każde wystąpienie urządzenia ma uniwersalnie unikatową wartość 16 bajtów dla identyfikatora ContainerID. Ponadto urządzenie musi zgłaszać tę samą wartość ContainerID za każdym razem, gdy jest włączona. Istnieje kilka ustalonych algorytmów generowania identyfikatorów UUID z niemal zerową szansą na duplikowanie. Producenci urządzeń mogą wybrać algorytm generowania identyfikatora UUID, który najlepiej odpowiada ich potrzebom. Nie ma znaczenia, który algorytm generowania identyfikatora UUID jest używany tak długo, jak wynik jest unikatowy.
Składnia identyfikatora kontenera USB
Identyfikator ContainerID jest zgłaszany w standardowym formacie ciągu UUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}. Poniżej przedstawiono przykładową reprezentację w oprogramowaniu układowym dla 0C B4 A7 2C D1 7B 25 4F B5 73 A1 3A 97 5D DC 07 USB ContainerID, który jest sformatowany jako {2CA7B40C-7BD1-4F25-B573-A13A975DDC07} ciąg UUID.
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 //
}
Zwróć uwagę na zmianę kolejności bajtów pierwszych 8 bajtów, gdy jest ona sformatowana jako ciąg UUID.
Zmiany deskryptora systemu operacyjnego Microsoft
Aby zachować starsze funkcje ContainerID, deskryptor łańcucha znaków systemu operacyjnego Microsoft zawiera pole flagi, które może służyć do wskazywania wsparcia dla deskryptora ContainerID.
Bieżąca definicja deskryptora ciągów systemu operacyjnego Microsoft zawiera pole 1-bajtowego okienka, bPad, na końcu deskryptora, który jest zwykle ustawiony na zero. W przypadku urządzeń USB, które obsługują nowy identyfikator ContainerID, pole bPad jest ponownie definiowane jako pole flag, bFlags. Bit 1 tego pola wskazuje na obsługę deskryptora ContainerID. W tabeli 3 opisano pola deskryptora ciągów systemu operacyjnego Microsoft dla urządzeń USB.
| (No changes needed) | Długość (bajty) | Wartość | Opis |
|---|---|---|---|
| bLength | 1 | 0x12 | Długość deskryptora. |
| bDescriptorType | 1 | 0x03 | Typ deskryptora. Wartość 0x03 wskazuje deskryptor ciągu systemu operacyjnego Microsoft. |
| qwSignature | 14 | "MSFT100" | Pole podpisu. |
| bMS_VendorCode | 1 | Kod dostawcy | Kod dostawcy. |
| bFlags | 1 | 0x02 | Bit 0: zarezerwowany Bit 1. Obsługa identyfikatorów KontenerID 0: Nie obsługuje identyfikatora ContainerID 1: Obsługuje identyfikator ContainerID Bity 2–7: zarezerwowane |
Obecnie urządzenia USB obsługujące deskryptor systemu operacyjnego Microsoft, ale nie obsługujące deskryptora ContainerID, mają ustawione pole bPad na wartość 0x00. Sterownik koncentratora USB nie odpytuje takich urządzeń o deskryptor USB ContainerID.
Widok kontenera urządzenia wielofunkcyjnego USB
Identyfikator ContainerID dostarcza informacje do konsolidowania wielofunkcyjnych urządzeń USB. Rysunek 1 przedstawia przykład konsolidowania wszystkich urządzeń w drukarce wielofunkcyjnej w jednym kontenerze urządzeń, gdy wszystkie poszczególne urządzenia w produkcie używają tego samego identyfikatora ContainerID.
Wymagania dotyczące interfejsu USB ContainerID HCK
Producenci urządzeń muszą upewnić się, że każde wystąpienie urządzenia, które generuje, ma globalnie unikatową wartość ContainerID , aby system Windows mógł pomyślnie skonsolidować funkcjonalność każdego urządzenia wielofunkcyjnego USB. Zestaw certyfikacji sprzętu systemu WindowsWindows Hardware Certification Kit zawiera wymaganie DEVFUND-0034 dla identyfikatora CONTAINERID USB, jeśli jest zaimplementowany w urządzeniu. Jeśli urządzenie implementuje identyfikator ContainerID USB, certyfikacja sprzętu systemu Windows testuje identyfikator ContainerID w ramach testów deskryptora systemu operacyjnego Microsoft i sprawdza, czy wartość ContainerID jest globalnie unikatowa. Aby uzyskać więcej informacji na temat tych wymagań dotyczących certyfikacji sprzętu systemu Windows, zobacz witrynę sieci Web certyfikacji sprzętu systemu Windows.
Zalecenia dotyczące implementowania identyfikatora kontenera USB Poniżej przedstawiono zalecenia dla firm, które projektują, produkują i wysyłają urządzenia USB:
Dowiedz się, jak system Windows ulepsza obsługę urządzeń wielofunkcyjnych i urządzeń USB z wieloma protokołami transportowymi przy użyciu identyfikatora ContainerID. Zalecamy rozpoczęcie od przeczytania artykułu "Obsługa urządzeń wielofunkcyjnych i grupowanie kontenerów urządzeń w systemie Windows".
Upewnij się, że numer seryjny każdego urządzenia USB jest unikatowy. Wymaganie dotyczące certyfikacji sprzętu systemu Windows oznacza, że jeśli urządzenie zawiera numer seryjny, numer seryjny musi być unikatowy dla każdego wystąpienia urządzenia.
Nie udostępniaj identyfikatora ContainerID dla urządzenia USB osadzonego w systemie. Zintegrowane urządzenia USB powinny polegać na ustawieniach BIOS ACPI lub deskryptorze koncentratora USB z bitem DeviceRemovable dla portu.
Upewnij się, że wszystkie urządzenia USB dołączone do systemu mają unikatowe wartości ContainerID . Nie udostępniaj wartości ContainerID ani numerów seryjnych USB w liniach produktów.
Upewnij się, że poprawnie ustawisz opcję Możliwości urządzenia wymiennego dla urządzenia.
Uwaga / Notatka
Dostawcy urządzeń, którzy dodają deskryptor USB ContainerID do wcześniej istniejącego urządzenia USB, muszą zwiększyć numer wersji urządzenia (bcdDevice) w deskryptorze urządzenia. Jest to wymagane, ponieważ sterownik koncentratora USB buforuje deskryptor ciągu systemu operacyjnego Microsoft (lub jego brak) na podstawie identyfikatora dostawcy urządzenia, identyfikatora produktu i numeru wydania urządzenia. Jeśli nie zwiększysz numeru wersji urządzenia, sterownik koncentratora nie wykonuje zapytania o USB ContainerID nowego urządzenia, jeśli wcześniej wyliczył wystąpienie urządzenia o tym samym identyfikatorze dostawcy, identyfikatorze produktu i numerze wersji urządzenia, które nie obsługiwało deskryptora USB ContainerID.
Tematy pokrewne
- Tworzenie urządzeń USB dla systemu Windows
- identyfikatory kontenerów dla urządzeń USB