So finden Sie VID, PID, SCSI-Hersteller- und Produktinformationen eines USB-Laufwerks unter Windows

Flussdiagramm, das zeigt, wie Windows ein USB-Gerät über die USB-Enumeration, USB-Deskriptoren mit VID und PID, das Laden des Massenspeichertreibers sowie die SCSI-Inquiry-Angaben zu Hersteller, Produkt und Revision identifiziert.

Es hat etwas ganz besonders Befriedigendes, ein USB-Gerät an einen Windows-Computer anzuschließen und zu sehen, wie es nahezu sofort erscheint. Windows identifiziert die Hardware, lädt den passenden Treiber, weist dem Speichergerät einen Laufwerksbuchstaben zu und innerhalb von ein oder zwei Sekunden ist das USB-Laufwerk einsatzbereit.

Die meisten Benutzer müssen sich nie Gedanken darüber machen, was während dieser wenigen Sekunden tatsächlich passiert ist. Für Entwickler, IT-Administratoren, Hardwareingenieure und alle, die Software schreiben, die mit USB-Geräten kommuniziert, wirft dieser automatische Ablauf jedoch eine wichtige Frage auf: Woher erhält Windows die Informationen, mit denen das Gerät identifiziert wird?

Ein USB-Stick kann mehr als eine Identität melden. Auf USB-Ebene übermittelt das Gerät eine Vendor ID, üblicherweise als VID bezeichnet, und eine Product ID, üblicherweise als PID bezeichnet. Nachdem Windows das Gerät als USB-Massenspeicher erkannt hat, kann das Speichergerät zusätzlich eine SCSI-Vendor-Zeichenfolge, eine SCSI-Product-Zeichenfolge und eine Produktrevision melden.

Diese Werte hängen miteinander zusammen, weil sie dasselbe physische Gerät beschreiben, sie stammen jedoch nicht aus derselben Quelle. Sie sind nicht untereinander austauschbar und identifizieren auch nicht immer denselben Hersteller oder dieselbe Produktbezeichnung.

Windows 10 bietet mehrere Möglichkeiten, diese Informationen anzuzeigen oder abzurufen. Einige Methoden sind für eine Person gedacht, die direkt vor dem Computer sitzt. Andere eignen sich besser für Skripte, Inventarsysteme, Diagnosesoftware oder Anwendungen, die USB-Speichergeräte automatisch identifizieren müssen.

USB-VID und PID im Vergleich zu SCSI Vendor und Product

Bevor wir uns die verschiedenen Windows-Methoden ansehen, ist es hilfreich, die beiden beteiligten Identitäten zu verstehen.

Die USB Vendor ID und Product ID stammen aus den USB-Deskriptoren des Geräts. Diese Werte werden gemeldet, sobald das USB-Gerät angeschlossen wird und Windows mit der USB-Enumeration beginnt.

Eine typische USB-Hardware-ID könnte folgendermaßen aussehen:

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

In diesem Beispiel lauten die Werte:

USB VID = 090C
USB PID = 1000

Die VID soll den USB-Anbieter identifizieren, während die PID ein Produkt oder eine Produktfamilie kennzeichnet, die von diesem Anbieter festgelegt wurde. Bei beiden Werten handelt es sich um Hexadezimalzahlen.

Nachdem Windows festgestellt hat, dass es sich bei dem angeschlossenen Gerät um ein USB-Massenspeichergerät handelt, kommuniziert Windows über die Speicherbefehlsebene mit dem Gerät. Eine standardmäßige SCSI-Inquiry-Antwort kann eine Vendor-Zeichenfolge, eine Product-Zeichenfolge und eine Revision-Zeichenfolge enthalten.

Eine Hardware-ID des Speichergeräts könnte folgendermaßen aussehen:

USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07

In diesem Beispiel lauten die Werte:

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

USB-VID und PID sind numerische Kennungen, die während der USB-Enumeration verwendet werden. Die Felder SCSI Vendor und Product sind Textzeichenfolgen, die über die Speicherschnittstelle gemeldet werden. Ein Gerätehersteller kann eine dieser Identitäten ändern, ohne zwangsläufig auch die andere zu ändern.

