急问!!!如何在windows和linux下获取所有硬盘physicaldriveX???请大虾不惜赐教!!!

fox5520   2007-11-13 23:50 楼主
windows下硬盘的编号为physicaldrive0表示第一个硬盘,physicaldrive1表示第二个硬盘...(考虑远程映射的硬盘,可能有很多)。
现在我需要通过程序得到连接我电脑的所有的physicaldrive,比如physicaldrive0,physicaldrive1,physicaldrive2全部列举出来。
通过CreateFile()一个一个physicaldriveX打开,用DeviceIoContrl()发出去的笨方法除外!
是否有API函数可以枚举呢,包括Linux下(用户态或者内核函数都可以),请大虾不惜赐教!!!

回复评论 (9)

Windows API中GetLogicalDrives可以得到驱动器多少
点赞  2007-11-14 20:20
windows下可以检查对象管理器的名称空间是否有对应名称。
点赞  2007-11-14 20:33
GetLogicalDrives只能得到逻辑分区如C:D:等。
我需要的是物理硬盘physicaldrive
点赞  2007-11-14 21:57
Windows下面的问题我已经解决了,
通过SetupDiEnumDeviceInterfaces和SetupDiGetInterfaceDeviceDetail就可以枚举所有的硬盘路径,就可以打开设备文件下发SCSI命令了。
linux,Solaris,AIX的还没有解决,还请大虾指教!(一个笨的方法是写脚本执行fdisk -l或lsscsi得到)
不过我觉得应该有函数的
点赞  2007-11-15 21:44
不这么清楚,可以通过读取盘的PID 什么的吧。
点赞  2007-11-16 10:45
windows和linux的问题已经解决了,solaris的也解决了,还有HP和AIX的还没有搞定哦
点赞  2007-12-24 22:24
不用那么麻烦吧,BIOS里面可以得到硬盘的数目。而所有的系统都能读BIOS的信息,从这点入手不就全解决了?
其他OS不知道, DOS和Windows读BIOS就是读指定端口信息,区别是Windows用驱动来读,DOS可以直接读。
我想LINUX等应该也有类似的办法。
点赞  2008-1-11 14:05
BIOS?楼上的兄弟能否详细说明一下,现在AIX平台下的也解决了,就是用odmget可以得到。打开数据库CuDv和PdDv,查找class=disk。
循环就可以得到所有的磁盘。现在只剩HP一个平台还没有解决了。
点赞  2008-1-18 22:11
我也想知道,正在找這方面的資料~~~~~
点赞  2008-4-30 17:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复