Delphi-PRAXiS
Seite 6 von 7   « Erste     456 7      

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)

Robert Marquardt 29. Dez 2006 04:46

Re: USB-Speicher identifizieren
 
VendorID und ProductID sind feste in der Firmware des Sticks abgelegte Nummern. Die VendorID kauft man sich beim USB Implementers Forum, Die PID vergibt der Hersteller fuer ein Produkt. Anhand dieser beiden Nummern identifiziert ein Betriebssystem ein USB-Geraet. Windows schaut erst mal nach ob es ein INF-File mit diesen Nummern entdeckt (genaugenommen diese Stringbestanddteile) und weist dann die im INF-File eingetragenen Treiber zu. Ansonsten versucht Windows anhand der auch vom Geraet gelieferten Klasse (Mass Storage fuer USB Sticks) einen Systemtreiber zuzuweisen.
Die Seriennummer, die auch in diesem Registrystring einkodiert ist, ergibt zusammen mit VID und PID eine eindeutige Kennung fuer das individuelle Exemplar des Geraetes.
Es kann allerdings vorkommen das Billiggeraete keine Seriennummer haben oder noch schlimmer nur genau eine Seriennummer fuer alle Geraete haben. Wegschmeissen das Zeug.

Manipulation am USB-Bereich der Registry ist Unsinn und fuehrt nur zu Problemen der schlimmen Art.

Nicht alle Geraete lassen sich auswerfen, allerdings war ich ueberrascht das sich Maeuse auswerfen lassen. Da hat MS geschlampt.
Ich habe das Programm auf (faktisch) einfache USB-Sticks beschraenkt, da es noch USB-Sticks gibt, die mehrere Partitionen haben und eine andere Methode zum Auswerfen brauchen. Ausserdem wollte ich die Laufwerksbuchstaben anzeigen und da passen andere Geraete schlecht ins Konzept.

r_amse_s 29. Dez 2006 22:19

Re: USB-Speicher identifizieren
 
hintergrund ist das Versuch (wie vielleicht andere vor mir versucht haben) ein USB Stick als Lizenzkey zu verwenden.

angenommen man verkauft die app (die auf jedem rechner lauffähig sein soll) zusammnen mit einem stick wo die seriennr. sauber implementiert ist.
somit hat der user eine gültige seriennr. die er in der registry von anderen pc eintragen/verändern könnte. geht das überhaupt ohne sofortige negative auswirkungen zu haben ?

was für relativ sichere alternativen gibt es mein vorhaben zu verwirklichen im bezug auf usb stick (kein echtes hardlock da kein speicher für apps vorhanden auf so einen ding)?

hier scheint jemand das realisiert zu haben, antwortet aber nicht auf mails :(
CaptNemo

auch andere threads haben relativ alte infos...

Robert Marquardt 30. Dez 2006 05:10

Re: USB-Speicher identifizieren
 
Veraendert man den Registry-Eintrag, so legt Windows beim naechsten Plug einen neuen Eintrag an. Hat das Device eine Seriennummer, dann legt Windows die Registry-Eintraege pro USB Port an (voellig schwachsinnig). Dieses Verhalten kann man allerdings per Registry-Eintrag abschalten.

I.A 4. Mär 2009 10:00

Re: USB-Speicher identifizieren
 
Hallo allerseits!

Interessantes Thema hier. Hab mir grad eben die Beiträge durchgelesen und frage mal in die Runde aber auch besonders den Threadersteller:

-Muss es denn unbedingt die Seriennummer sein?

-Wie sieht der Gesamtstring bei einem Stick eines Herstellers bei einer Speicherkapazität aus?
Sins dies Strings dann bei beiden Sticks gleich?

-Wie sieht der String bei unterschiedlichen USB Geräten (Maus, Drucker, Tastatur, Speicherstick...) aus.

Ich denke, sobald dieser String für jedes Gerät eindeutig ist, können die Geräte schon mal unterschieden werden, denn eben mit dem Gesamtstring.

Aber wie sieht das beispielsweise bei zwei USB Sticks des selben Herstellers und der selben Speicherkapazität aus, wenn die beiden Sicks auch noch baugleich sind?

Und wie ist es bei einem Stick, sagen wir von Sony, dessen Speicher auf einem Chip fest eingebaut ist, während der zweite Sick ein Speicherkartenleser ist? Wieder gleiche Speicherkapazität angenommen?

Ich selber werde jetzt auch mal schauen, habe aber 3 Sticks verschiedener Hersteller und mit verschiedener Speicherkapazität. Da wär es eher ungewöhnlich, wenn ich bei allen 3 Sticks gleiche Strings vorfände. Aber ich werde mal schauen.

GoTo0815 4. Mär 2009 10:52

Re: USB-Speicher identifizieren
 
Hallo,

ist ja lange her, dass ich den Thread geschrieben habe.
Mittlerweile setze ich für solche Fälle einfach die Einträge direkt auf dem Controller.
Wenn ein Kunde identifizierbare Sticks braucht, dann kaufen wir nur noch USB-Sticks mit Boards, welche wir auch nach unseren Wünschen gestalten können. Mit einem speziellen Tool können wir während dem Formatierungsvorgang so ziemlich alles setzen was wir brauchen. Vendor, Serial, Herstellereinträge, CD Partition, Partittionierung, Schreibschutz, Versteckte Partition FAT, Private Partition ohne Dateisystem. Selbst das Blinkverhalten der LED kann man so beinflussen.
Für ein bestimmtes Controllermodell haben wir dann ein paar Delphikomponenten entwickelt mit denen man über eine DLL auf den Stick von einer eigenen Anwendung aus zugreifen kann.
Nachteil: Dieser Zugriff braucht dann Adminrechte. Aber für das setzen der Seriennummern oder andere Einstellungen ist das ja ok.
Lesen der Einträge kann man ja dann später auch ohne entsprechende Rechte.

Gruß

Hendrik

schöni 4. Mär 2009 11:33

Re: USB-Speicher identifizieren
 
Da ist also die konkrete Vorgehensweise ein kleines Geheimnis? Oder gibt es Komponenten für Delphi, mit denen jeder seinen Stick auslesen kann, ich meine dokumentierte Komponenten. Muss nicht OpenSource geschweige Freeware sein. Es genügt eine kommerzielle Komponentensammlung mit bezahlbarem Preis.

Ist das Auslesen an sich wirlich so kompliziert?

delphifan2004 5. Mär 2009 09:54

Re: USB-Speicher identifizieren
 
Hallo!

Wozu der Aufwand? Ich glaube, irgendwo gelesen zu haben, das es für USB inzwischen auch sog. Dongles gibt. Leider wieß ich nicht mehr, wo.

GoTo0815 5. Mär 2009 13:53

Re: USB-Speicher identifizieren
 
Hallo,
also nicht das aus meinem vorigen Posting etwas falsch verstanden wird.
Ich meinte natürlich nicht, dass ich den Thread gestartet habe, sondern mich daran beteiligt habe.

DelphiFan2004 danke ich übrigens für den vorangegangenen hilfreichen Beitrag :-).
Ich denke eher, dass es genau darum geht, diese Art Dongles oder auch andere Software für USB Sticks selbst zu gestalten.
Irgendwer hat das ja mit dem USB Dongle auch so gemacht.