Aus diesem Grund kann ein USB-Stick eine USB-VID melden, die einem Controller-Hersteller zugeordnet ist, während im Feld SCSI Product ein Produktname aus dem Einzelhandel, ein Kundenname oder eine allgemeine Bezeichnung wie „USB Flash Disk“ angezeigt wird.

Wie Windows die beiden Geräteidentitäten aufbaut

Am einfachsten lässt sich der Ablauf als zweistufiger Prozess vorstellen. Windows identifiziert zunächst die angeschlossene USB-Hardware. Anschließend identifiziert es das Speichergerät, das über diese USB-Verbindung betrieben wird.

USB-VID und PID stehen bereits während der ersten Stufe zur Verfügung. Die Felder SCSI Vendor, Product und Revision werden verfügbar, nachdem der USB-Massenspeichertreiber geladen wurde und Windows das Speichergerät abgefragt hat.

Diese Unterscheidung erklärt auch, warum Windows sich an ein USB-Gerät erinnern kann, nachdem es getrennt wurde. Wie in unserem Artikel darüber erläutert, warum Windows eine Historie zuvor angeschlossener USB-Geräte speichert, legt Windows während der Geräte-Enumeration gesammelte Informationen ab, damit die Hardware beim nächsten Anschließen wiedererkannt und verwaltet werden kann.

Warum sollte jemand beide Informationssätze benötigen?

Für eine einfache Fehlerbehebung reichen USB-VID und PID möglicherweise aus. Für Geräteinventarisierung, Fertigung, Diagnose oder Softwareentwicklung liefert das Erfassen beider Identitäten jedoch ein vollständigeres Bild.

Eine Inventaranwendung kann USB-VID und PID verwenden, um Geräte nach Hardwareplattform zu gruppieren, während dem Benutzer gleichzeitig die Zeichenfolgen SCSI Vendor und Product angezeigt werden. Ein Fertigungsprogramm kann prüfen, ob ein unterstützter USB-Controller angeschlossen ist, bevor ein Vorgang ausgeführt wird. Ein Diagnoseprogramm kann sämtliche Kennungen erfassen, damit die Ergebnisse verschiedener Geräte später miteinander verglichen werden können.

Digitale Forensikwerkzeuge können die Kennungen als Teil eines Gerätedatensatzes erfassen. USB-Validierungssoftware kann die vom Gerät gemeldete Identität mit dem während eines Tests beobachteten Verhalten vergleichen. Das kann hilfreich sein, weil der von einem USB-Gerät angegebene Name, die gemeldete Kapazität und die behauptete Leistung nicht zwangsläufig beweisen, welche Hardware sich tatsächlich im Inneren befindet.

Dasselbe Prinzip gilt für die Datenintegrität. Identifikationsinformationen sagen uns, was das Gerät zu sein behauptet, während Tests zeigen, wie es sich tatsächlich verhält. Unser Artikel darüber, warum die USB-Datenverifizierung manchmal einen Power Cycle umfassen sollte, untersucht einen ähnlichen Unterschied zwischen Informationen, die unmittelbar gemeldet werden, und Informationen, die erst bewiesen sind, nachdem das Gerät getrennt und erneut angeschlossen wurde.

Methode 1: Den Windows-Geräte-Manager verwenden

Der Geräte-Manager ist der einfachste Ausgangspunkt, weil dafür weder eine Befehlszeile noch Skripting oder Programmierung erforderlich sind. Wichtig ist jedoch, dass die USB-Identität und die Speicheridentität normalerweise unter zwei unterschiedlichen Geräteeinträgen erscheinen.

USB-VID und PID ermitteln

Öffnen Sie den Geräte-Manager und erweitern Sie den Bereich USB-Controller. Suchen Sie das mit dem Laufwerk verbundene USB-Massenspeichergerät, klicken Sie mit der rechten Maustaste darauf und wählen Sie Eigenschaften.

Wählen Sie die Registerkarte Details und anschließend im Dropdown-Menü Eigenschaft den Eintrag Hardware-IDs.

Geräte-Manager
→ USB-Controller
→ USB-Massenspeichergerät
→ Eigenschaften
→ Details
→ Hardware-IDs

Ein typisches Ergebnis könnte folgendermaßen aussehen:

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

Die vier Zeichen nach VID_ bilden die USB Vendor ID. Die vier Zeichen nach PID_ bilden die USB Product ID.

SCSI Vendor und Product ermitteln

Kehren Sie zum Geräte-Manager zurück und erweitern Sie Laufwerke. Suchen Sie den USB-Stick, klicken Sie mit der rechten Maustaste darauf und wählen Sie Eigenschaften. Öffnen Sie erneut die Registerkarte Details und wählen Sie Hardware-IDs.

Geräte-Manager
→ Laufwerke
→ USB-Stick
→ Eigenschaften
→ Details
→ Hardware-IDs

Das Ergebnis könnte ungefähr folgendermaßen aussehen:

USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07

Windows hat die Werte zu einer Plug-and-Play-Hardware-ID formatiert:

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

Der Geräte-Manager ist eine ausgezeichnete Wahl, wenn ein einzelnes Gerät manuell untersucht werden soll. Seine Einschränkung besteht darin, dass die Zuordnung des richtigen USB-Massenspeichereintrags zum richtigen Laufwerkseintrag verwirrend werden kann, wenn mehrere USB-Laufwerke gleichzeitig angeschlossen sind.

Methode 2: PowerShell verwenden

PowerShell ist die bessere Wahl, wenn die Informationen regelmäßig erfasst, in einem Bericht dargestellt oder von mehr als einem Computer abgerufen werden sollen. Windows 10 enthält PowerShell sowie die für eine grundlegende Geräteüberprüfung erforderlichen Plug-and-Play-Cmdlets.

Vorhandene USB-Geräte mit VID und PID auflisten

Öffnen Sie PowerShell und führen Sie den folgenden Befehl aus:

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

Die Ausgabe enthält Geräteinstanz-IDs, die ungefähr folgendermaßen aussehen:

USB\VID_090C&PID_1000\1234567890

Im nächsten Beispiel werden VID und PID in getrennte Spalten extrahiert:

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

Das ist hilfreich, weil dadurch eine lange Windows-Geräteinstanz-Zeichenfolge in ein übersichtlicheres Ergebnis mit Gerätename, VID und PID umgewandelt wird.

USB-Speicherinformationen auflisten

Der folgende PowerShell-Befehl fragt die Windows-Laufwerksklasse ab und filtert die Ergebnisse nach USB-Speichergeräten:

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

Ein Ergebnis könnte folgendermaßen aussehen:

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

Die Felder Manufacturer und Model können praktisch sein, werden jedoch nicht von jedem USB-Speichergerät einheitlich befüllt. Die PNPDeviceID liefert häufig die deutlichste Darstellung der Vendor-, Product- und Revision-Werte, die Windows empfangen hat.

PowerShell gehört zu den besten universell einsetzbaren Möglichkeiten, weil keine kompilierte Anwendung erforderlich ist. Schwieriger wird es, einen Geräteeintrag auf USB-Ebene dem zugehörigen physischen Laufwerk zuzuordnen, wenn mehrere Geräte angeschlossen sind. Ein fortgeschritteneres Skript kann den übergeordneten und untergeordneten Gerätebeziehungen von Windows folgen, um diese Zuordnung vorzunehmen.

Methode 3: WMI oder den WMIC-Befehl verwenden

Windows Management Instrumentation, üblicherweise als WMI abgekürzt, wird bereits seit vielen Jahren verwendet, um Informationen über Hardware und Betriebssystem abzurufen. Viele Windows-10-Computer enthalten außerdem noch das ältere WMIC-Befehlszeilenprogramm.

WMIC ist für schnelle Tests und zur Pflege älterer Skripte hilfreich, auch wenn PowerShell und CIM für neue Entwicklungen im Allgemeinen die bessere Wahl darstellen.

USB-Laufwerksinformationen mit WMIC anzeigen

Öffnen Sie die Eingabeaufforderung und führen Sie Folgendes aus:

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

Um das Ergebnis auf Laufwerke mit einer USB-Schnittstelle zu beschränken, führen Sie Folgendes aus:

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

Ein typisches Ergebnis könnte ungefähr folgendermaßen aussehen:

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

Die Spalte PNPDeviceID kann einen längeren Wert enthalten:

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

Plug-and-Play-Einträge nach USB-VID- und PID-Werten durchsuchen

