Delphi-PRAXiS
Seite 1 von 7  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi USB-Speicher identifizieren (https://www.delphipraxis.net/21676-usb-speicher-identifizieren.html)

Kasoft 6. Mai 2004 13:51


USB-Speicher identifizieren
 
Hallo,

Wie kann man eine ProductID (eine Art Mac Adresse) aus einem USB-Stick auslesen?
Ich habe nun verschiedene Sachen ausprobiert um einen Stick eindeutig zu identifizieren
aber irgendwie fahr ich da jedes mal aus neue gegen eine Wand (namens Unwissenheit).
Und gibt es überhaupt Hardwareinformationen, zu den Sticks, die eindeutig sind?
Die USBstor.pas von Andrej Sandorf hab ich schon benutzt (veränderter JvHidControllerClass.PAS
von Robert Marquardt). Der liefert mir auch einiges an Information aber eine eindeutige
Nummer hab ich nicht erkennen können. Ich dachte das ich hier über DevicePath auf etwas komme
aber auch das war leider ein Griff in Klo...
Vielen Dank für eure Hilfe.

MfG
Kasoft

:wall: <--- Jetzt weiss ich wie ich auf "Gegen die Wand fahren" komme :-)

Alter Mann 6. Mai 2004 17:04

Re: USB-Speicher identifizieren
 
Hallo KaSoft,

warum bleibst Du nicht bei einem Thread?
Wenn Du Dich mit den Parametern von DevEject auseinadergesetzt hättest, würdest
Du nicht diese Frage stellen.

Kasoft 6. Mai 2004 22:32

Re: USB-Speicher identifizieren
 
Sollte ich einen Fehler gemacht haben möchte ich mich hier entschuldigen.
Aber ich denke das 1 Frage pro Thread gelöst wird und deswegen habe ich einen
neuen Thread eröffnet.
Mit den Parametern von DevEject habe ich mich beschäftigt aber nichts brauchbares
gefunden. Eine eindeutige ID habe ich nicht gefunden. Sollte ich da falsch liegen
bitte korrigier mich.
Ich nehme mal die relevante Zeile aus deveject:
'USB-Massenspeichergerõt' 'USB\VID_054C&PID_008B\6&2A6BBF53&0&1' [REMOVEABLE]
Ich weiss nicht was du meinst hier eine eindeutige ID zu sein. 'USB\VID_054C&PID_008B\6&2A6BBF53&0&1' ist jedenfalls keine da diese ID sich beim
Einstecken in einen anderen USB-Slot ändert. Somit kann ich meinen Stick nicht eindeutig
zuordnen... Wie gesagt wenn ich falsch liege korrigier mich bitte.

MfG
Kasoft

Robert Marquardt 7. Mai 2004 07:14

Re: USB-Speicher identifizieren
 
Du musst die vierstellige VID und PID extrahieren.
Achtung, das Format der vier Stellen ist nicht immer Hexziffern.
Manchmal ist es auch '0' + Hexwert was z. B. '=' ergeben kann.

USB-Sticks muessen einen SerialNumber-String haben.
VID/PID/SerialNumber identifiziert daher eindeutig einen bestimmten Stick.
Ich bin noch am Erforschen wie man die SerialNumber ausliest.

Kasoft 7. Mai 2004 10:13

Re: USB-Speicher identifizieren
 
Hallo Robert darf ich das dann so verstehen das du die PID und VID auslesen
kannst? (Über Delphi) Den einzigen String den ich herauskriege ist:
\\?\usbstor#disk&ven_sony&prod_storage_media&rev_1 .00#7&1ce25073&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}

Aus diesem kann man einiges auslesen. Jedoch sehe ich hier keine PID/VID.

MfG
Kasoft

Alter Mann 7. Mai 2004 14:50

Re: USB-Speicher identifizieren
 
Hallo miteinander,

mit der ID ist das so ein Ding, aber eigentlich auch ganz einfach.
Die Frage stammt vermutlich daher, dass der Artikel von Herrn Withopf
aus der C't nicht vorliegt, dort wurde alles erklärt.

Also um Dein Beispiel zu nehmen verhält es sich so:

USB Ein USB-Device
VID_054C Die Hersteller-ID
PID_008B Die Gerätekennung / -typ
6
2A6BBF53 Die Geräteidentifizierung ID
0
1 Die Instanz, d.h wird incrementiert sobald das Gerät
an einem anderen USB-Port angesteckt wurde

Wo für die 6 und die 0 steht, weis ich jetzt nicht. Ich suche es mal
raus...

Robert Marquardt 7. Mai 2004 14:50

Re: USB-Speicher identifizieren
 
Aus diesem String muss man extrahieren.
'USB\VID_054C&PID_008B\6&2A6BBF53&0&1'

Die Gemeinheit ist das ein USB Stick in mehreren Geraetelisten auftaucht.
USB bzw USBSTOR naemlich.

Alter Mann 7. Mai 2004 17:30

Re: USB-Speicher identifizieren
 
Kleiner Wiederspruch, laut Registry-Eintrag bei 'Service' kann je Geräte nur 'USBSTOR' oder etwas anderes stehen.
Oder etwa nicht? Ich kenn jedenfalls kein USB-Device welches mehrere Services bindet.

Robert Marquardt 7. Mai 2004 17:37

Re: USB-Speicher identifizieren
 
Mit Geraetelisten meine ich die internen Listen des Systems.

Es sind mehrere Treiber uebereinandergestapelt.
Wie der Geraetemanager diese Ueberschneidungen filtert weiss ich leider noch nicht.
Es ist aber definitiv moeglich einen USB-Stick mit der USB GUID aufzuzaehlen.
Genauso kann man ein HID-Geraet mit der HID GUID aufzaehlen und mit der USB GUID.
Das liegt daran das der HID-Treiberstack oberhalb des USB-Treiberstacks fuer das Geraet liegt.

Alter Mann 7. Mai 2004 17:45

Re: USB-Speicher identifizieren
 
So nun ist mir wieder alles klar, was die 6 und die 1 betrifft.
Die 6 ist Bestandteil der GeräteID, also 6&2A6BBF53. Die 1 besagt,
das dass USB-Gerät ein Laufwerk bereitstellt. Mein Cardreader hat
eine 2 und bietet auch zwei Laufwerke an. Kontrollieren kann man
es in der Registry unter 'HKey_Local_Machine\Enum\USB\Vid_xxx&Pidxxx\Device ID + &lfd.nr',
je vorhandenem Laufwerk erhöht sich die lfd.nr = Laufendenummer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr.
Seite 1 von 7  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz