Zo vindt u de VID, PID, SCSI-leverancier en productinformatie van een USB-stick in Windows

Stroomschema dat laat zien hoe Windows een USB-apparaat identificeert via USB-enumeratie, USB-descriptors met VID en PID, het laden van het stuurprogramma voor massaopslag en een SCSI Inquiry waarmee leverancier, product en revisie worden gerapporteerd.

Er is iets bijzonder bevredigends aan het aansluiten van een USB-apparaat op een Windows-computer en het vrijwel onmiddellijk zien verschijnen. Windows identificeert de hardware, laadt het juiste stuurprogramma, wijst het opslagapparaat een stationsletter toe en binnen één of twee seconden is de USB-stick klaar voor gebruik.

De meeste gebruikers hoeven nooit na te denken over wat er tijdens die paar seconden precies gebeurt. Voor ontwikkelaars, IT-beheerders, hardwaretechnici en iedereen die software schrijft die met USB-apparaten communiceert, roept dat automatische proces echter een belangrijke vraag op: waar haalt Windows de informatie vandaan waarmee het apparaat wordt geïdentificeerd?

Een USB-stick kan meer dan één identiteit rapporteren. Op USB-niveau rapporteert het apparaat een Vendor ID, meestal VID genoemd, en een Product ID, meestal PID genoemd. Nadat Windows het apparaat als USB-massaopslag heeft herkend, kan het opslagapparaat ook een SCSI Vendor-tekenreeks, een SCSI Product-tekenreeks en een productrevisie rapporteren.

Die waarden houden verband met elkaar omdat ze hetzelfde fysieke apparaat beschrijven, maar ze komen niet uit dezelfde bron. Ze zijn niet onderling uitwisselbaar en verwijzen niet altijd naar dezelfde fabrikant of dezelfde productnaam.

Windows 10 biedt verschillende manieren om deze informatie te bekijken of op te halen. Sommige methoden zijn bedoeld voor iemand die achter de computer zit. Andere zijn geschikter voor scripts, inventarisatiesystemen, diagnostische software of toepassingen die USB-opslagapparaten automatisch moeten herkennen.

USB VID en PID tegenover SCSI-leverancier en product

Voordat we naar de verschillende Windows-methoden kijken, is het handig om de twee betrokken identiteiten te begrijpen.

De USB Vendor ID en Product ID zijn afkomstig uit de USB-descriptors van het apparaat. Deze waarden worden gerapporteerd wanneer het USB-apparaat voor het eerst wordt aangesloten en Windows met het USB-enumeratieproces begint.

Een typische USB-hardware-id kan er als volgt uitzien:

USB\VID_090C&PID_1000&REV_1100
USB\VID_090C&PID_1000

In dit voorbeeld zijn de waarden:

USB VID = 090C
USB PID = 1000

De VID is bedoeld om de USB-leverancier te identificeren, terwijl de PID een product of productfamilie identificeert die door die leverancier is toegewezen. Beide waarden zijn hexadecimale getallen.

Nadat Windows heeft vastgesteld dat het aangesloten apparaat een USB Mass Storage-apparaat is, communiceert Windows ermee via de opdrachtenlaag voor opslag. Een standaard SCSI Inquiry-antwoord kan een Vendor-tekenreeks, Product-tekenreeks en Revision-tekenreeks bevatten.

Een hardware-id voor het opslagapparaat kan er als volgt uitzien:

USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07

In dit voorbeeld zijn de waarden:

SCSI Vendor   = Generic
SCSI Product  = Flash Disk
SCSI Revision = 8.07

De USB VID en PID zijn numerieke identificatiecodes die tijdens de USB-enumeratie worden gebruikt. De velden SCSI Vendor en Product zijn teksttekenreeksen die via de opslaginterface worden gerapporteerd. Een apparaatfabrikant kan de ene identiteit veranderen zonder noodzakelijkerwijs ook de andere te wijzigen.

Daarom kan een USB-stick een USB VID rapporteren die bij de fabrikant van de controller hoort, terwijl in het veld SCSI Product een commerciële productnaam, een klantnaam of iets algemeens zoals “USB Flash Disk” wordt weergegeven.

Hoe Windows de twee apparaatidentiteiten opbouwt

De eenvoudigste manier om het proces voor te stellen is als twee fasen. Windows identificeert eerst de aangesloten USB-hardware. Vervolgens identificeert Windows het opslagapparaat dat via die USB-verbinding werkt.

De USB VID en PID komen tijdens de eerste fase beschikbaar. De velden SCSI Vendor, Product en Revision worden beschikbaar nadat het stuurprogramma voor USB-massaopslag is geladen en Windows het opslagapparaat heeft opgevraagd.

Dit verschil helpt ook verklaren waarom Windows een USB-apparaat kan onthouden nadat het is losgekoppeld. Zoals besproken in ons artikel over waarom Windows een geschiedenis van eerder aangesloten USB-apparaten bewaart, slaat Windows informatie op die tijdens de apparaatenumeratie is verzameld, zodat de hardware de volgende keer opnieuw kan worden herkend en beheerd.

Waarom zou iemand beide soorten informatie nodig hebben?

Voor eenvoudige probleemoplossing kunnen de USB VID en PID voldoende zijn. Voor apparaatinventarisatie, productie, diagnostiek of softwareontwikkeling geeft het verzamelen van beide identiteiten echter een completer beeld.

Een inventarisatietoepassing kan de USB VID en PID gebruiken om apparaten op hardwareplatform te groeperen, terwijl de SCSI Vendor- en Product-tekenreeksen aan de gebruiker worden getoond. Een productiehulpprogramma kan controleren of een ondersteunde USB-controller is aangesloten voordat een bewerking wordt uitgevoerd. Een diagnostisch programma kan alle identificatiecodes vastleggen, zodat resultaten van verschillende apparaten later met elkaar kunnen worden vergeleken.

Digitale forensische hulpmiddelen kunnen de identificatiecodes verzamelen als onderdeel van een apparaatrecord. USB-validatiesoftware kan de identiteit die door het apparaat wordt gerapporteerd vergelijken met het gedrag dat tijdens tests wordt waargenomen. Dat kan nuttig zijn, omdat de naam, capaciteit en prestaties die door een USB-apparaat worden geclaimd niet noodzakelijk bewijzen welke hardware er werkelijk in zit.

Hetzelfde principe geldt voor gegevensintegriteit. Identificatiegegevens vertellen ons wat het apparaat beweert te zijn, terwijl tests laten zien hoe het zich werkelijk gedraagt. Ons artikel waarin wordt uitgelegd waarom USB-gegevensverificatie soms een stroomcyclus moet omvatten, behandelt een vergelijkbaar verschil tussen informatie die onmiddellijk wordt gerapporteerd en informatie die pas wordt bewezen nadat het apparaat is losgekoppeld en opnieuw aangesloten.

Methode 1: Windows Apparaatbeheer gebruiken

Apparaatbeheer is de eenvoudigste plaats om te beginnen, omdat hiervoor geen opdrachtregel, scripts of programmeerwerk nodig zijn. Het belangrijke detail is dat de USB-identiteit en de opslagidentiteit meestal onder twee verschillende apparaatvermeldingen worden weergegeven.

De USB VID en PID vinden

Open Apparaatbeheer en vouw het gedeelte Universal Serial Bus-controllers uit. Zoek het USB-apparaat voor massaopslag dat bij de USB-stick hoort, klik er met de rechtermuisknop op en selecteer Eigenschappen.

Selecteer het tabblad Details en kies Hardware-id’s in de vervolgkeuzelijst Eigenschap.

Apparaatbeheer
→ Universal Serial Bus-controllers
→ USB-apparaat voor massaopslag
→ Eigenschappen
→ Details
→ Hardware-id's

Een typisch resultaat kan er als volgt uitzien:

USB\VID_090C&PID_1000&REV_1100
USB\VID_090C&PID_1000

De vier tekens na VID_ vormen de USB Vendor ID. De vier tekens na PID_ vormen de USB Product ID.

De SCSI-leverancier en het SCSI-product vinden

Ga terug naar Apparaatbeheer en vouw Schijfstations uit. Zoek de USB-stick, klik er met de rechtermuisknop op en selecteer Eigenschappen. Open opnieuw het tabblad Details en selecteer Hardware-id’s.

Apparaatbeheer
→ Schijfstations
→ USB-stick
→ Eigenschappen
→ Details
→ Hardware-id's

Het resultaat kan er ongeveer als volgt uitzien:

USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07

Windows heeft de waarden opgemaakt als een Plug-and-Play-hardware-id:

Ven_Generic     = SCSI Vendor
Prod_Flash_Disk = SCSI Product
Rev_8.07        = SCSI Revision