Also eine Sache die man sich ansehen sollte: HID components von Robert Marquardt (der hat sich hier auch an dem Thread beteiligt)

Gruß

Hendrik

hathor 5. Mär 2009 20:43

Re: USB-Speicher identifizieren
 
Zitat:

Zitat von delphifan2004
Hallo!

Wozu der Aufwand? Ich glaube, irgendwo gelesen zu haben, das es für USB inzwischen auch sog. Dongles gibt. Leider wieß ich nicht mehr, wo.


http://www.aladdin.de/special/hasp/s...FUaK3godNybllg

delphifan2004 5. Mär 2009 22:53

Re: USB-Speicher identifizieren
 
Zitat:

Zitat von HendrikSturm
Hallo,
also nicht das aus meinem vorigen Posting etwas falsch verstanden wird.
Ich meinte natürlich nicht, dass ich den Thread gestartet habe, sondern mich daran beteiligt habe.

DelphiFan2004 danke ich übrigens für den vorangegangenen hilfreichen Beitrag :-).
Ich denke eher, dass es genau darum geht, diese Art Dongles oder auch andere Software für USB Sticks selbst zu gestalten.
Irgendwer hat das ja mit dem USB Dongle auch so gemacht.

Also eine Sache die man sich ansehen sollte: HID components von Robert Marquardt (der hat sich hier auch an dem Thread beteiligt)

Gruß

Hendrik

Was mir abar partout nicht einleuchten will, ist der String, der ausgelesen wird. Das Auslesen mit einem dafür geeigneten Tool schon. Aber ich dachte, das dieser String für jeden USB Stick eindeutig sei, weshalb ich auch die Fragen von I.A irgendwo nachvollziehen kann.

Schöni schreibt noch das hier:
Zitat:

Da ist also die konkrete Vorgehensweise ein kleines Geheimnis?
Das sollte eigentlich niemals der Fall sein. Bei Verschlüsselungen weiß ich, das da der Schlüssel, aber nicht der Verschlüsselungsalgorithmus geheim ist.

Mit den HID Komponenten von Robert Marquardt wäre ja auch das Auslesen gelöst. Bleibt noch, den ausgelesenen String zu interpretieren.

Zitat:

Ich nehme mal die relevante Zeile aus deveject:
'USB-Massenspeichergerõt' 'USB\VID_054C&PID_008B\6&2A6BBF53&0&1' [REMOVEABLE]

oder der hier:
\\?\usbstor#disk&ven_sony&prod_storage_media&rev_1 .00#7&1ce25073&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
Da kann ich die Fragen von I.A irgendwie nachvollziehen. Es sei denn, bei typgleichen USB Sticks vom gleichen Hersteller und gleicher Speicherkapazität wäre der String bei jedem Stick gleich.

Das hier hat I.A gefragt:
Zitat:

-Muss es denn unbedingt die Seriennummer sein?

-Wie sieht der Gesamtstring bei einem Stick eines Herstellers bei einer Speicherkapazität aus?
Sins dies Strings dann bei beiden Sticks gleich?

-Wie sieht der String bei unterschiedlichen USB Geräten (Maus, Drucker, Tastatur, Speicherstick...) aus.

Ich denke, sobald dieser String für jedes Gerät eindeutig ist, können die Geräte schon mal unterschieden werden, denn eben mit dem Gesamtstring.

Aber wie sieht das beispielsweise bei zwei USB Sticks des selben Herstellers und der selben Speicherkapazität aus, wenn die beiden Sicks auch noch baugleich sind?
Wenn der Gesamtstring für jeden Stick eindeutig wäre hätte man ja die eindeuteige Zuordnung.

Wenn der String jedoch bei baugleichen Sticks mit gleicher Speicherkapazität und gleichem Hersteller bei jedem Stick gleich ist, ist diese Vorgehensweise natürlich nicht die gesuchte Lösung. Dann neheme ich meine Bemerkung zurück. Ich kann auch nachvollziehen, das mancher Programmierer seine Dongle Lösung selber gestalten will.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.
Seite 6 von 7   « Erste     456 7      

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