Wie VID, PID und Seriennummer von USB-Stick auslesen?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Volker Schmid hat geschrieben:G:\ ist mein USB Stick. Leider kommt absolut nix als Ergebnis. DeviceIoControl liefert immer 0 als Ergebnis und die Struktur bleibt leer.
Ich bekomme für "L:" immerhin
hVolume: 1980
res.l: 0
bytesreturned.l: 0
media SizeOf: 2064
Status: 0
? - can not get a result
Volker Schmid hat geschrieben:Das Zitat stammt irgendwo von hier:
http://www.microsoft.com/whdc/device/st ... fault.mspx
Umpf.. ma gucken, ob ichs find.... :o
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

scholly hat geschrieben:Ich bekomme für "L:" immerhin
hVolume: 1980
res.l: 0
bytesreturned.l: 0
media SizeOf: 2064
Status: 0
? - can not get a result
Ich bekomme genau das Selbe. Auch für meinen Kartenleser unabhängig davon, ob eine Karte drin ist, oder nicht
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Try this :mrgreen:

Code: Alles auswählen

;Diese Werte hab ich vorher ermittelt, solltest Du gegen Deine austauschen
Define InterfaceType.s = "USB"
Define Model.s			    = "TOSHIBA TransMemory USB Device"
Define PNPDeviceID.s		= "USBSTOR\DISK&VEN_TOSHIBA&PROD_TRANSMEMORY&REV_6.50\0B310B6010004954&0"

Define cur_Model.s			    
Define cur_PNPDeviceID.s		

IncludeFile "wmi.pbi" ; http://www.purebasic.fr/german/viewtopic.php?t=2925

WMI_INIT()
  WMI_Call("Select * FROM Win32_DiskDrive", "InterfaceType, Model, PNPDeviceID")
  ResetList(wmidata())
  While NextElement(wmidata())
    Debug wmidata()
    If wmidata() = InterfaceType.s 
      NextElement(wmidata())
      cur_model = wmidata()
      NextElement(wmidata())
      cur_PNPDeviceID = wmidata()
      If ((cur_model = model) And (cur_PNPDeviceID = PNPDeviceID))
        MessageRequester("", "so, Volker, damit kannste weiterarbeiten")
      Else
        MessageRequester("","Pappnase, dat gilt nich. Wieso haste 2 USB-Sticks drin ?")
      EndIf
    Else
      NextElement(wmidata()):Debug wmidata()
      NextElement(wmidata()):Debug wmidata()
    EndIf
  Wend
WMI_RELEASE("OK")

have fun :lol:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hi Scholly,

Ich denke, dass WMI zu verwenden ist dann doch wohl die beste Möglichkeit. Ich hab dein Beispiel umgebaut und mit dem Include komme ich voran.

Danke, an alle!

Grüsse,

Volker
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Ich hab Schollys Code für meine Zwecke erweitert. Eventuell kann damit jemand was anfangen...

Code: Alles auswählen

; Test für das WMI Include
; Ermittelt Laufwerke und zugehörige Informationen...

Define cur_Model.s             
Define cur_PNPDeviceID.s       

IncludeFile "WMI_include.pbi" ; http://www.purebasic.fr/german/viewtopic.php?t=2925

WMI_INIT()                                ;   Wert1       Wert2     Wert3       Wert4    Wert5 Wert6  Wert7
WMI_Call("SELECT * FROM Win32_DiskDrive", "InterfaceType, Model, PNPDeviceID, MediaType, Name, Size, Status") 
ResetList(wmidata()) 
While NextElement(wmidata())  ; Wert 1
  cur_Type.s = wmidata()
  
  NextElement(wmidata())     ; Wert 2
  cur_Model.s = wmidata() 
  
  NextElement(wmidata())     ; Wert 3
  cur_PNPDeviceID.s = wmidata() 
  
  NextElement(wmidata())     ; Wert 4
  cur_Media.s = wmidata()
  
  NextElement(wmidata())     ; Wert 5
  cur_Name.s = wmidata()
  
  NextElement(wmidata())     ; Wert 6
  cur_Size.f = ValF(wmidata())
  cur_Size.f = cur_Size.f / 1024 ; kbytes
  cur_Size.f = cur_Size.f / 1024 ; mbytes
  cur_Size.f = cur_Size.f / 1024 ; gbytes
  
  NextElement(wmidata())     ; Wert 7
  cur_State.s = wmidata()
  
  Debug " "
  Debug "Type: " + cur_Type.s
  Debug "Model: " + cur_Model.s
  Debug "D_PID: " + cur_PNPDeviceID.s
  Debug "Media: " + cur_Media.s
  Debug "Name: " + cur_Name.s + " (value of CIM_ManagedSystemElement)"
  Debug "Size: " + Str(cur_Size.f) + " GB"
  Debug "State: " + cur_State.s
  
  Select cur_Type.s
    Case "USB"
      Debug "------------> USB-Gerät: " + cur_Model.s
      
    Case "SCSI"
    
    Case "IDE"
    
    Default
    
  EndSelect
  
