2010-06-08 4 views
4

J'utilise Win32 API.Comment obtenir la lettre de lecteur pour le DevicePath

Vraiment je ne comprends pas comment obtenir la lettre de lecteur pour DevicePath d'une clé USB.

pouvez-vous svp me l'expliquer

(ce que j'ai est SP_DEVICE_INTERFACE_DETAIL_DATA DevicePath

utilisant ce chemin Device je reçois VID et PID du périphérique USB

mon chemin de l'appareil ressemble ci-dessous

"\? \ usb # vid_1a8d & pid_1000 # 358094020874450 # {a5dcbf10-6530-11d2-901f-00c04fb951ed}"

Est-il possible de la carte lettre de lecteur à mon appareil PATH

donc s'il vous plaît aidez-moi à la carte lettre de lecteur à DevicePath)

de Merci pour toute aide.

+0

Je pense que cela pourrait être un peu utile: http://stackoverflow.com/questions/733206/find-which-drive-corresponds-to-which-usb-mass-storage-device-in-winxp – Piskvor

Répondre

5

Le link je fournis dans votre autre question donne vous avez toutes les informations dont vous avez besoin pour cela. En semi-pseudocode:

DiskDevice = CreateFile(DiskDevicePath); 
DiskDeviceNumber = DeviceIoControl(DiskDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER); 
for each VolumeDevicePath in GetLogicalDriveStrings 
    VolumeDevice = CreateFile(VolumeDevicePath); 
    VolumeDeviceNumber = DeviceIoControl(VolumeDevice, IOCTL_STORAGE_GET_DEVICE_NUMBER); 
    if(VolumeDeviceNumber == DiskDeviceNumber) 
     // volume (i.e. "G:") corresponding to VolumeDevicePath resides on disk (i.e. "XYZ USB Storage Device") corresponding to DiskDevicePath 

Je ne suis pas sûr à 100% (il a été un certain temps), mais je pense que le dispositif de disque (GUID_DEVINTERFACE_DISK) est un enfant du périphérique USB (GUID_DEVINTERFACE_USB_DEVICE). En tout cas, je pense que DiskDevicePath doit être le chemin du périphérique de disque (pas le périphérique USB).

Questions connexes