tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
阅读:2112回复:6

2k下如何根据盘符得到其所属的硬盘

楼主#
更多 发布于:2005-05-16 13:54
比如有个盘符x:,如何得到它在哪块硬盘?
xp下可以用IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS,
2k下怎么办??
wqmmmmm
驱动牛犊
驱动牛犊
  • 注册日期2004-09-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望5点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-17 13:14
FileHandle = ZwCreateFile(\"\\\\??\\\\x:\",.....);
ObReferenceObjectByHandle(.....);
IoGetRelatedDeviceObject(...);


it\'s ok now!
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-18 14:49
我是想得到硬盘编号,就是xp下用ioctl_volume_get_volume_disk_extends得到的DiskNumber
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-05-19 09:25
我是想得到硬盘编号,就是xp下用ioctl_volume_get_volume_disk_extends得到的DiskNumber

哦 这个呀,WMI可以做到 而且很容易 MSDN上有示例。
---内核开发合作或提供基础技术服务QQ:22863668 ---
tooflat
论坛版主
论坛版主
  • 注册日期2002-07-08
  • 最后登录2014-03-11
  • 粉丝2
  • 关注0
  • 积分1007分
  • 威望551点
  • 贡献值3点
  • 好评度476点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-19 10:58
[quote]我是想得到硬盘编号,就是xp下用ioctl_volume_get_volume_disk_extends得到的DiskNumber

哦 这个呀,WMI可以做到 而且很容易 MSDN上有示例。 [/quote]

wmi我不熟,能讲得详细些吗,谢谢

[编辑 -  5/19/05 by  tooflat]
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2005-05-19 13:21
[quote][quote]我是想得到硬盘编号,就是xp下用ioctl_volume_get_volume_disk_extends得到的DiskNumber

哦 这个呀,WMI可以做到 而且很容易 MSDN上有示例。 [/quote]

wmi我不熟,能讲得详细些吗,谢谢

[编辑 -  5/19/05 by  tooflat] [/quote]
就向COM一样 MSDN里有例子 用
Win32_DiskDriveToDiskPartition 等类就行了。
就象这样使用
strComputer = \".\"
Set objWMIService = GetObject(\"winmgmts:\" _
    & \"{impersonationLevel=impersonate}!\\\\\" & strComputer & \"\\root\\cimv2\")
Set colDisks = objWMIService.ExecQuery _
    (\"Select * from Win32_LogicalDisk\")
For Each objDisk in colDisks
    Wscript.Echo \"DeviceID: \"& vbTab &  objDisk.DeviceID
    Wscript.Echo \"File System: \"& vbTab & objDisk.FileSystem
Next
---内核开发合作或提供基础技术服务QQ:22863668 ---
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-05-19 13:22
...detect which drive letter is associated with a logical disk partition?  Start with the Win32_DiskDrive class and query for instances of Win32_DiskPartition using the DeviceID property and the Win32_DiskDriveToDiskPartition association class. Now you have a collection of the partitions on the physical drive.
Query for the Win32_LogicalDisk that represents the partition using the Win32_DiskPartition.DeviceID property and Win32_LogicalDiskToPartition association class.
Get the drive letter from the Win32_LogicalDisk.DeviceID.
ComputerName = \".\"
Set wmiServices  = GetObject (\"winmgmts:{impersonationLevel=Impersonate}!//\" & ComputerName)
\' Get physical disk drive
Set wmiDiskDrives =  wmiServices.ExecQuery (\"SELECT Caption, DeviceID FROM Win32_DiskDrive\")

For Each wmiDiskDrive In wmiDiskDrives
    WScript.Echo \"Disk drive Caption: \" & wmiDiskDrive.Caption _
        & VbNewLine & \"DeviceID: \" & \" (\" & wmiDiskDrive.DeviceID & \")\"

\'Backslash in disk drive deviceid must be escaped by \"\\\"    
    strEscapedDeviceID = Replace(wmiDiskDrive.DeviceID, \"\\\", \"\\\\\", 1, -1, vbTextCompare)
\'Use the disk drive device id to find associated partition
    Set wmiDiskPartitions = wmiServices.ExecQuery_
          (\"ASSOCIATORS OF {Win32_DiskDrive.DeviceID=\"\"\" _
          & strEscapedDeviceID & \"\"\"} WHERE _
          AssocClass = Win32_DiskDriveToDiskPartition\")

    For Each wmiDiskPartition In wmiDiskPartitions
\'Use partition device id to find locial disk
        Set wmiLogicalDisks = wmiServices.ExecQuery _
            (\"ASSOCIATORS OF {Win32_DiskPartition.DeviceID=\"\"\" & _
             wmiDiskPartition.DeviceID & \"\"\"} WHERE _
             AssocClass = Win32_LogicalDiskToPartition\")

        For Each wmiLogicalDisk In wmiLogicalDisks
            WScript.Echo \"Drive letter associated with disk drive = \"
                 & wmiDiskDrive.Caption & wmiDiskDrive.DeviceID _
                 & VbNewLine & \" Partition = \" & wmiDiskPartition.DeviceID _
                 & VbNewLine & \" is \" & wmiLogicalDisk.DeviceID
        Next
    Next
Next
 
---内核开发合作或提供基础技术服务QQ:22863668 ---
游客

返回顶部