Apparaatbeheer is een uitstekende keuze wanneer u één apparaat handmatig onderzoekt. De beperking is dat het koppelen van de juiste vermelding voor USB-massaopslag aan de juiste vermelding onder Schijfstations verwarrend kan worden wanneer er meerdere USB-sticks tegelijk zijn aangesloten.

Methode 2: PowerShell gebruiken

PowerShell is een betere keuze wanneer de informatie herhaaldelijk moet worden verzameld, in een rapport moet worden weergegeven of van meerdere computers moet worden opgehaald. Windows 10 bevat PowerShell en de Plug-and-Play-cmdlets die nodig zijn voor eenvoudige apparaatinspectie.

Aanwezige USB-apparaten met een VID en PID weergeven

Open PowerShell en voer de volgende opdracht uit:

Get-PnpDevice -PresentOnly |
Where-Object {
    $_.InstanceId -match '^USB\\VID_'
} |
Select-Object FriendlyName, Class, InstanceId

De uitvoer bevat apparaatinstantie-id’s die er ongeveer als volgt uitzien:

USB\VID_090C&PID_1000\1234567890

In het volgende voorbeeld worden de VID en PID in afzonderlijke kolommen geplaatst:

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
        }
    }
}

Dit is nuttig omdat een lange Windows-tekenreeks voor een apparaatinstantie wordt omgezet in een overzichtelijker resultaat met de apparaatnaam, VID en PID.

USB-opslaginformatie weergeven

De volgende PowerShell-opdracht vraagt de Windows-klasse voor schijfstations op en filtert de resultaten op USB-opslagapparaten:

Get-CimInstance Win32_DiskDrive |
Where-Object {
    $_.InterfaceType -eq 'USB' -or
    $_.PNPDeviceID -like 'USBSTOR*'
} |
Select-Object DeviceID,
              Manufacturer,
              Model,
              FirmwareRevision,
              PNPDeviceID

Een resultaat kan er als volgt uitzien:

DeviceID        : \\.\PHYSICALDRIVE2
Manufacturer    : Generic
Model           : Flash Disk USB Device
FirmwareRevision: 8.07
PNPDeviceID     : USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07...

De velden Manufacturer en Model kunnen handig zijn, maar ze worden niet door ieder USB-opslagapparaat op een consistente manier ingevuld. De PNPDeviceID geeft vaak de duidelijkste weergave van de Vendor-, Product- en Revision-waarden die Windows heeft ontvangen.

PowerShell is een van de beste algemene opties, omdat er geen gecompileerde toepassing voor nodig is. Het moeilijkere gedeelte is het koppelen van een apparaatvermelding op USB-niveau aan de bijbehorende fysieke schijf wanneer meerdere apparaten zijn aangesloten. Een geavanceerder script kan de bovenliggende en onderliggende apparaatrelaties van Windows volgen om die koppeling tot stand te brengen.

Methode 3: WMI of de WMIC-opdracht gebruiken

Windows Management Instrumentation, meestal afgekort tot WMI, wordt al vele jaren gebruikt om informatie over hardware en het besturingssysteem op te halen. Veel Windows 10-computers bevatten ook het oudere WMIC-opdrachtregelprogramma.

WMIC is nuttig voor snelle tests en voor het onderhouden van oudere scripts, hoewel PowerShell en CIM over het algemeen betere keuzes zijn voor nieuwe ontwikkelingen.

USB-schijfinformatie weergeven met WMIC

Open de Opdrachtprompt en voer het volgende uit:

wmic diskdrive get DeviceID,InterfaceType,Manufacturer,Model,FirmwareRevision,PNPDeviceID

Voer de volgende opdracht uit om het resultaat te beperken tot schijfstations die een USB-interface gebruiken:

wmic diskdrive where "InterfaceType='USB'" get DeviceID,Manufacturer,Model,FirmwareRevision,PNPDeviceID

Een typisch resultaat kan er ongeveer als volgt uitzien:

DeviceID             Manufacturer  Model                  FirmwareRevision
\\.\PHYSICALDRIVE2   Generic       Flash Disk USB Device  8.07

De kolom PNPDeviceID kan een langere waarde bevatten:

USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07\...

Plug-and-Play-vermeldingen doorzoeken op USB VID- en PID-waarden

De volgende WMIC-opdracht doorzoekt Plug-and-Play-apparaten op vermeldingen die een USB VID bevatten:

wmic path Win32_PnPEntity where "PNPDeviceID like 'USB%%VID_%%'" get Name,PNPDeviceID

