Condividi tramite


CONTENITORI USB in Windows

Questo documento fornisce informazioni su USB ContainerIDs per il sistema operativo Windows. Include linee guida per i produttori di dispositivi per programmare i dispositivi USB multifunzione in modo che possano essere rilevati correttamente da Windows.

A partire da Windows 7, gli utenti possono sfruttare tutte le funzionalità dei dispositivi connessi ai propri computer. Sono inclusi dispositivi multifunzione, ad esempio una stampante combinata, uno scanner e un dispositivo copiatore. Windows 7 include il supporto per consolidare tutte le funzionalità di un singolo dispositivo fisico in un contenitore di dispositivi. Un contenitore di dispositivi è una rappresentazione virtuale del dispositivo fisico. Questo consolidamento viene ottenuto assegnando una proprietà ContainerID a ogni funzione del dispositivo enumerata per il dispositivo fisico. Assegnando lo stesso valore ContainerID a ogni funzione del dispositivo, Windows 7 riconosce che tutte le funzioni del dispositivo appartengono allo stesso dispositivo fisico.

Tutti i tipi di dispositivi che si connettono a un computer tramite tipi di bus diversi possono supportare contenitori di dispositivi. Tuttavia, non tutti i tipi di bus usano lo stesso meccanismo per generare un ContainerID. Per i dispositivi USB, i fornitori di dispositivi possono usare un descrittore ContainerID per descrivere ContainerID per un dispositivo fisico. Un descrittore ContainerID è un descrittore di funzionalità del sistema operativo Microsoft che può essere archiviato nel firmware del dispositivo USB. I produttori di dispositivi USB devono implementare correttamente questi descrittori ContainerID nei propri dispositivi per sfruttare le nuove funzionalità del dispositivo disponibili in Windows 7. I produttori di dispositivi USB devono implementare solo un singolo ContenitoreID per ogni dispositivo fisico, indipendentemente dal numero di funzioni del dispositivo supportate dal dispositivo.

Per altre informazioni sul consolidamento di tutte le funzionalità di un singolo dispositivo in un contenitore di dispositivi, vedere Modalità di generazione degli ID contenitore.

Per altre informazioni sui descrittori del sistema operativo Microsoft per i dispositivi USB, vedere Descrittori del sistema operativo Microsoft per dispositivi USB.

Come viene generato un contenitore USB

Di seguito sono riportati due modi per generare un ContenitoreID per un dispositivo USB:

  • Il produttore del dispositivo USB specifica l'ID contenitore nel firmware del dispositivo usando un descrittore ContainerID del sistema operativo Microsoft.
  • Il driver dell'hub USB Microsoft crea automaticamente un ContenitoreID per il dispositivo dalla combinazione dell'ID prodotto del dispositivo (PID), ID fornitore (VID), numero di revisione e numero di serie. In questo caso, il driver dell'hub USB Microsoft crea un ContainerID con funzionalità minime. Questo metodo si applica solo ai dispositivi con un numero di serie univoco.

Contenuto di USB ContainerID

Un CONTENITORE USB viene presentato al sistema operativo sotto forma di stringa UUID (Universally Unique Identifier). L'UUID ContainerID è contenuto all'interno di un descrittore ContainerID. Un descrittore ContainerID è un descrittore di funzionalità del sistema operativo Microsoft a livello di dispositivo. Di conseguenza, quando il sistema operativo richiede un CONTENITORE USB, il campo wValue della richiesta descrittore deve essere sempre impostato su zero. Per altre informazioni sui descrittori delle funzionalità del sistema operativo Microsoft e sulle richieste di descrittore, vedere Specifica dei descrittori del sistema operativo Microsoft 1.0.

Un descrittore ContainerID è costituito da una sezione di intestazione.

Offset Campo Dimensione Tipo Descrizione
0 dwLength 4 DWord senza segno Lunghezza, in byte, dell'intero descrittore ContainerID . Questo campo deve essere sempre impostato su un valore di 0x18.
4 bcdVersion 2 BCD Numero di versione del descrittore ContainerID , in decimale codificato binario (BCD), dove ogni nibble corrisponde a una cifra. Il byte più significativo (MSB) contiene le due cifre prima del punto decimale e il byte meno significativo (LSB) contiene le due cifre dopo il punto decimale. Ad esempio, la versione 1.00 è rappresentata come 0x0100. Questo campo deve essere sempre impostato su 0x0100.
6 Windex 2 Word Questo campo è sempre impostato su 6 per i descrittori USB ContainerID .

Un descrittore ContainerID è costituito da una sezione ContainerID .

Offset Campo Dimensione Tipo Descrizione
0 bContainerID 16 DWord senza segno Dati containerID .

I produttori di dispositivi sono responsabili della garanzia che ogni istanza di un dispositivo abbia un valore di 16 byte univoco universalmente per ContainerID. Inoltre, un dispositivo deve segnalare lo stesso valore ContainerID ogni volta che è attivato. Esistono diversi algoritmi stabiliti per la generazione di UUID con quasi zero probabilità di duplicazione. I produttori di dispositivi possono selezionare l'algoritmo di generazione UUID più adatto alle proprie esigenze. Non importa quale algoritmo di generazione UUID viene usato purché il risultato sia univoco.

Sintassi USB ContainerID

Un containerID viene segnalato nel formato stringa UUID standard di {xxxxxxxx-xxxx-xxx}. Di seguito è riportata una rappresentazione di esempio nel firmware per un 0C B4 A7 2C D1 7B 25 4F B5 73 A1 3A 97 5D DC 07 USB ContainerID, formattato come stringa {2CA7B40C-7BD1-4F25-B573-A13A975DDC07} 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      //
}

