如何确定驱动器的类型?

时间:2010-11-07 18:25:45

标签: c++ windows

我正在尝试找出特定驱动器的设备类型。我想知道如何在Mac OS X和Linux上做到这一点,但是现在如果Windows解决方案太多就足够了。

所以,假设我有一个驱动器H.我可以通过Win32 API函数GetDriveType()确定该设备是否是可移动驱动器。我也可以在Mac OS X上找到它。

但我似乎无法以可靠的方式找到设备类型。比如,它是USB闪存驱动器,便携式硬盘驱动器(PHD)等。

通过Windows中的注册表,我似乎也找不到太多信息。虽然我希望尽可能使用一些API,但如果需要,我会使用注册表。

目前,我感兴趣的是..驱动器是闪存驱动器(所以我可以在我的程序中显示Usb闪存驱动器图标)或便携式硬盘驱动器(因此,将显示PHD图标)

4 个答案:

答案 0 :(得分:3)

对于Windows,看起来SHGetFileInfo可能会成功。也许你可以在驱动器的根文件夹上调用它?请参阅http://msdn.microsoft.com/en-us/library/bb762179(VS.85).aspx

SH ...函数通常是Explorer使用的函数(假设它有效),这应该为您提供在Windows资源管理器中看到的确切图标...

答案 1 :(得分:1)

您可能希望查看DeviceIoControlIOCTL_STORAGE_QUERY_PROPERTY。例如,您可以通过指定StorageDeviceProperty并查看BusType成员来判断设备是否为USB。 “设备类型”成员也很有趣。

如果您不介意放弃XP支持,我认为Virtual Disk Service会提供此类信息。

答案 2 :(得分:1)

device class你想要的是什么?如果是这样,您可以尝试libusbavailable获取win32)。使用libusb_get_device_descriptor功能。

答案 3 :(得分:1)

使用前面提到的IOCTL_STORAGE_QUERY_PROPERTY控制代码来检索STORAGE_DEVICE_DESCRIPTOR结构。部分结构是STORAGE_BUS_TYPE枚举,它将告诉您驱动器所在的总线(USB,1394,RAID,ATAPI,SCSI等)