Der folgende WMIC-Befehl durchsucht Plug-and-Play-Geräte nach Einträgen, die eine USB-VID enthalten:

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

Die doppelten Prozentzeichen werden von WMIC innerhalb der Abfrage als Platzhalterzeichen verwendet.

WMIC ist möglicherweise nicht auf jeder neueren Windows-Installation vorhanden oder aktiviert, und Microsoft verlagert administrative Skriptingaufgaben zunehmend in Richtung PowerShell. Für ein Windows-10-Dienstprogramm oder ein bestehendes Unternehmensskript kann WMI jedoch weiterhin nützliche Informationen liefern.

Methode 4: Die Windows SetupAPI verwenden

In C oder C++ geschriebene Software kann Windows-Plug-and-Play-Geräteinformationen über die SetupAPI abrufen. Dies ist ein praktischer Ansatz für Desktopanwendungen, die USB-Geräte automatisch erkennen müssen, anstatt vom Benutzer zu verlangen, den Geräte-Manager manuell zu durchsuchen.

Eine vollständige SetupAPI-Anwendung umfasst Fehlerbehandlung, dynamische Puffer, die Auswertung von Geräteeigenschaften und die ordnungsgemäße Freigabe von Ressourcen. Das folgende verkürzte Beispiel zeigt die wichtigsten beteiligten Windows-Aufrufe.

Einen Geräteinformationssatz erstellen

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

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

Dadurch wird ein Geräteinformationssatz erstellt, der die aktuell am Computer vorhandenen USB-Geräte enthält.

Die Geräteeinträge durchlaufen

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

for (
    DWORD index = 0;
    SetupDiEnumDeviceInfo(
        deviceInfoSet,
        index,
        &deviceInfoData
    );
    ++index
) {
    // Hier die Geräteeigenschaften abrufen.
}

Die Hardware-ID-Eigenschaft auslesen

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

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

    // hardwareIds durchsuchen nach:
    // VID_xxxx
    // PID_xxxx
}

Die zurückgegebene Hardware-ID-Eigenschaft kann eine oder mehrere durch Nullzeichen getrennte Zeichenfolgen enthalten. Ein USB-Geräteeintrag kann beispielsweise folgende Kennung enthalten:

USB\VID_090C&PID_1000&REV_1100

Die Anwendung kann diese Zeichenfolge nach den Feldern VID_ und PID_ durchsuchen und jeweils die folgenden vier Hexadezimalzeichen extrahieren.

Nach Abschluss sollte der Geräteinformationssatz freigegeben werden:

SetupDiDestroyDeviceInfoList(deviceInfoSet);

SetupAPI ist leistungsfähig, allerdings gibt es ein wichtiges Detail: Windows stellt das USB-Gerät und das physische Laufwerk als getrennte Knoten im Gerätebaum dar. Das Abrufen von USB-VID und PID ist vergleichsweise direkt. Die Zuordnung dieser Werte zum richtigen Laufwerk, zum Laufwerksbuchstaben und zur SCSI-Identität kann jedoch erfordern, die übergeordneten und untergeordneten Gerätebeziehungen zu durchlaufen.

Das ist einer der Gründe, warum eine kommerzielle Diagnoseanwendung in der Regel mehr Code benötigt, als eine kurze Demonstration vermuten lässt. Die einzelnen Eigenschaften sind verfügbar, doch die eigentliche Arbeit besteht darin, sämtliche Informationen korrekt zu einem einzigen Gerätedatensatz zusammenzuführen.

Methode 5: Das Speichergerät direkt abfragen

Eine Windows-Anwendung kann ein physisches Laufwerk abfragen, indem sie das Gerät öffnet und eine IOCTL_STORAGE_QUERY_PROPERTY-Anfrage sendet. Diese Methode eignet sich zum Abrufen von Speicherinformationen wie Vendor, Product, Revision, Seriennummer und Bustyp.

Das folgende Beispiel öffnet PhysicalDrive2. Die tatsächliche Nummer des physischen Laufwerks hängt vom jeweiligen Computer und davon ab, welches USB-Gerät untersucht wird.

Das physische Laufwerk öffnen

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

if (drive == INVALID_HANDLE_VALUE) {
    // Den Fehler behandeln.
}

