全部博文(584)
分类: C/C++
2011-04-11 10:35:03
首先,可以用CSDN的搜索功能,关键字"硬盘",可以查到一堆。
Q:编程如何区分是本地磁盘还是USB移动硬盘?通过GetDriveType("H:")发现本地磁盘和USB移动硬盘的驱动器类型都为DRIVE_FIXED,为什么USB移动硬盘不是DRIVE_REMOVABLEA:Win2000以上用DeviceIoControl对卷下IOCTL_STORAGE_QUERY_PROPERTY直接取返回STORAGE_DEVICE_DESCRIPTOR结构里面的STORAGE_BUS_TYPE就行了
原地址:
Q:怎样识别硬盘是IDE的还是SCSI?A:通过注册表的设备参数就能判断出来HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE
原地址:
Q:编程如何区分普通硬盘和USB硬盘?
原地址:
Q:如何用编程获取CD-ROM的驱动器盘符
A:
以下是我今天刚在中回答的。
1、问:如何得到系统上已安装硬盘数量及每个硬盘的信息。
当前系统已安装硬盘在注册表中以下位置可以得到。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum其中Count值表示当前系统安装了几块硬盘。
0,1,2,……对应的值表明第0/1/2块硬盘的硬件信息在注册表哪个位置存放(相对于HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum)通过这些你可以知道硬盘是IDE硬盘还是USB硬盘。
如:我的系统上
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Disk\Enum下面Count的值是2,说明我的系统中装有两块硬盘0的值是IDE\DiskST3120022A______________________________3.06____\4a33325441354247202020202020202020202020说明我的第0块硬盘是块IDE硬盘1的值是USBSTOR\Disk&Ven_HITACHI_&Prod_DK23EA-40&Rev_0811\6&127aa5df&0说明我的第1块硬盘是块移动硬盘
Vendor ID在0/1的值中多少可以看出来一些,不过最好还是去其指向的注册表位置中找。
2、如何枚举一块硬盘上的驱动器盘符。
答:首先用FindFirstVolume/FindNextVolume可以枚举出系统中所有的卷(得到类似\??\Volume{67899342-0386-11d8-93cc-806d6172696f}的卷名)不用FindFirstVolume/FindNextVolume也可以到HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices下面找到这些卷名
然后你可以用CreateFile,将卷名传入,打开这些卷,再用调用DeviceIoControl,使用IOCTL_DISK_GET_PARTITION_INFO_EX获得这个卷的分区信息。你需要获得所有卷的分区信息。
接着,由1问中可以知道硬盘的序号,接着你用CreateFile打开#(#为磁盘序号,0, 1之类的),调用DeviceIoControl, 使用IOCTL_DISK_GET_DRIVE_LAYOUT_EX获得这个磁盘上所有分区的分区信息,跟前面得到的卷的分区信息比较可以得出这个磁盘有哪些卷。
最后,枚举系统中固定磁盘的盘符,用GetVolumeNameForVolumeMountPoint可以获得盘符对应的卷名,最终确定指定磁盘上分区的盘符。
当然也可以不用FindFirstVolume/FindNextVolume,直接用GetLogicalDrives取得所有固定磁盘驱动器的盘符,然后用CreateFile打开,再DeviceIoControl获得驱动器分区信息。再和物理磁盘的所有分区信息进行比较来确定物理磁盘上有哪些盘符
Q:如何在程序中获取系统中安装得硬盘个数!
A: