[心得]在多硬盘系统中,如何将每一个磁盘上的分区与磁盘盘符对应起来

转载请注明出处,谢谢,复制粘贴,举手之劳,代表至少您对原作者的尊重。


问题描述:我自己的机器上有多个硬盘,如何把磁盘的盘符与它所在的硬盘对应起来呢?例如分许 C:/究竟在哪个硬盘上,每一个硬盘又具有多少个分区,每一个分区的盘符又是啥呢?

 

解决方案概述

第一步,获取本机所有硬盘的设备名称,该名称将传递给CreateFile函数使用。我们在这里需要使用到WMI服务

有关于WMI,可以查阅MSDN的描述,下面的代码来自于MSDN上的一个示例

ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.WIN32COM.v10.en/wmisdk/wmi/example__getting_wmi_data_from_the_local_computer.htm

 


 

当作到上面的While循环内时,我们就已经开始枚举所有磁盘设备了,我们得到的信息包括磁盘的名称和序号,当然WMI提供了非常多的属性值,要查询这些属性值,请参考Win32_DiskDrive类的描述

 

第二步,打开每一个设备,得到设备句柄,这些代码应该是出现在上面的其他工作部分


 

第三步,调用DeviceIoControl得到相应磁盘设备的分区布局


 

第四步,对相应磁盘分区布局内的每一个分区,判断它的分区符号

大致思路是:

我们已经知道了磁盘的序号,和磁盘上每一个分区的序号。

现在我们从分区符号a->z,分别打开这些盘符,得到各个盘符所在的磁盘序号和分区序号,与我们已知的磁盘序号以及分区序号对比,如果相等,就说明该盘符就位于我们当前枚举的磁盘设备的相应分区上。


注意:看到这里你也许会想,我们不是可以得到盘符对应的磁盘ID和分区ID么,那么我们直接从a->z枚举盘符不就解决了你说的问题么。

 

简单的说,您可以这么做。但是这样每一个磁盘可能存在以下的情况:【分区虽然存在,但是没有盘符。】

在这种情况下,磁盘上的分区将找不到它对应的盘符。也就是说,假如磁盘1分了3个区,而最后一个区没有盘符,则可能出现

分区1 c:/

分区2 d:/

分区3 无盘符

 

如果只是枚举a->z的盘符,则得到的结果就是

c:/ 位于分区1,磁盘1

d:/ 位于分区2,磁盘1

 

而我们无从知晓磁盘1上还存在有一个没有盘符的分区3

 


 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值