De dubbele procenttekens worden door WMIC binnen de query als jokertekens gebruikt.

WMIC is mogelijk niet aanwezig of ingeschakeld op iedere nieuwere Windows-installatie en Microsoft verplaatst administratieve scripts steeds meer richting PowerShell. Voor een Windows 10-hulpprogramma of een bestaand bedrijfsscript kan WMI echter nog steeds nuttige informatie leveren.

Methode 4: De Windows SetupAPI gebruiken

Software die in C of C++ is geschreven, kan via de SetupAPI informatie over Windows Plug-and-Play-apparaten ophalen. Dit is een praktische aanpak voor desktoptoepassingen die USB-apparaten automatisch moeten ontdekken, zonder dat de gebruiker zelf door Apparaatbeheer hoeft te bladeren.

Een volledige SetupAPI-toepassing omvat foutafhandeling, dynamische buffers, verwerking van apparaateigenschappen en het opruimen van gebruikte bronnen. Het volgende verkorte voorbeeld toont de belangrijkste Windows-aanroepen die hierbij betrokken zijn.

Een verzameling apparaatinformatie maken

#include <windows.h>
#include <setupapi.h>

HDEVINFO deviceInfoSet = SetupDiGetClassDevsW(
    nullptr,
    L"USB",
    nullptr,
    DIGCF_ALLCLASSES | DIGCF_PRESENT
);

Hiermee wordt een verzameling apparaatinformatie gemaakt met de USB-apparaten die momenteel in de computer aanwezig zijn.

De apparaatvermeldingen doorlopen

SP_DEVINFO_DATA deviceInfoData{};
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);

for (
    DWORD index = 0;
    SetupDiEnumDeviceInfo(
        deviceInfoSet,
        index,
        &deviceInfoData
    );
    ++index
) {
    // Haal hier de apparaateigenschappen op.
}

De eigenschap Hardware-id lezen

WCHAR hardwareIds[4096]{};
DWORD requiredSize = 0;

if (SetupDiGetDeviceRegistryPropertyW(
        deviceInfoSet,
        &deviceInfoData,
        SPDRP_HARDWAREID,
        nullptr,
        reinterpret_cast<PBYTE>(hardwareIds),
        sizeof(hardwareIds),
        &requiredSize
    )) {

    // Zoek in hardwareIds naar:
    // VID_xxxx
    // PID_xxxx
}

De geretourneerde eigenschap voor de hardware-id kan één of meer door null-tekens gescheiden tekenreeksen bevatten. Een USB-apparaatvermelding kan bijvoorbeeld de volgende identificatiecode bevatten:

USB\VID_090C&PID_1000&REV_1100

De toepassing kan die tekenreeks doorzoeken op de velden VID_ en PID_ en de vier daaropvolgende hexadecimale tekens uitlezen.

Wanneer de toepassing klaar is, moet de verzameling apparaatinformatie worden vrijgegeven:

SetupDiDestroyDeviceInfoList(deviceInfoSet);

SetupAPI is krachtig, maar er is een belangrijk detail: Windows vertegenwoordigt het USB-apparaat en de fysieke schijf als afzonderlijke knooppunten in de apparaatstructuur. Het ophalen van de USB VID en PID is relatief eenvoudig. Het koppelen van die waarden aan de juiste schijf, stationsletter en SCSI-identiteit kan vereisen dat de bovenliggende en onderliggende apparaatrelaties worden doorlopen.

Dit is een van de redenen waarom een commerciële diagnostische toepassing doorgaans meer code nodig heeft dan een korte demonstratie doet vermoeden. De afzonderlijke eigenschappen zijn beschikbaar, maar het echte werk bestaat uit het correct samenvoegen van alle informatie tot één apparaatrecord.

Methode 5: Het opslagapparaat rechtstreeks opvragen

Een Windows-toepassing kan een fysieke schijf opvragen door het apparaat te openen en een IOCTL_STORAGE_QUERY_PROPERTY-verzoek te verzenden. Deze methode is nuttig voor het ophalen van opslaginformatie zoals Vendor, Product, Revision, serienummer en bustype.

In het onderstaande voorbeeld wordt PhysicalDrive2 geopend. Het werkelijke nummer van de fysieke schijf is afhankelijk van de computer en van welk USB-apparaat wordt onderzocht.

De fysieke schijf openen

HANDLE drive = CreateFileW(
    L"\\\\.\\PhysicalDrive2",
    GENERIC_READ,
    FILE_SHARE_READ | FILE_SHARE_WRITE,
    nullptr,
    OPEN_EXISTING,
    0,
    nullptr
);

