我正在尝试找出特定驱动器的设备类型。我想知道如何在Mac OS X和Linux上做到这一点,但是现在如果Windows解决方案太多就足够了。
所以,假设我有一个驱动器H.我可以通过Win32 API函数GetDriveType()确定该设备是否是可移动驱动器。我也可以在Mac OS X上找到它。
但我似乎无法以可靠的方式找到设备类型。比如,它是USB闪存驱动器,便携式硬盘驱动器(PHD)等。
通过Windows中的注册表,我似乎也找不到太多信息。虽然我希望尽可能使用一些API,但如果需要,我会使用注册表。
目前,我感兴趣的是..驱动器是闪存驱动器(所以我可以在我的程序中显示Usb闪存驱动器图标)或便携式硬盘驱动器(因此,将显示PHD图标)
答案 0 :(得分:3)
对于Windows,看起来SHGetFileInfo
可能会成功。也许你可以在驱动器的根文件夹上调用它?请参阅http://msdn.microsoft.com/en-us/library/bb762179(VS.85).aspx。
SH
...函数通常是Explorer使用的函数(假设它有效),这应该为您提供在Windows资源管理器中看到的确切图标...
答案 1 :(得分:1)
您可能希望查看DeviceIoControl
和IOCTL_STORAGE_QUERY_PROPERTY
。例如,您可以通过指定StorageDeviceProperty
并查看BusType
成员来判断设备是否为USB。 “设备类型”成员也很有趣。
如果您不介意放弃XP支持,我认为Virtual Disk Service会提供此类信息。
答案 2 :(得分:1)
device class你想要的是什么?如果是这样,您可以尝试libusb(available获取win32)。使用libusb_get_device_descriptor
功能。
答案 3 :(得分:1)
使用前面提到的IOCTL_STORAGE_QUERY_PROPERTY控制代码来检索STORAGE_DEVICE_DESCRIPTOR结构。部分结构是STORAGE_BUS_TYPE枚举,它将告诉您驱动器所在的总线(USB,1394,RAID,ATAPI,SCSI等)