c# - 使用 WMI 查询获取挂载点的相应物理磁盘驱动器?

标签 c# wmi

有没有办法通过 WMI 检索挂载点(挂载到文件系统而不是挂载到驱动器盘符的卷)与其所属的物理磁盘驱动器之间的连接?

例如,我在 W2K8 服务器上有一个卷挂载点,挂载到“C:\Data\”,挂载点分布在服务器的物理磁盘驱动器 2、4 和 5 上(数据管理服务器管理器显示)但我找不到通过使用 WMI 了解这一点的方法。

具有驱动器盘符的卷可以与 WMI 类 Win32_DiskDrive --> Win32_DiskDriveToDiskPartition --> Win32_DiskPartition --> Win32_LogicalDiskToPartition --> Win32_LogicalDisk 连接——但问题是卷挂载点没有在类 Win32_LogicalDisk,它们仅在 Win32_Volume 中列出。而且我没有找到将 Win32_Volume 类与 Win32_DiskDrive 类连接起来的方法——缺少一些链接类。

有人知道解决办法吗?

最佳答案

我知道的唯一方法是使用 Win32 API 来提供帮助。

open a handle使用 Win32_Volume 到卷.DeviceID,稍作修改。您可以使用以下格式打开卷的句柄:

\\.\Volume{[GUID]}

然后您需要发出 IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS在打开的句柄上检索 VOLUME_DISK_EXTENTS结构体。此结构将包含卷的物理磁盘 ID 列表。

使用这些磁盘 ID,您可以在 Win32_DiskDrive 上查询 WMI .索引得到匹配的磁盘。

关于c# - 使用 WMI 查询获取挂载点的相应物理磁盘驱动器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155215/

相关文章:

c++ - 如何在 Windows 设备管理器中获取带有黄色感叹号的设备列表 - C++

c# - WMI 性能计数器查询问题

c# - 可空的 Guid 的问题?类型

windows - 如何强制事件跟踪 session 更频繁地刷新数据?

c# - Asp.Net Core CS2001 错误

c# - 在 Git 中 stash API key 的正确方法

c# - 如何获取硬盘序列号?

c++ - wmi 和 API 有什么不同

c# - 从 C# 中的字符串中删除空格?

c# - 如何遍历所有 XElement 属性并获取它们的值