if (drive == INVALID_HANDLE_VALUE) {
    // Verwerk de fout.
}

De opslagquery voorbereiden

STORAGE_PROPERTY_QUERY query{};
query.PropertyId = StorageDeviceProperty;
query.QueryType  = PropertyStandardQuery;

De query naar Windows verzenden

BYTE buffer[4096]{};
DWORD bytesReturned = 0;

BOOL result = DeviceIoControl(
    drive,
    IOCTL_STORAGE_QUERY_PROPERTY,
    &query,
    sizeof(query),
    buffer,
    sizeof(buffer),
    &bytesReturned,
    nullptr
);

De geretourneerde opslagdescriptor interpreteren

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
              )
            : "";
}

De tekenreeksen worden niet rechtstreeks in het vaste gedeelte van de structuur opgeslagen. In plaats daarvan bevat de structuur byte-offsets die verwijzen naar de locaties van die tekenreeksen binnen de geretourneerde buffer.

Wanneer u klaar bent met de handle van de fysieke schijf, sluit u deze:

CloseHandle(drive);

Een geslaagde opslagquery kan informatie opleveren die er ongeveer als volgt uitziet:

Vendor   = Generic
Product  = Flash Disk
Revision = 8.07
Serial   = 1234567890
Bus Type = USB

Deze methode staat dichter bij het opslagapparaat dan het lezen van een beschrijvende naam uit Apparaatbeheer of het opvragen van een in het register opgeslagen waarde. De USB VID en PID worden echter niet automatisch geretourneerd. De toepassing moet de fysieke schijf nog steeds koppelen aan het bovenliggende USB-apparaat en de USB-hardware-id afzonderlijk ophalen, meestal via SetupAPI of de Windows Configuration Manager-functies.

Welke Windows-methode moet u gebruiken?

Er bestaat geen enkele methode die voor iedere situatie de beste keuze is. De juiste keuze hangt ervan af of het doel handmatige inspectie, scripting, softwareontwikkeling of apparaatanalyse op laag niveau is.

Open de vergelijking van Windows-methoden voor USB-identificatie
Methode USB VID/PID SCSI Vendor/Product Programmeren vereist Beste toepassing
Apparaatbeheer Ja Ja Nee Eén apparaat handmatig onderzoeken
PowerShell Ja Ja Lichte scripting Inventarisatie en herhaalbare rapporten
WMI of WMIC Ja Ja Lichte scripting Oudere systemen en bestaande scripts
SetupAPI Ja Via apparaatkoppeling Ja Windows-toepassingen en USB-hulpprogramma’s
Opslagquery Niet rechtstreeks Ja Ja Diagnostiek en rechtstreekse opslaginformatie

Voor iemand die één USB-stick controleert, is Apparaatbeheer meestal voldoende. Voor beheerders die informatie van veel computers verzamelen, is PowerShell waarschijnlijk het beste uitgangspunt. Voor softwareontwikkelaars die een Windows-hulpprogramma bouwen, biedt SetupAPI in combinatie met een query voor opslageigenschappen de meest volledige aanpak.

Is het Windows-register nog een andere methode?

Windows slaat informatie over USB-enumeratie op in het register en het is mogelijk om daar zowel USB-vermeldingen als USB-opslagvermeldingen te vinden.

Vermeldingen voor USB-apparaten zijn doorgaans te vinden onder:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB

Vermeldingen voor USB-opslag zijn doorgaans te vinden onder:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR

Deze locaties zijn nuttig voor probleemoplossing en historische analyse, maar het register moet niet worden verward met de oorspronkelijke bron van de informatie. Windows maakt deze vermeldingen aan en werkt ze bij nadat het USB-apparaat al is geïnventariseerd en de opslaginterface al is opgevraagd.

De oorspronkelijke USB VID en PID komen uit de USB-descriptors. De oorspronkelijke Vendor-, Product- en Revision-waarden voor opslag komen uit het Inquiry-antwoord van het opslagapparaat. In het register legt Windows de resultaten vast voor later gebruik.

Registermachtigingen kunnen rechtstreekse toegang voor software bovendien onhandig maken. Wanneer een toepassing alleen informatie nodig heeft over apparaten die momenteel zijn aangesloten, zijn de ondersteunde Windows-apparaat-API’s meestal een betere keuze.

Waarom de USB- en SCSI-namen mogelijk niet overeenkomen