Si noti la modifica nell'ordine di byte dei primi 8 byte quando viene formattata come stringa UUID.

Modifiche del descrittore del sistema operativo Microsoft

Per mantenere la funzionalità containerID legacy, è stato aggiunto un nuovo campo flag al descrittore stringa del sistema operativo Microsoft che può essere usato per indicare il supporto per il descrittore ContainerID .

La definizione corrente del descrittore stringa del sistema operativo Microsoft include un campo pad a 1 byte, bPad, alla fine del descrittore che normalmente è impostato su zero. Per i dispositivi USB che supportano il nuovo ContenitoreID, il campo bPad viene ridefinito come campo flag, bFlags. Bit 1 di questo campo viene usato per indicare il supporto per il descrittore ContainerID . La tabella 3 descrive i campi del descrittore stringa del sistema operativo Microsoft per i dispositivi USB.

Campo Lunghezza (byte) Valore Descrizione
bLength 1 0x12 Lunghezza del descrittore.
bDescriptorType 1 0x03 Tipo descrittore. Un valore di 0x03 indica un descrittore di stringa del sistema operativo Microsoft.
qwSignature 14 'MSFT100' Campo firma.
bMS_VendorCode 1 Codice fornitore Codice fornitore.
bFlags 1 0x02 Bit 0: riservato
Bit 1: Supporto di ContainerID
 0: Non supporta ContainerID
 1: Supporta ContainerID
Bit 2-7: riservato

Attualmente i dispositivi USB che supportano il descrittore del sistema operativo Microsoft, ma non supportano il descrittore ContainerID hanno il campo bPad impostato su 0x00. Il driver dell'hub USB non esegue query su tali dispositivi per il descrittore USB ContainerID .

Visualizzazione contenitore di un dispositivo multifunzione USB

ContainerID fornisce informazioni per consolidare i dispositivi per dispositivi USB multifunzione. La figura 1 mostra un esempio del modo in cui tutti i dispositivi in una stampante multifunzione vengono consolidati in un singolo contenitore di dispositivi quando tutti i singoli dispositivi all'interno del prodotto usano lo stesso ContainerID.

consolidamento di tutti i dispositivi in una stampante multifunzione.

Consolidando tutti i dispositivi per un dispositivo USB multifunzione, il prodotto fisico può essere visualizzato come un singolo dispositivo in Dispositivi e stampanti in Windows 7. La figura 2 mostra un esempio di tastiera e dispositivo mouse multifunzione USB visualizzato come singolo dispositivo in Dispositivi e stampanti.

dispositivo multifunzione nei dispositivi e nelle stampanti.

Requisiti HCK di USB ContainerID

I produttori di dispositivi devono assicurarsi che ogni istanza di un dispositivo che producono abbia un valore ContainerID univoco globale in modo che Windows possa consolidare correttamente la funzionalità di ogni dispositivo a più funzioni USB. Il Kit di certificazione hardware WindowsWindows hardware include un requisito, DEVFUND-0034, per un CONTENITORE USB se viene implementato in un dispositivo. Se un dispositivo implementa un contenitore USB, la certificazione hardware Windows verifica l'ID contenitore come parte dei test del descrittore del sistema operativo Microsoft e verifica se il valore ContainerID è univoco a livello globale. Per altre informazioni su questi requisiti di certificazione hardware Di Windows, vedere il sito Web di Certificazione hardware Windows.

Raccomandazioni per l'implementazione di un CONTENITORE USB I consigli seguenti sono i fornitori di dispositivi che progettano, producono e includono dispositivi USB:

  • Informazioni su come Windows 7 migliora il supporto per la multifunzione e più dispositivi USB di trasporto tramite l'uso di un ContainerID. È consigliabile iniziare leggendo "Supporto dispositivi multifunzione e Raggruppamenti di contenitori dispositivi in Windows 7".
  • Assicurarsi che il numero di serie in ogni dispositivo USB sia univoco. Un requisito di certificazione hardware Windows indica che, se il dispositivo include un numero di serie, il numero di serie deve essere univoco per ogni istanza del dispositivo.
  • Non fornire un ContenitoreID per un dispositivo USB incorporato in un sistema. I dispositivi USB integrati devono basarsi sulle impostazioni DEL BIOS ACPI o sul descrittore dell'hub USB DeviceRemovable bit per la porta.
  • Assicurarsi che tutti i dispositivi USB collegati a un sistema dispongano di valori ContainerID univoci. Non condividere i valori ContainerID o i numeri di serie USB nelle linee di prodotto.
  • Assicurarsi di impostare correttamente la funzionalità dispositivo rimovibile per il dispositivo. Nota I fornitori di dispositivi che aggiungono un descrittore USB ContainerID a un dispositivo USB in precedenza devono aumentare il numero di versione del dispositivo (bcdDevice) nel descrittore del dispositivo. Questo è necessario perché il driver dell'hub USB memorizza nella cache il descrittore stringa del sistema operativo Microsoft (o la mancanza di uno) in base all'ID fornitore di un dispositivo, all'ID prodotto e al numero di versione del dispositivo. Se non si incrementa il numero di rilascio del dispositivo, il driver dell'hub non esegue query sull'ID contenitore USB di un nuovo dispositivo se in precedenza enumera un'istanza del dispositivo con lo stesso ID fornitore, l'ID prodotto e il numero di rilascio del dispositivo che non supportavano il descrittore USB ContainerID .

Creazione di dispositivi USB per Windows
ID contenitore per dispositivi USB