Wend 
WMI_RELEASE("OK")
Grüsse,

Volker
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag von Rings »

danke, kann ich gut brauchen
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Volker Schmid hat geschrieben: Damit dieser nicht einfach dupliziert werden kann, möchte ich den Inhalt mit dem Hashcode der Stick-Seriennummer verschlüsseln (AES256).
Ich bin mal wieder zu doof zum suchen :oops: :
Gibts irgendwo ein Beispiel, wie man sowas macht und hinterher checkt ?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hi Scholly,
Gibts irgendwo ein Beispiel, wie man sowas macht und hinterher checkt ?
Beispiel:

Du kannst natürlich jeden anderen Hash- und symetrischen Verschlüsselungs-Algorithmus verwenden. Ich denke, mit SHA-2 und AES256 bist Du aber auf dem Stand der Zeit. MD5 und RC4 sind sicher veraltet.

Generieren:

1. Du liest die Seriennummer des USB-Stick aus
2. Du lässt den Hashcode daraus berechnen (zB SHA-2 mit 256 Bit)
3. Du veschlüsselst deine Daten mit dem Hashcode als Schlüssel (zB AES 256)
4. Diese Daten schreibst Du auf den Stick oder auf die Platte.
5. Fertig.

Prüfen:

1. Du liest die Seriennummer des USB-Stick aus
2. Du lässt den Hashcode daraus berechnen (zB SHA-2 mit 256 Bit)
3. Du entschlüsselst deine Daten mit dem Hashcode als Schlüssel (zB AES 256)
4. Daten prüfen: Ist es nur Mist -> Falscher USB Stick. Daten lesbar -> Es war der selbe!
5. Fertig.

Du kannst nun frei entscheiden, ob Du den USB-Stick nur als Dongle (verschlüsselte Daten sind auf dem Desktop) oder als nicht so einfach kopierbaren Datenspeicher (verschlüsselte Daten auf dem Stick) verwenden möchtest.

Das schöne ist: Die Daten sind nur wieder lesbar, wenn Du den selben Stick zur Verfügung hast. Das kann für viele Hacker ein echtes Problem werden wenn der USB-Stick nach Feierabend am Schlüsselbund hängt...

Grüsse,

Volker
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Danke für die Beschreibung.
Da ich aber noch nie was mit Hash- und symetrischen Verschlüsselungs-Algorithmen zu tun gehabt hab,habbich keine Idee, wie das berechnen, verschlüsseln und entschlüsseln unter PB gehen könnte und eigentlich auf den Hinweis auf einen Code-Schnipsel oder was anderes zum (er)lernen gehofft :oops:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kukulkan
Beiträge: 1066
Registriert: 09.09.2004 07:07
Wohnort: Süddeutschland
Kontaktdaten:

Beitrag von Kukulkan »

Hi Scholly,

Ich nehm für Hashcodes und AES Verschlüsselung die diCryptoSys APi (http://www.cryptosys.net/#api). Das kostet was, ist es aber allemal Wert und steht auch auch Linux zur Verfügung (Autor anschreiben).

Wenn Du mit Kryptografie noch nie Berührung hattest, dann suche mal den Einstieg über zB Google mit "kryptologie einführung" als Suchbegriff. Auch die Wikipedia kann hilfreich sein...

Grüsse,

Volker
Antworten