如果是在Windows2000或WindowsXP中还可以用 WMI 来帮忙。
(注:下面用BASIC语言描述)例如:
1、取的物理硬盘的信息:   Dim DiskDriveSet 
   Dim dd
   Set DiskDriveSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
                                           InstancesOf("Win32_DiskDrive")
       
   For Each dd In DiskDriveSet
           'identification info
   Debug.Pring  dd.Index '//硬盘的编号,如 0、1、2……
   Debug.Pring  dd.DeviceID '//设备ID,如\\.\PHYSICALDRIVE1
   Debug.Pring  dd.Model        '//设备型号,如IC35L040AVER07-0(这个是IBM Deskstar 40G 硬盘的型号,不知道这个
是不是就是论坛经常提到的 硬盘序列号。)
   Debug.Pring  dd.MediaType    '//设备介质类型    'physical info
   Debug.Pring  FormatNumber(dd.Size, 0) '//盘的容量
   Debug.Pring  dd.Partitions '//有多少个分区
   Debug.Pring  FormatNumber(dd.BytesPerSector, 0)   
   Debug.Pring  FormatNumber(dd.SectorsPerTrack, 0)
   Debug.Pring  FormatNumber(dd.TotalCylinders, 0)   Next '//如果有多个硬盘则显示下一个硬盘的信息。2、取得逻辑盘的信息
   dim LogicalDiskSet 
   dim ld
   Set LogicalDiskSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
                                  InstancesOf("Win32_LogicalDisk")
    
    
   For Each ld In LogicalDiskSet
'元素有很多下面仅列出三个,其他的可以查看MSDN
Debug.Pring ld.Name 
Debug.Pring ld.Size 
Debug.Pring ld.VolumeName
Debug.Pring ld.VolumeSerialNumber 
   Next
不过…………………… 
他们的功能都是独立,没有关联的。
即我不可以得到一个物理硬盘的所有分区的盘符是什么!!!按道理用 WMI 的 ASSOCIATORS 可以。
例如用这样的方法可以得出某个盘符是属于那个物理盘(假设我有多个硬盘)Set DiskSet = GetObject("winmgmts:").ExecQuery("Associators of {win32_LogicalDisk='C:'} where ResultClass = Win32_DiskPartition")For Each dd In DiskSet 
    Debug.Print dd.Name & " => " & dd.DiskIndex
Next可是反过来做却不行:Set DiskSet = GetObject("winmgmts:").ExecQuery("Associators of {Win32_DiskDrive=0} where ResultClass = win32_LogicalDisk")
For Each dd In DiskSet 
    Debug.Print dd.Name
Next所以…………
问题仍然未解决。相关的资料可以看:
http://www.csdn.net/Expert/TopicView1.asp?id=895291
http://www.csdn.net/Expert/TopicView1.asp?id=893191希望热衷于研究编程的同志们一同动手把它解决掉 :))