Het is logisch om te verwachten dat iedere identificatiecode dezelfde fabrikantnaam weergeeft. In de praktijk worden USB-sticks echter opgebouwd uit verschillende lagen hardware en firmware, en iedere laag kan iets anders rapporteren.

Een bedrijf dat USB-sticks onder een winkelmerk verkoopt, kan een controller van een andere fabrikant inkopen. De USB VID kan de leverancier van de controller identificeren of het bedrijf dat verantwoordelijk is voor de firmware, terwijl het veld SCSI Product de commerciële merknaam kan bevatten. In andere gevallen blijven de SCSI-tekenreeksen volledig algemeen.

Een apparaat kan bijvoorbeeld het volgende rapporteren:

USB VID      = 090C
USB PID      = 1000
SCSI Vendor  = Generic
SCSI Product = Flash Disk

Een andere USB-stick kan het volgende rapporteren:

USB VID      = 0951
USB PID      = 1666
SCSI Vendor  = Kingston
SCSI Product = DataTraveler 3.0

Geen van beide indelingen bewijst automatisch dat het product echt is. Deze identificatiecodes zijn nuttig voor identificatie en onderlinge koppeling, maar het zijn waarden die door de firmware worden gerapporteerd. Een voldoende aangepast of nagemaakt apparaat kan alle waarden rapporteren die erin zijn geprogrammeerd.

Dit is een belangrijk onderscheid voor ontwikkelaars die software voor apparaatvalidatie bouwen. Identificatiewaarden moeten worden vastgelegd, maar mogen capaciteitstests, schrijf- en leesverificatie, prestatietests of andere vormen van gedragsanalyse niet vervangen.

Een praktisch apparaatrecord

Voor software die USB-sticks inventariseert of test, kan een bruikbaar apparaatrecord uit meer dan vier velden bestaan.

USB VID
USB PID
USB Revision
USB Serial Number
SCSI Vendor
SCSI Product
SCSI Revision
Storage Serial Number
Physical Drive Number
Drive Letter
Reported Capacity
Bus Type
Connection Speed

Niet iedere USB-stick levert iedere waarde. Serienummers kunnen ontbreken, dubbel voorkomen of op USB- en opslagniveau verschillend worden gerapporteerd. Fabrikanttekenreeksen kunnen leeg zijn. Productnamen kunnen algemeen zijn. De software moet rekening houden met onvolledige informatie, in plaats van ervan uit te gaan dat ieder veld altijd beschikbaar is.

De sterkste aanpak is om de beschikbare identificatiecodes te verzamelen, de oorspronkelijke waarden te bewaren en die waarden vervolgens te koppelen aan de prestatie-, capaciteits- of verificatieresultaten die de toepassing produceert.

Nog één punt voordat u verdergaat

Windows 10 biedt verschillende betrouwbare manieren om de VID, PID, SCSI Vendor- en SCSI Product-informatie van een USB-stick te vinden. Apparaatbeheer geeft snel een handmatig antwoord. PowerShell en WMI bieden toegang via scripts. SetupAPI geeft Windows-toepassingen toegang tot de Plug-and-Play-apparaatstructuur, terwijl een rechtstreekse query voor opslageigenschappen informatie ophaalt die bij de fysieke schijf hoort.

De belangrijkste les is dat een USB-opslagapparaat meer dan één identiteit heeft. De USB VID en PID komen uit de USB-enumeratielaag. De waarden SCSI Vendor, Product en Revision komen uit de opslaglaag. Wanneer u slechts op één plaats kijkt, krijgt u mogelijk slechts de helft van de informatie.

Zodra dat onderscheid duidelijk is, beginnen de ogenschijnlijk tegenstrijdige namen die Windows toont logisch te worden. Het apparaat verandert niet noodzakelijk van identiteit. Windows toont eenvoudigweg informatie die uit twee verschillende onderdelen van dezelfde hardware is verzameld.

Redactionele opmerking: Dit artikel is gebaseerd op praktisch werk met USB-apparaatenumeratie en opslagidentificatie op Windows-systemen. De exacte uitvoer kan verschillen afhankelijk van de USB-controller, firmware, het Windows-stuurprogramma en de implementatie van het opslagapparaat. De afbeelding is gemaakt om de informatie gemakkelijker te kunnen begrijpen, met behulp van beeldgeneratietools op basis van kunstmatige intelligentie.

Meer artikelen lezen

Blijf ontdekken met meer verhalen, analyses en technische inzichten.