Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Zugriff auf USB-Platten via Seriennummer? (https://www.delphipraxis.net/135873-zugriff-auf-usb-platten-via-seriennummer.html)

Angel4585 19. Jun 2009 07:33


Zugriff auf USB-Platten via Seriennummer?
 
Hallo!

Ist es möglich auf angeschlossene USB-Platten über den Explorer anstatt per Laufwerksbuchstabe, per Seriennummer oder so zuzugreifen? Wenn ja wie funktioniert das? :cyclops:
Edit: Also quasi wie auf Netzwerkfreigaben mit UNC-Notation anstatt per Netzlauferk?

:angel:

himitsu 19. Jun 2009 08:21

Re: Zugriff auf USB-Platten via Seriennummer?
 
mein USB-Stick:
Code:
VolumeName:       \\?\Volume{7a34e5ff-0781-11de-800b-b112a4bbba0e}
VolumeMountPoint: \\.\I:\
VolumePathNames:  I:\
also theoretisch ja, aber nicht vom Explorer aus, da geht der VolumeName nicht,
da dieser nicht über den Dateisystemtreiber läuft und man, wie auch mit \\.\I:\ nur direktzugriff auf die Partition direkt bekommt und da kann man auch gleich \\.\I:\ nehmen und muß sich nicht erst den VolumeName besorgen.

ToFaceTeKilla 19. Jun 2009 08:41

Re: Zugriff auf USB-Platten via Seriennummer?
 
Blöde Frage: Wozu? Ich nehme nicht an, dass du jedesmal die Seriennummer eintippen willst. Wenns dir darum geht, ihn immer direkt zu finden, benenn ihn entweder um (meiner heißt "MagicStick" :stupid: ) oder weise ihm nen festen LW-Buchstaben zu.

oki 19. Jun 2009 08:47

Re: Zugriff auf USB-Platten via Seriennummer?
 
Zitat:

Zitat von himitsu
mein USB-Stick:
Code:
VolumeName:       \\?\Volume{7a34e5ff-0781-11de-800b-b112a4bbba0e}
VolumeMountPoint: \\.\I:\
VolumePathNames:  I:\
also theoretisch ja, aber nicht vom Explorer aus, da geht der VolumeName nicht,
da dieser nicht über den Dateisystemtreiber läuft und man, wie auch mit \\.\I:\ nur direktzugriff auf die Partition direkt bekommt und da kann man auch gleich \\.\I:\ nehmen und muß sich nicht erst den VolumeName besorgen.

Das ist aber nicht die Seriennummer! Wollte ich nur zur Sicherheit feststellen.

ich kenne keine direkte Möglichkeit, das über die Seriennummer tun. Die einzige Möglichkeit scheint imho darin zu bestehen die Seriennummern aller Laufwerke zu ermitteln und dann den Laufwerksbuchstaben des passenden Drives zu finde (oder dann über den Namen wie himitzu es beschreibt). Das Thema Seriennummer ermitteln schein dabei aber der komplizierte Teil zu sein. Über diesem Thema brüte ich auch gerade. Es giebt hier im Forum Links zu entsprechenden Units. Ein guter Weg scheint WMI zu sein. Da bin ich aber auch gerade noch recht blaß :oops: Will mich eigentlich heute zu diesem Thema schlau machen.

Gruß oki

himitsu 19. Jun 2009 08:50

Re: Zugriff auf USB-Platten via Seriennummer?
 
ich weiß, daß ist die windowsinterne Verwaltungsnummer.

über die seriennummer geht es eh nicht direkt, da man da erstmal "alle" Laufwerke durchsuchen und deren Seriennummer auslesen und vergleichen müßte und wenn man eh schon auf dem Laufwerk ist, kann man ja gleich so dab bleiben.
abgeshn davon, daß nicht alle USB-Stichs eine Seriennummer haben.

oki 19. Jun 2009 09:04

Re: Zugriff auf USB-Platten via Seriennummer?
 
@himitzu: Natürlich hast du recht. Setz aber mal den Fall, dass am Rechner mehrere USB-Sticks gesteckt sind und du z.B. Daten nur auf einen autorisierten übertragen willst (per eigener Anwendung). Dabei ist dann nicht relevant, ob das auch für andere möglich ist, sondern dass du sicherstellst, dass deine Anwendung die genau dahin kopiert. Da ist die Seriennummer schon eine echte Hilfe. Ob das Beispiel jetzt etwas hinkt sei mal dahingestellt. Ich hab aktuell einen konkreten Ansatz, wo ich liebend gern die Seriennummer ermitteln und verwenden will.

Gruß oki

Angel4585 19. Jun 2009 09:05

Re: Zugriff auf USB-Platten via Seriennummer?
 
Muss ja nicht die Seriennummer sein, irgendwetwas was sich nicht verändert, wenn sich der Laufwerksbuchstabe verändert.

Bzw. angenommen ich habe zwei Sticks die ich abwechselnd anhänge, die beide den Laufwerksbuchstaben G haben.
Eine Software greift auf einen der beiden Sticks zu, soll aber nich auf den falschen zugreifen. Deswegen möchte ich als Pfad wo die Software zugreift nicht den Laufwerksbuchstaben sondern was allgemeineres eintragen.
Also eben sowas wie nen UNC Pfad der immer gilt, egal welchen Laufwerksbuchstaben das Teil hat, oder ob ein andermal ein anderer Stick am gleichen Laufwerksbuchstaben hängt.

Edit: Also der Pfad ist fest hinterlegt und muss nicht mehrmals eingegeben werden

oki 19. Jun 2009 09:39

Re: Zugriff auf USB-Platten via Seriennummer?
 
Dann reicht himitzu's Vorschlag mit dem VolumeName zu prüfen (wenn man ihn sich beim ersten mal gemerkt hat :lol: )

Gruß oki

himitsu 19. Jun 2009 10:30

Re: Zugriff auf USB-Platten via Seriennummer?
 
spätestens nachdem Windows neu installiert wird, legt es neue VolumeNames an (oder man löscht die Liste manuel und läßt sich beim nächsten neustart eventuel neue Namen verpassen :stupid: )


Es gibt aber eine Volume-Seriennnummer, welche zumindestens beim Formatieren per Zufall festgelegt wird.

oki 19. Jun 2009 10:43

Re: Zugriff auf USB-Platten via Seriennummer?
 
Joop, das ist die Volume-ID. Wird beim Erstellen einer Partition gesetzt und gilt für jede Partition auf dem Stick (können auch mehrere sein!).
Ich glaub, ich werd nicht zu sehr Off-Topic, aber trotzdem hier die Frage. Sieht jemand einen einfachen Weg mittels WMI nur die Seriennummer zu ermitteln, ohne gleich diverse externe Unit einbinden zu müssen (oder andere Wege; kompatibel ab W2000)?

Gruß oki

Angel4585 19. Jun 2009 11:26

Re: Zugriff auf USB-Platten via Seriennummer?
 
Also wenn ich das recht verstehe gibt es keinen Weg über den Explorer, ausser den Laufwerksbuchstaben?

mschaefer 19. Jun 2009 11:45

Re: Zugriff auf USB-Platten via Seriennummer?
 
Ja!

Aber Du kannst den Laufwerksbuchstaben für Deine USB-Sticks in der Datenträgerverwaltung an die Sticks binden und festlegen. Dann haben zwei Sticks immer zwei unterschiedliche Laufwerksbuchstaben, auch wenn der eine mal nicht eingesteckt ist.

PS: Ansonsten haben himitsu und oki die Verfahrensweise für Anwendungen beschrieben. Interessant ist das für Sticks mit Rom-Anteilen, da man die dann als Dongle benutzen kann.

Grüße // Martin

nahpets 19. Jun 2009 12:13

Re: Zugriff auf USB-Platten via Seriennummer?
 
Hallo,

@oki
Zitat:

Zitat von oki
Joop, das ist die Volume-ID. Wird beim Erstellen einer Partition gesetzt und gilt für jede Partition auf dem Stick (können auch mehrere sein!).
Ich glaub, ich werd nicht zu sehr Off-Topic, aber trotzdem hier die Frage. Sieht jemand einen einfachen Weg mittels WMI nur die Seriennummer zu ermitteln, ohne gleich diverse externe Unit einbinden zu müssen (oder andere Wege; kompatibel ab W2000)?

Gruß oki

schau Dir bei WMI mal
Code:
ROOT\CIMV2.Win32_Volume
DriveLetter
DriveType
Label
Capacity
FreeSpace
SerialNumber
FileSystem
IndexingEnabled
Automount
BlockSize
Compressed
DirtyBitSet
an, damit kann man zumindest für Festplatten die entsprechenden Werte auslesen, eventuell geht's ja auch für USB-Sticks.

oki 19. Jun 2009 12:42

Re: Zugriff auf USB-Platten via Seriennummer?
 
Hallo nahpets,

ich hb grad das WMI-Demo von himitzu getestet. Da seh ich auch die Seriennummer des angeschlossenen Sticks (auf jeden Fall ein einer Stelle versteckt :lol: ). Leider schreiben einige Member, dass die Unit sehr buggy sein soll (Sorry himitzu, hab ich nicht selber nachgeprüft und will auch keine üble Nachrede betreiben :oops: ).
Soweit ich das bis jetzt mitbekommen habe kann man die auch darüber einzeln ermitteln.

Huch Zeit rennt. Muß grad los, schreib nachher weiter.

Gruß oki

himitsu 19. Jun 2009 12:50

Re: Zugriff auf USB-Platten via Seriennummer?
 
Hauptgrund ist wohl ein "winziges" Speicherleck :mrgreen:
aber da hab ich auch erwähnt, aus welchen Units das mal entstanden ist ... kanst ja auch die große Version nutzen :stupid:

oki 19. Jun 2009 14:04

Re: Zugriff auf USB-Platten via Seriennummer?
 
Ok, bin wieder da.

@himitzu: Ist wirklich kein Vorwurf meinerseits. Hatte das nur erwähnt, dass das so sein soll. Die Autoren diese Beiträge sind imho auch welche die nach Kompetenz riechen. Ich hab in WMI noch gar nicht reingerochen, brauchte das bis jetzt einfach nicht. Im Grunde hatte ich gehofft, dass dazu jemand was sagt (hat ja auch geklappt :mrgreen: ). Da ich mich heute eigentlich schon entschieden hatte das auf dem WMI-Weg zu machen wurde ich halt etwas unsicher.

So, nun noch mal zurück.

@nahpets: Ja, SerialNumber ist mein Freund. Ich denke ich muss die Querry von ROOT\CIMV2.Win32_Volume auf ROOT\CIMV2.Win32_DiskDrive ändern. Der Knackpunkt ist aber, ob ich das selber direkt umsetzen kann oder Tonnen von fremden Units etc. einbinden muss. Selber neu schreiben scheint ja eher Schwachsinn zu sein. Ich brauch an dieser Stelle wirklich nur die Seriennummer. Das ganze andere Gedöns ist für mich uninteressant. Um eine Connection zu öffnen muss man ja eine Instanz von SWbemLocator erstellen und die Methode ConnectServer aufrufen. Dann dies tun, dann das tun und schwups, Seriennummer ist da :mrgreen:
Hört sich gut an nicht!? Tja, aber irgentwo muss ja dann eine Klasse TSWbemLocator und das ganze Gedöns dafür deklariert sein. Ich denke da scheitert es mit Delphi-Boardmitteln. Und jetzt stellt sich mir die Frage, ob es Sinn macht schnell eine kleine eigene Unit aufzumachen und die paar Sachen für meine kleine Abfrage zu implementieren, oder Wird das ein Monster, das ich lieber extern hole. Mehr als 3-6 Stunden wollte ich dafür eigentlich nicht investieren.

Joop, so siehts aus.

Gruß oki

himitsu 19. Jun 2009 14:16

Re: Zugriff auf USB-Platten via Seriennummer?
 
per API
Delphi-Quellcode:
If GetVolumeInformation(PChar(LogicalDrives[Di].VolumeName + '\'),
  PWideChar(S), 65, @W, W2, W3, PChar(S2), 65) Then Begin
  LogicalDrives[Di].SerialNumber   := IntToHex(W shr 16, 4) + '-' + IntToHex(W and $FFFF, 4);
per WMI
WMI > ROOT\CIMV2.Win32_CDROMDrive > VolumeSerialNumber
WMI > ROOT\CIMV2.Win32_LogicalDisk > VolumeSerialNumber

es gehen aber nicht immer beide Versionen

Quelle:
http://www.delphipraxis.net/internal...ght=datarescue

in dem verlinkten Programm siehst du eventuell, daß nicht immer alle Seriennummern existieren
(vorallem bei den Physical-Drives)

oki 19. Jun 2009 14:34

Re: Zugriff auf USB-Platten via Seriennummer?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Himitzu,

dank für den Link. Hab das grad mal ausprobiert. Für meinen gesteckten USB-Stick zeigt dein Tool keine Seriennummer an. Der Stick hat aber definitiv eine. Ich hab sie auch im WMI-Demo entdeckt.
Dass das die Seriennummer ist weis ich hundertpro.

An anderer Stelle verwendet das WMI-Demo die Abfrage "SELECT Name, Description, DriveType, FileSystem, FreeSpace, Size, VolumeSerialNumber from Win32_LogicalDisk" Da wird eine VolumeSerialNumber ausgeworfen. Dies ist aber nicht die Seriennummer des Stick. Ich habe eher das Gefühl, das ist die Volume-ID, also die ID der Partition. Das erkenne ich auch schon daran, dass ich einen Stick mit zwei Partitionen verwende, bei denen jede einen eigenen Laufwerksbuchstaben belegt.

Im Anhang für Win32DiskDrive habe ich die Seriennummer mal markiert.

Gruß oki

[edit] Ach, das wollte ich noch los werden. GetVolumeInformation liefert nicht die Hardware-Seriennummer sondern die ID der Partition. Diese ändert sich imho nach jeder Formatierung. [/edit]

himitsu 19. Jun 2009 14:50

Re: Zugriff auf USB-Platten via Seriennummer?
 
jupp ... Win32_LogicalDisk, also die Partition

Die PNP-DeviceID könntest du dir auch direkt auch der Registry rausholen, nur wird es da etwas schwieriger die Devices mit den Laufwerken zu verknüpfen und Inaktive (von schonmal angesteckten, aber grad nicht dranhängenden Datenträgern) rauszufiltern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:27 Uhr.

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