hardware - henter serienummeret på et USB-tastatur under Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Mange USB-enheder indeholder et unikt serienummer (som faktisk er en Unicode-streng), som værten kan bruge sammen med 16-bit leverandør- og produkt-ID-numre til unikt at identificere enheden.


Jeg forsøger at finde ud af, hvordan man skriver en Windows-applikation, der vil kunne vise en liste over alle USB-interface enheder, der er knyttet til systemet. Listen ville have en række for hver HID, herunder systemtastaturer. Der ville være kolonner i listen for leverandør-id, produkt-id og serienummer.


Jeg kan få en liste over USB HID'er ved at ringe SetupDiGetClassDevs med GUID returneret af HidD\_GetHidGuid og looping gennem resultatet ved gentagne gange at ringe SetupDiEnumDeviceInterfaces. Jeg kan derefter ringe til SetupDiGetDeviceInterfaceDetail for at få stien til hver enhed, som jeg kan åbne med CreateFile, så længe jeg er forsigtig med at anmode hverken om læsning eller skriv tilladelse, hvilket ville blive nægtet for et systemtastatur . Derefter kan jeg få leverandør- og produkt-ID-numrene ved at påberåbe HidD\_GetAttributes.


Hvad jeg har svært ved at finde ud af, er hvordan man henter serienummerstrengen. Når jeg søger efter løsninger på dette problem, finder jeg meget information om, hvordan man får serienumre til USB-masselagringsenheder, men intet der ligner det kan finde anvendelse på enhver anden type USB-enhed. Jeg vil gerne opdage enten en generisk metode eller en HID-specifik metode til at hente serienummerstrengen.


Jeg har en fornemmelse af, at Win32-porten på libusb kunne klare dette uden for mange problemer, men jeg har desværre brug for en løsning, der kun afhænger af biblioteker, der følger med Windows, såsom setupapi og hid DLL'er, der indeholder de ovennævnte funktioner.


Eventuelle forslag ville blive meget værdsat!

Bedste reference


Har du prøvet USBVIew-kildekoden, der følger med DDK. USBView-værktøjet viser serienummer for enhver USB-enhed, og kilden leveres med DDK.

Andre referencer 1


Det viser sig, at HID.dll definerer en funktion kaldet HidD\_GetSerialNumberString, der gør præcis, hvad jeg vil have, givet håndtaget jeg fik fra CreateFile som beskrevet ovenfor. Bare prøvet det og det virker godt. Der findes også HidD\_GetManufacturerString og HidD\_GetProductString funktioner til at hente de andre strengbeskrivelser, der henvises til i enhedsbeskrivelsen, og endda en HidD\_GetIndexedString for at få en vilkårlig strengbeskrivelse givet sit indeks (formodentlig fordi HID descriptor må indeholde string descriptor indekser). Jeg føler mig ret dum nu - svaret var lige der under min næse hele tiden.


Tak alle for at tage dig tid til at læse og besvare mit spørgsmål! Jeg vil gå videre og acceptere Alphaneos svar, da det lyder ret lovende, og jeg ventede faktisk på DDK at downloade, da jeg snuble over dette svar.

Andre referencer 2


Har du forsøgt at søge efter dokumentationen af ​​HID-definitionen af ​​input-registreringer, output records og funktioner records for Hid keyboards. Dette skal vise dig listen over 'ting', du kan komme ud af et tastatur gennem HID.


Jeg ved også, at det er muligt at opregne HID-rekorddefinitionen ved hjælp af software. Jeg gjorde noget lignende omkring 1 år siden, men jeg kan ikke huske detaljerne øverst på mit hoved. Hvis du gør det, kan du se, hvad tastaturet USB-klassen udgiver som en standardgrænseflade.


Jeg håber det kan få dig et par tips til at finde ud af, hvad du leder efter. Undskyld jeg kunne ikke være mere præcis!

Andre referencer 3


Jeg anbefaler denne bog USB Complete. Kapitel 4 Opgørelse: Hvordan værten lærer om enheder har de oplysninger, du har brug for. [17]


Denne side har mange links til oplysninger og for dig links til biblioteker og værktøjer, du kan bruge. [18]

Andre referencer 4


Du kan bruge GetVolumeInformation for at få serienummeret til enhver hardware tilsluttet.