Die Speicherabfrage vorbereiten

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

Die Abfrage an Windows senden

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

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

Den zurückgegebenen Speicherdeskriptor auswerten

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

Die Zeichenfolgen werden nicht direkt im festen Teil der Struktur gespeichert. Stattdessen enthält die Struktur Byte-Offsets, die auf die Positionen dieser Zeichenfolgen innerhalb des zurückgegebenen Puffers verweisen.

Wenn der Handle des physischen Laufwerks nicht mehr benötigt wird, wird er geschlossen:

CloseHandle(drive);

Eine erfolgreiche Speicherabfrage kann Informationen wie die folgenden liefern:

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

Diese Methode befindet sich näher am eigentlichen Speichergerät als das Auslesen eines Anzeigenamens aus dem Geräte-Manager oder die Abfrage eines zwischengespeicherten Registrierungswertes. Sie liefert jedoch nicht automatisch USB-VID und PID zurück. Die Anwendung muss das physische Laufwerk weiterhin seinem übergeordneten USB-Gerät zuordnen und die USB-Hardware-ID separat abrufen, normalerweise über SetupAPI oder die Windows-Configuration-Manager-Funktionen.

Welche Windows-Methode sollten Sie verwenden?

Es gibt keine einzelne Methode, die für jede Situation die beste ist. Die richtige Wahl hängt davon ab, ob das Ziel eine manuelle Überprüfung, Skripting, Softwareentwicklung oder eine systemnahe Geräteanalyse ist.

Vergleich der Windows-Methoden zur USB-Identifikation öffnen
Methode USB VID/PID SCSI Vendor/Product Programmierung erforderlich Beste Verwendung
Geräte-Manager Ja Ja Nein Ein einzelnes Gerät manuell untersuchen
PowerShell Ja Ja Einfaches Skripting Inventarisierung und wiederholbare Berichte
WMI oder WMIC Ja Ja Einfaches Skripting Ältere Systeme und bestehende Skripte
SetupAPI Ja Über Gerätezuordnung Ja Windows-Anwendungen und USB-Dienstprogramme
Speicherabfrage Nicht direkt Ja Ja Diagnose und direkte Speicherinformationen

Für eine Person, die einen einzelnen USB-Stick überprüft, reicht der Geräte-Manager normalerweise aus. Für Administratoren, die Informationen von vielen Computern sammeln, ist PowerShell wahrscheinlich der beste Ausgangspunkt. Für Softwareentwickler, die ein Windows-Dienstprogramm erstellen, bietet die Kombination aus SetupAPI und einer Abfrage der Speichereigenschaften den vollständigsten Ansatz.

Ist die Windows-Registrierung eine weitere Methode?

Windows speichert Informationen zur USB-Enumeration in der Registrierung, und dort lassen sich sowohl USB- als auch USB-Speichereinträge finden.

USB-Geräteeinträge befinden sich üblicherweise unter:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB

USB-Speichereinträge befinden sich üblicherweise unter:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR

Diese Speicherorte sind für die Fehlerbehebung und historische Analysen nützlich, die Registrierung sollte jedoch nicht mit der ursprünglichen Quelle der Informationen verwechselt werden. Windows erstellt und aktualisiert diese Einträge, nachdem das USB-Gerät bereits enumeriert und die Speicherschnittstelle abgefragt wurde.

Die ursprünglichen USB-VID- und PID-Werte stammen aus den USB-Deskriptoren. Die ursprünglichen Vendor-, Product- und Revision-Werte des Speichers stammen aus der Inquiry-Antwort des Speichergeräts. In der Registrierung zeichnet Windows die Ergebnisse für die spätere Verwendung auf.

Registrierungsberechtigungen können den direkten Zugriff für Software ebenfalls umständlich machen. Wenn eine Anwendung lediglich Informationen über aktuell angeschlossene Geräte benötigt, sind die unterstützten Windows-Geräte-APIs normalerweise die bessere Wahl.

Warum die USB- und SCSI-Namen möglicherweise nicht übereinstimmen

Es liegt nahe zu erwarten, dass jede Kennung denselben Herstellernamen anzeigt. In der Praxis bestehen USB-Sticks jedoch aus mehreren Ebenen von Hardware und Firmware, und jede dieser Ebenen kann etwas anderes melden.

