USB-Laufwerk ermitteln
Hallo,
via dem hier geposteten und leicht modifizierten Code lasse ich mir alle (angeschlossenen) USB-Geräte (HID; USB-Stick) auflisten. Das klappt auch ganz gut, nur möchte ich den Code dahingehend erweitern, dass ich auch den dazugehörigen Laufwerksbuchstaben bekomme, der dem USB-Gerät von Windows zugeordnet wurde (also der Buchstabe, den man im Explodierer sieht). Frage: Wie ermittle ich den Laufwerksbuchstaben? Dank vorab für Tipps und Gruß, Carsten Nachtrag: Ein "nice-to-have" wäre noch, wenn ich auch die VID und PID darüber ermitteln könnte... |
Re: USB-Laufwerk ermitteln
Hallo,
ich bin zwar inzwischen hier fündig geworden, wie ich bei einem Gerätewechsel an den Laufwerksbuchstaben komme, doch wenn, wie in meinem Fall, der USB-Stick bereits vor dem Programmstart gesteckt ist, kommt dieser Event ja nicht vorbei. Ferner suche ich noch immer nach einer Möglichkeit, zum Laufwerksbuchstaben die VID und PID ermitteln zu können. Hat denn niemand eine Idee? Gruß, Carsten |
Re: USB-Laufwerk ermitteln
Zitat:
Vielleicht helfen dir die folgenden API-Funktionen als Stichpunkte weiter: FindFirstVolume/FindNextVolume, GetVolumePathNamesForVolumeName, DeviceIoControl(IOCTL_STORAGE_QUERY_PROPERTY/IOCTL_STORAGE_GET_DEVICE_NUMBER/IOCTL_DISK_GET_PARTITION_INFO(_EX)/...). Edit: GetVolumePathNamesForVolumeName ist recht aufwändig zu emulieren (für Windows 2000) und die API-Funktion liefert bei zirkulären Referenzen auch die erste Rekursion als Ergebnis (A ist in B:\Mount eingebunden und B in A:\Mount, dann ist im Ergebnis neben A:\ auch A:\Mount\Mount enthalten). Edit: oh, ich vergaß die API QueryDosDevice zu erwähnen :) |
Re: USB-Laufwerk ermitteln
Zitat:
Ich wollte eigentlich nur (beim Programmstart oder bei einem erkannten Gerätewechsel via wm_DeviceChange) alle Laufwerke/Laufwerksbuchstaben nach Removable-Geräten durchsuchen (sind ja nur max. 26) und dann, wenn es sich um ein USB-Gerät handelt, deren VID und PID auslesen. Mit der unter#2 genannten Routine finde ich ja schon mal den entsprechenden (neuen) Gerätebuchstaben und bekomme via GetVolumeInformation den im Windows Explorer angezeigten Name. Und irgendwer (Plug&Play Manager?) muss ja den Zusammenhang zw. dem Laufwerksbuchstaben und VID/PID kennen... :wall: Zitat:
|
Re: USB-Laufwerk ermitteln
Zitat:
|
Re: USB-Laufwerk ermitteln
Zitat:
Ich versuche mir gerade an
Delphi-Quellcode:
wobei DriveLetter der über GetDriveType ermittelte Typ 'DRIVE_REMOVABLE' ist.
var HidHandle : THandle;
HidHandle:= CreateFile(PChar('\\.\'+DriveLetter+':'), GENERIC_READ OR GENERIC_WRITE, FILE_SHARE_READ OR FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); Im weiteren wollte ich gerne auf die exportierten Funktionen von HID.DLL zugreifen, doch die dortige Funktion HidD_GetAttributes will noch nicht so recht. :gruebel: In der Online-Hilfe ist dazu zu lesen: ---schnipp--- Comment: Only user-mode applications can call HidD_GetAttributes. Kernel-mode drivers can use IOCTL_HID_GET_COLLECTION_INFORMATION. ---schnapp--- Und die Sache mit dem IOCTL_HID_GET_COLLECTION_INFORMATION verstehe ich noch nicht so recht... Gruß, Carsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr. |
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