如何确定特定驱动器的类型?

时间:2011-02-17 07:18:17

标签: c++ windows winapi hardware getdrivetype

我对获取CPU的硬件信息感到有些不高兴,所以我提出了这个要求:硬盘驱动器,CD / DVD /蓝光阅读器,软盘以及USB是否可能。 我一直在寻找MSDN GetDriveType但似乎我不善于搜索或我不理解它。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我不确定您对链接到的文档有什么不了解...

该函数接受的唯一参数是您想要获取信息的驱动器的根目录(包括尾部反斜杠)。该函数返回一个值,指示驱动器的类型。显示的图表给出了可能的返回值以及它们各自的含义。

例如:

GetDriveType(_T("C:\\"))    // returns DRIVE_FIXED if C:\ is my hard drive
GetDriveType(_T("A:\\"))    // returns DRIVE_REMOVABLE if A:\ is my floppy drive
GetDriveType(_T("D:\\"))    // returns DRIVE_CDROM if D:\ is a CD-ROM drive
GetDriveType(_T("N:\\"))    // returns DRIVE_REMOTE if N:\ is a network drive

它还说如果你想确定一个驱动器是否是USB型驱动器,你需要调用SetupDiGetDeviceRegistryProperty function并指定SPDRP_REMOVAL_POLICY属性。

答案 1 :(得分:2)

如果要确定设备是USB设备,可以打开其句柄并使用DeviceIoControl()发送IOCTL查询以获取设备所连接的总线类型。

EnumUsbDrivesLetters - 帖子是俄语的,但它包含C ++源代码,因此可以很容易地理解这个问题。

干杯,安德里

答案 2 :(得分:1)

我知道Windows中唯一具有该信息的一体化API是WMI,但它的使用并不是非常简单。另一方面,许多程序使用直通控制代码或SMART_RCV_DRIVE_DATA等I / O控制代码直接与设备通信。

(我不知道Speccy是如何工作的,但我猜它会使用这些方法的组合来获取所需的系统信息。)