Ein Anbieter von USB-Sticks für den Einzelhandel kann einen Controller von einem anderen Hersteller beziehen. Die USB-VID kann den Controller-Anbieter oder das für die Firmware verantwortliche Unternehmen identifizieren, während das Feld SCSI Product den Markennamen des Einzelhandelsprodukts enthält. In anderen Fällen bleiben die SCSI-Zeichenfolgen vollständig allgemein gehalten.

Ein Gerät könnte Folgendes melden:

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

Ein anderes Laufwerk könnte Folgendes melden:

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

Keines dieser Formate beweist automatisch, dass das Produkt echt ist. Diese Kennungen sind für die Identifikation und Zuordnung nützlich, es handelt sich jedoch um Werte, die von der Firmware gemeldet werden. Ein ausreichend verändertes oder gefälschtes Gerät kann praktisch beliebige Werte melden, die zuvor einprogrammiert wurden.

Dies ist eine wichtige Unterscheidung für Entwickler, die Software zur Gerätevalidierung erstellen. Identifikationswerte sollten aufgezeichnet werden, sie sollten jedoch keine Kapazitätstests, Schreib- und Leseverifizierung, Leistungstests oder andere Formen der Verhaltensanalyse ersetzen.

Ein praktischer Gerätedatensatz

Für Software, die USB-Sticks inventarisiert oder testet, kann ein sinnvoller Gerätedatensatz deutlich mehr als vier Felder enthalten.

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

Nicht jeder USB-Stick stellt jeden dieser Werte bereit. Seriennummern können fehlen, doppelt vorkommen oder auf USB- und Speicherebene unterschiedlich gemeldet werden. Herstellerzeichenfolgen können leer sein. Produktnamen können allgemein gehalten sein. Die Software sollte mit unvollständigen Informationen rechnen, anstatt davon auszugehen, dass jedes Feld immer verfügbar ist.

Der zuverlässigste Ansatz besteht darin, die verfügbaren Kennungen zu erfassen, die ursprünglichen Werte unverändert aufzubewahren und diese Werte anschließend mit den Leistungs-, Kapazitäts- oder Verifizierungsergebnissen zu verknüpfen, die von der Anwendung erzeugt werden.

Noch eine Sache, bevor Sie gehen

Windows 10 bietet mehrere zuverlässige Möglichkeiten, VID, PID sowie die SCSI-Vendor- und SCSI-Product-Informationen eines USB-Laufwerks zu ermitteln. Der Geräte-Manager liefert eine schnelle manuelle Antwort. PowerShell und WMI ermöglichen einen skriptgesteuerten Zugriff. SetupAPI gibt Windows-Anwendungen Zugriff auf den Plug-and-Play-Gerätebaum, während eine direkte Abfrage der Speichereigenschaften Informationen zum physischen Laufwerk liefert.

Die wichtigste Erkenntnis ist, dass ein USB-Speichergerät mehr als eine Identität besitzt. USB-VID und PID stammen aus der USB-Enumerationsschicht. Die Werte SCSI Vendor, Product und Revision stammen aus der Speicherschicht. Wer nur an einer Stelle nachsieht, erhält möglicherweise nur die Hälfte der Informationen.

Sobald diese Unterscheidung verstanden ist, ergeben die scheinbar widersprüchlichen Namen, die Windows anzeigt, einen Sinn. Das Gerät ändert nicht zwangsläufig seine Identität. Windows zeigt lediglich Informationen an, die aus zwei unterschiedlichen Bereichen derselben Hardware erfasst wurden.

Redaktioneller Hinweis: Dieser Artikel basiert auf praktischer Arbeit mit der Enumeration von USB-Geräten und der Identifikation von Speichergeräten unter Windows. Die genaue Ausgabe kann je nach USB-Controller, Firmware, Windows-Treiber und Implementierung des Speichergeräts variieren. Das Bild wurde zur leichteren Aufnahme der Informationen mithilfe von Werkzeugen zur Bilderstellung auf Basis künstlicher Intelligenz erstellt.

Weitere Artikel lesen

Entdecken Sie weitere Berichte, Analysen und technische Einblicke.