C’è qualcosa di particolarmente soddisfacente nel collegare un dispositivo USB a un computer Windows e vederlo comparire quasi immediatamente. Windows identifica l’hardware, carica il driver appropriato, assegna al dispositivo di archiviazione una lettera di unità e, nel giro di uno o due secondi, l’unità USB è pronta per essere utilizzata.
La maggior parte degli utenti non ha mai bisogno di pensare a ciò che è accaduto durante quei pochi secondi. Per gli sviluppatori, gli amministratori IT, gli ingegneri hardware e chiunque scriva software che interagisce con dispositivi USB, tuttavia, questo processo automatico solleva una domanda importante: da dove ottiene Windows le informazioni utilizzate per identificare il dispositivo?
Una chiavetta USB può comunicare più di un’identità. A livello USB, il dispositivo segnala un Vendor ID, comunemente chiamato VID, e un Product ID, comunemente chiamato PID. Dopo che Windows ha riconosciuto il dispositivo come unità di archiviazione di massa USB, il dispositivo può inoltre comunicare una stringa SCSI Vendor, una stringa SCSI Product e una revisione del prodotto.
Questi valori sono correlati perché descrivono lo stesso dispositivo fisico, ma non provengono dalla stessa origine. Non sono intercambiabili e non identificano sempre lo stesso produttore o lo stesso nome di prodotto.
Windows 10 mette a disposizione diversi metodi per visualizzare o recuperare queste informazioni. Alcuni sono pensati per una persona seduta davanti al computer. Altri sono più adatti a script, sistemi di inventario, software diagnostici o applicazioni che devono identificare automaticamente i dispositivi di archiviazione USB.
VID e PID USB rispetto a produttore e prodotto SCSI
Prima di esaminare i diversi metodi disponibili in Windows, è utile comprendere le due identità coinvolte.
Il Vendor ID e il Product ID USB provengono dai descrittori USB del dispositivo. Questi valori vengono comunicati quando il dispositivo USB viene collegato per la prima volta e Windows avvia il processo di enumerazione USB.
Un tipico identificatore hardware USB potrebbe avere questo aspetto:
USB\VID_090C&PID_1000&REV_1100
USB\VID_090C&PID_1000
In questo esempio, i valori sono:
USB VID = 090C
USB PID = 1000
Il VID serve a identificare il produttore USB, mentre il PID identifica un prodotto o una famiglia di prodotti assegnata da quel produttore. Entrambi i valori sono numeri esadecimali.
Dopo aver stabilito che il dispositivo collegato è un dispositivo di archiviazione di massa USB, Windows comunica con esso attraverso il livello dei comandi di archiviazione. Una risposta standard a una richiesta SCSI Inquiry può includere una stringa Vendor, una stringa Product e una stringa Revision.
Un identificatore hardware relativo all’archiviazione potrebbe avere questo aspetto:
USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07
In questo esempio, i valori sono:
SCSI Vendor = Generic
SCSI Product = Flash Disk
SCSI Revision = 8.07
Il VID e il PID USB sono identificatori numerici utilizzati durante l’enumerazione USB. I campi SCSI Vendor e Product sono stringhe di testo comunicate attraverso l’interfaccia di archiviazione. Il produttore di un dispositivo può modificare una delle due identità senza necessariamente modificare anche l’altra.
Per questo motivo, una chiavetta USB potrebbe comunicare un VID USB associato al produttore del controller, mentre nel campo SCSI Product potrebbe comparire il nome commerciale del prodotto, il nome di un cliente o una descrizione generica come “USB Flash Disk”.
Come Windows costruisce le due identità del dispositivo
Il modo più semplice per rappresentare il processo è considerarlo composto da due fasi. Windows identifica innanzitutto l’hardware USB collegato. Successivamente identifica il dispositivo di archiviazione che funziona attraverso quella connessione USB.
Il VID e il PID USB diventano disponibili durante la prima fase. I campi SCSI Vendor, Product e Revision diventano disponibili dopo il caricamento del driver di archiviazione di massa USB e dopo che Windows ha interrogato il dispositivo di archiviazione.
Questa distinzione aiuta anche a spiegare perché Windows possa ricordare un dispositivo USB dopo che è stato scollegato. Come spiegato nel nostro articolo sul motivo per cui Windows conserva una cronologia dei dispositivi USB collegati in precedenza, Windows memorizza le informazioni raccolte durante l’enumerazione del dispositivo, in modo da poter riconoscere e gestire l’hardware la volta successiva che viene collegato.
Perché qualcuno dovrebbe avere bisogno di entrambi i gruppi di informazioni?
Per una semplice attività di risoluzione dei problemi, il VID e il PID USB potrebbero essere sufficienti. Per l’inventario dei dispositivi, la produzione, la diagnostica o lo sviluppo software, raccogliere entrambe le identità permette invece di ottenere un quadro più completo.
Un’applicazione di inventario potrebbe utilizzare il VID e il PID USB per raggruppare i dispositivi in base alla piattaforma hardware, mostrando contemporaneamente all’utente le stringhe SCSI Vendor e Product. Un’utilità di produzione potrebbe verificare che sia collegato un controller USB supportato prima di eseguire un’operazione. Un programma diagnostico potrebbe registrare tutti gli identificatori, così da poter confrontare in seguito i risultati ottenuti da dispositivi differenti.
Gli strumenti di analisi forense digitale possono raccogliere questi identificatori come parte della documentazione relativa a un dispositivo. Un software di convalida USB può confrontare l’identità comunicata dal dispositivo con il comportamento osservato durante le prove. Questo può essere utile perché il nome, la capacità e le prestazioni dichiarate da un dispositivo USB non dimostrano necessariamente quale hardware si trovi realmente al suo interno.
Lo stesso principio si applica all’integrità dei dati. Le informazioni identificative ci dicono ciò che il dispositivo dichiara di essere, mentre i test ci dicono come si comporta realmente. Il nostro articolo che spiega perché la verifica dei dati USB dovrebbe talvolta includere un ciclo di alimentazione esamina una differenza simile tra le informazioni comunicate immediatamente e quelle dimostrate dopo che il dispositivo è stato scollegato e ricollegato.
Metodo 1: utilizzare Gestione dispositivi di Windows
Gestione dispositivi è il punto di partenza più semplice, perché non richiede l’uso della riga di comando, di script o di programmazione. Il dettaglio importante è che l’identità USB e l’identità di archiviazione compaiono normalmente sotto due voci differenti del dispositivo.
Trovare il VID e il PID USB
Aprire Gestione dispositivi ed espandere la sezione denominata Controller USB (Universal Serial Bus). Individuare il dispositivo di archiviazione di massa USB associato all’unità, fare clic su di esso con il pulsante destro del mouse e selezionare Proprietà.
Selezionare la scheda Dettagli e scegliere ID hardware dall’elenco a discesa Proprietà.
Gestione dispositivi
→ Controller USB (Universal Serial Bus)
→ Dispositivo di archiviazione di massa USB
→ Proprietà
→ Dettagli
→ ID hardware
Un risultato tipico potrebbe avere questo aspetto:
USB\VID_090C&PID_1000&REV_1100
USB\VID_090C&PID_1000
I quattro caratteri che seguono VID_ costituiscono il Vendor ID USB. I quattro caratteri che seguono PID_ costituiscono il Product ID USB.
Trovare il produttore e il prodotto SCSI
Tornare in Gestione dispositivi ed espandere Unità disco. Individuare la chiavetta USB, fare clic su di essa con il pulsante destro del mouse e selezionare Proprietà. Aprire nuovamente la scheda Dettagli e selezionare ID hardware.
Gestione dispositivi
→ Unità disco
→ Chiavetta USB
→ Proprietà
→ Dettagli
→ ID hardware
Il risultato potrebbe essere simile al seguente:
USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07
Windows ha formattato i valori all’interno di un identificatore hardware Plug and Play:
Ven_Generic = Produttore SCSI
Prod_Flash_Disk = Prodotto SCSI
Rev_8.07 = Revisione SCSI
Gestione dispositivi è una scelta eccellente quando si desidera esaminare manualmente un singolo dispositivo. Il suo limite è che associare la voce corretta del dispositivo di archiviazione di massa USB alla corrispondente voce dell’unità disco può diventare complicato quando sono collegate contemporaneamente più unità USB.
Metodo 2: utilizzare PowerShell
PowerShell è una scelta migliore quando le informazioni devono essere raccolte ripetutamente, visualizzate all’interno di un rapporto o recuperate da più di un computer. Windows 10 include PowerShell e i cmdlet Plug and Play necessari per un’ispezione di base dei dispositivi.
Elencare i dispositivi USB presenti che contengono un VID e un PID
Aprire PowerShell ed eseguire il seguente comando:
Get-PnpDevice -PresentOnly |
Where-Object {
$_.InstanceId -match '^USB\\VID_'
} |
Select-Object FriendlyName, Class, InstanceId
L’output includerà ID di istanza del dispositivo simili al seguente:
USB\VID_090C&PID_1000\1234567890
L’esempio successivo estrae il VID e il PID inserendoli in colonne separate:
Get-PnpDevice -PresentOnly |
Where-Object {
$_.InstanceId -match '^USB\\VID_'
} |
ForEach-Object {
if ($_.InstanceId -match 'VID_([0-9A-F]{4})&PID_([0-9A-F]{4})') {
[PSCustomObject]@{
DeviceName = $_.FriendlyName
VID = $matches[1]
PID = $matches[2]
InstanceId = $_.InstanceId
}
}
}
Questo è utile perché trasforma una lunga stringa di istanza del dispositivo Windows in un risultato più chiaro, contenente il nome del dispositivo, il VID e il PID.
Elencare le informazioni di archiviazione USB
Il seguente comando PowerShell interroga la classe delle unità disco di Windows e filtra i risultati per mostrare i dispositivi di archiviazione USB:
Get-CimInstance Win32_DiskDrive |
Where-Object {
$_.InterfaceType -eq 'USB' -or
$_.PNPDeviceID -like 'USBSTOR*'
} |
Select-Object DeviceID,
Manufacturer,
Model,
FirmwareRevision,
PNPDeviceID
Un risultato potrebbe avere questo aspetto:
DeviceID : \\.\PHYSICALDRIVE2
Manufacturer : Generic
Model : Flash Disk USB Device
FirmwareRevision: 8.07
PNPDeviceID : USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07...
I campi Manufacturer e Model possono essere comodi, ma non vengono compilati in modo uniforme da tutti i dispositivi di archiviazione USB. Il campo PNPDeviceID fornisce spesso la rappresentazione più chiara dei valori Vendor, Product e Revision ricevuti da Windows.
PowerShell è una delle migliori opzioni generiche perché non richiede un’applicazione compilata. La parte più complessa consiste nel correlare una voce del dispositivo a livello USB con il relativo disco fisico quando sono collegati più dispositivi. Uno script più avanzato può seguire le relazioni padre-figlio tra i dispositivi Windows per eseguire questa associazione.
Metodo 3: utilizzare WMI o il comando WMIC
Windows Management Instrumentation, normalmente abbreviato in WMI, viene utilizzato da molti anni per recuperare informazioni sull’hardware e sul sistema operativo. Molti computer con Windows 10 includono inoltre la precedente utilità da riga di comando WMIC.
WMIC è utile per eseguire verifiche rapide e mantenere script meno recenti, anche se PowerShell e CIM rappresentano generalmente scelte migliori per i nuovi sviluppi.
Visualizzare le informazioni sui dischi USB con WMIC
Aprire il Prompt dei comandi ed eseguire:
wmic diskdrive get DeviceID,InterfaceType,Manufacturer,Model,FirmwareRevision,PNPDeviceID
Per limitare il risultato alle unità disco che utilizzano un’interfaccia USB, eseguire:
wmic diskdrive where "InterfaceType='USB'" get DeviceID,Manufacturer,Model,FirmwareRevision,PNPDeviceID
Un risultato tipico potrebbe essere simile al seguente:
DeviceID Manufacturer Model FirmwareRevision
\\.\PHYSICALDRIVE2 Generic Flash Disk USB Device 8.07
La colonna PNPDeviceID potrebbe contenere un valore più lungo:
USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07\...
Cercare nelle voci Plug and Play i valori VID e PID USB
Il seguente comando WMIC cerca tra i dispositivi Plug and Play le voci che contengono un VID USB:
wmic path Win32_PnPEntity where "PNPDeviceID like 'USB%%VID_%%'" get Name,PNPDeviceID
I doppi segni di percentuale vengono utilizzati da WMIC come caratteri jolly all’interno della query.
WMIC potrebbe non essere presente o abilitato in tutte le installazioni Windows più recenti, inoltre Microsoft sta orientando gli script amministrativi verso PowerShell. Tuttavia, per un’utilità Windows 10 o per uno script aziendale già esistente, WMI può ancora fornire informazioni utili.
Metodo 4: utilizzare SetupAPI di Windows
Il software scritto in C o C++ può recuperare le informazioni dei dispositivi Plug and Play di Windows attraverso SetupAPI. Si tratta di un approccio pratico per le applicazioni desktop che devono rilevare automaticamente i dispositivi USB, anziché richiedere all’utente di cercarli manualmente in Gestione dispositivi.
Un’applicazione SetupAPI completa include la gestione degli errori, buffer dinamici, analisi delle proprietà dei dispositivi e operazioni di pulizia. Il seguente esempio abbreviato mostra le principali chiamate Windows coinvolte.
Creare un insieme di informazioni sui dispositivi
#include <windows.h>
#include <setupapi.h>
HDEVINFO deviceInfoSet = SetupDiGetClassDevsW(
nullptr,
L"USB",
nullptr,
DIGCF_ALLCLASSES | DIGCF_PRESENT
);
Questo codice crea un insieme di informazioni contenente i dispositivi USB attualmente presenti nel computer.
Enumerare le voci dei dispositivi
SP_DEVINFO_DATA deviceInfoData{};
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (
DWORD index = 0;
SetupDiEnumDeviceInfo(
deviceInfoSet,
index,
&deviceInfoData
);
++index
) {
// Recuperare qui le proprietà del dispositivo.
}
Leggere la proprietà dell’ID hardware
WCHAR hardwareIds[4096]{};
DWORD requiredSize = 0;
if (SetupDiGetDeviceRegistryPropertyW(
deviceInfoSet,
&deviceInfoData,
SPDRP_HARDWAREID,
nullptr,
reinterpret_cast<PBYTE>(hardwareIds),
sizeof(hardwareIds),
&requiredSize
)) {
// Cercare in hardwareIds:
// VID_xxxx
// PID_xxxx
}
La proprietà dell’ID hardware restituita può contenere una o più stringhe separate da caratteri null. Una voce relativa a un dispositivo USB potrebbe contenere un identificatore come il seguente:
USB\VID_090C&PID_1000&REV_1100
L’applicazione può cercare all’interno della stringa i campi VID_ e PID_ ed estrarre i quattro caratteri esadecimali che seguono ciascun campo.
Al termine, l’insieme di informazioni sui dispositivi deve essere rilasciato:
SetupDiDestroyDeviceInfoList(deviceInfoSet);
SetupAPI è molto potente, ma esiste un dettaglio importante: Windows rappresenta il dispositivo USB e il disco fisico come nodi separati nell’albero dei dispositivi. Recuperare il VID e il PID USB è relativamente semplice. Associare questi valori al disco corretto, alla lettera di unità e all’identità SCSI può richiedere l’attraversamento delle relazioni padre-figlio tra i dispositivi.
Questo è uno dei motivi per cui un’applicazione diagnostica commerciale richiede normalmente una quantità di codice superiore a quella suggerita da una breve dimostrazione. Le singole proprietà sono disponibili, ma il vero lavoro consiste nel riunire correttamente tutte le informazioni all’interno di un unico record del dispositivo.
Metodo 5: interrogare direttamente il dispositivo di archiviazione
Un’applicazione Windows può interrogare un disco fisico aprendo il dispositivo e inviando una richiesta IOCTL_STORAGE_QUERY_PROPERTY. Questo metodo è utile per recuperare informazioni di archiviazione come produttore, prodotto, revisione, numero di serie e tipo di bus.
L’esempio seguente apre PhysicalDrive2. Il numero effettivo dell’unità fisica dipenderà dal computer e dal dispositivo USB che si sta esaminando.
Aprire l’unità fisica
HANDLE drive = CreateFileW(
L"\\\\.\\PhysicalDrive2",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr,
OPEN_EXISTING,
0,
nullptr
);
if (drive == INVALID_HANDLE_VALUE) {
// Gestire l’errore.
}
Preparare la richiesta di archiviazione
STORAGE_PROPERTY_QUERY query{};
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;
Inviare la richiesta a Windows
BYTE buffer[4096]{};
DWORD bytesReturned = 0;
BOOL result = DeviceIoControl(
drive,
IOCTL_STORAGE_QUERY_PROPERTY,
&query,
sizeof(query),
buffer,
sizeof(buffer),
&bytesReturned,
nullptr
);
Interpretare il descrittore di archiviazione restituito
if (result) {
auto descriptor =
reinterpret_cast<STORAGE_DEVICE_DESCRIPTOR*>(buffer);
const char* vendor =
descriptor->VendorIdOffset
→ reinterpret_cast<const char*>(
buffer + descriptor->VendorIdOffset
)
: "";
const char* product =
descriptor->ProductIdOffset
→ reinterpret_cast<const char*>(
buffer + descriptor->ProductIdOffset
)
: "";
const char* revision =
descriptor->ProductRevisionOffset
→ reinterpret_cast<const char*>(
buffer + descriptor->ProductRevisionOffset
)
: "";
const char* serial =
descriptor->SerialNumberOffset
→ reinterpret_cast<const char*>(
buffer + descriptor->SerialNumberOffset
)
: "";
}
Le stringhe non vengono memorizzate direttamente nella parte fissa della struttura. La struttura fornisce invece degli offset in byte che indicano la posizione di quelle stringhe all’interno del buffer restituito.
Al termine dell’utilizzo dell’handle dell’unità fisica, chiuderlo:
CloseHandle(drive);
Una richiesta di archiviazione completata correttamente può fornire informazioni simili alle seguenti:
Vendor = Generic
Product = Flash Disk
Revision = 8.07
Serial = 1234567890
Bus Type = USB
Questo metodo opera a un livello più vicino al dispositivo di archiviazione rispetto alla lettura di un nome descrittivo da Gestione dispositivi o all’interrogazione di un valore memorizzato nella cache del Registro di sistema. Tuttavia, non restituisce automaticamente il VID e il PID USB. L’applicazione deve comunque correlare il disco fisico al relativo dispositivo USB padre e recuperare separatamente l’identificatore hardware USB, normalmente tramite SetupAPI o le funzioni di Gestione configurazione di Windows.
Quale metodo Windows è preferibile utilizzare?
Non esiste un unico metodo migliore per ogni situazione. La scelta corretta dipende dal fatto che l’obiettivo sia un’ispezione manuale, l’utilizzo di script, lo sviluppo software o un’analisi del dispositivo a basso livello.
Apri il confronto tra i metodi di identificazione USB in Windows
| Metodo | VID/PID USB | Produttore/prodotto SCSI | Programmazione richiesta | Utilizzo ideale |
|---|---|---|---|---|
| Gestione dispositivi | Sì | Sì | No | Ispezione manuale di un singolo dispositivo |
| PowerShell | Sì | Sì | Script leggeri | Inventario e rapporti ripetibili |
| WMI o WMIC | Sì | Sì | Script leggeri | Sistemi meno recenti e script esistenti |
| SetupAPI | Sì | Tramite correlazione dei dispositivi | Sì | Applicazioni Windows e utilità USB |
| Richiesta di archiviazione | Non direttamente | Sì | Sì | Diagnostica e informazioni dirette sull’archiviazione |
Per una persona che deve controllare una singola unità USB, Gestione dispositivi è normalmente sufficiente. Per gli amministratori che raccolgono informazioni da molti computer, PowerShell rappresenta probabilmente il punto di partenza migliore. Per gli sviluppatori che realizzano un’utilità Windows, SetupAPI combinata con una richiesta delle proprietà di archiviazione offre l’approccio più completo.
Il Registro di sistema di Windows è un altro metodo?
Windows memorizza nel Registro di sistema le informazioni relative all’enumerazione USB ed è possibile individuare al suo interno sia le voci USB sia quelle relative all’archiviazione USB.
Le voci dei dispositivi USB si trovano comunemente in:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
Le voci dei dispositivi di archiviazione USB si trovano comunemente in:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR
Queste posizioni sono utili per la risoluzione dei problemi e l’analisi storica, ma il Registro di sistema non deve essere confuso con la fonte originale delle informazioni. Windows crea e aggiorna queste voci dopo aver già enumerato il dispositivo USB e interrogato l’interfaccia di archiviazione.
Il VID e il PID USB originali provengono dai descrittori USB. I valori originali Vendor, Product e Revision relativi all’archiviazione provengono dalla risposta Inquiry del dispositivo di archiviazione. Il Registro di sistema è il luogo in cui Windows registra i risultati per utilizzarli successivamente.
Anche le autorizzazioni del Registro di sistema possono rendere scomodo l’accesso diretto da parte del software. Quando un’applicazione necessita soltanto di informazioni sui dispositivi attualmente collegati, le API dei dispositivi Windows ufficialmente supportate rappresentano normalmente una scelta migliore.
Perché i nomi USB e SCSI potrebbero non corrispondere
È comune aspettarsi che ogni identificatore mostri lo stesso nome del produttore. In pratica, le chiavette USB sono costruite utilizzando diversi livelli di hardware e firmware e ogni livello può comunicare informazioni differenti.
Un’azienda che vende chiavette USB al dettaglio potrebbe acquistare il controller da un altro produttore. Il VID USB potrebbe identificare il produttore del controller o l’azienda responsabile del firmware, mentre il campo SCSI Product potrebbe contenere il nome del marchio commerciale. In altri casi, le stringhe SCSI rimangono completamente generiche.
Un dispositivo potrebbe comunicare:
USB VID = 090C
USB PID = 1000
SCSI Vendor = Generic
SCSI Product = Flash Disk
Un’altra unità potrebbe comunicare:
USB VID = 0951
USB PID = 1666
SCSI Vendor = Kingston
SCSI Product = DataTraveler 3.0
Nessuno dei due formati dimostra automaticamente che il prodotto sia autentico. Questi identificatori sono utili per l’identificazione e la correlazione, ma si tratta comunque di valori comunicati dal firmware. Un dispositivo contraffatto o sufficientemente modificato potrebbe comunicare qualsiasi valore sia stato programmato al suo interno.
Questa è una distinzione importante per gli sviluppatori che realizzano software di convalida dei dispositivi. I valori identificativi devono essere registrati, ma non devono sostituire le prove di capacità, la verifica tramite scrittura e lettura, i test delle prestazioni o altre forme di analisi del comportamento.
Un record pratico del dispositivo
Per il software che inventaria o sottopone a test le chiavette USB, un record utile del dispositivo può contenere più di quattro campi.
VID USB
PID USB
Revisione USB
Numero di serie USB
Produttore SCSI
Prodotto SCSI
Revisione SCSI
Numero di serie dell’unità di archiviazione
Numero dell’unità fisica
Lettera di unità
Capacità dichiarata
Tipo di bus
Velocità della connessione
Non tutte le unità USB forniranno ogni valore. I numeri di serie potrebbero essere assenti, duplicati o comunicati in modo differente a livello USB e a livello di archiviazione. Le stringhe del produttore potrebbero essere vuote. I nomi dei prodotti potrebbero essere generici. Il software deve prevedere la presenza di informazioni incomplete, anziché presumere che ogni campo sia sempre disponibile.
L’approccio più solido consiste nel raccogliere gli identificatori disponibili, conservare i valori originali e successivamente associare tali valori ai risultati relativi alle prestazioni, alla capacità o alla verifica prodotti dall’applicazione.
Un’ultima cosa prima di andare
Windows 10 offre diversi metodi affidabili per trovare il VID, il PID, il produttore SCSI e le informazioni SCSI Product di un’unità USB. Gestione dispositivi fornisce una risposta manuale e rapida. PowerShell e WMI offrono un accesso automatizzabile tramite script. SetupAPI permette alle applicazioni Windows di accedere all’albero dei dispositivi Plug and Play, mentre una richiesta diretta delle proprietà di archiviazione recupera le informazioni associate al disco fisico.
La lezione importante è che un dispositivo di archiviazione USB possiede più di un’identità. Il VID e il PID USB provengono dal livello di enumerazione USB. I valori SCSI Vendor, Product e Revision provengono dal livello di archiviazione. Cercare le informazioni in un solo punto potrebbe fornire soltanto metà del quadro complessivo.
Una volta compresa questa distinzione, i nomi apparentemente contraddittori mostrati da Windows iniziano ad avere senso. Il dispositivo non sta necessariamente cambiando identità. Windows sta semplicemente mostrando informazioni raccolte da due parti differenti dello stesso hardware.
Nota editoriale: questo articolo si basa su attività pratiche di enumerazione dei dispositivi USB e di identificazione delle unità di archiviazione eseguite su sistemi Windows. L’output esatto può variare in base al controller USB, al firmware, al driver Windows e all’implementazione del dispositivo di archiviazione. L’immagine è stata creata per facilitare la comprensione delle informazioni con l’aiuto di strumenti di generazione delle immagini basati sull’intelligenza artificiale.