WMI 逻辑磁盘与磁盘分区的关联

2024-01-05

我正在尝试整理一个列表,其中显示我的计算机系统中的所有 LogicalDisk 实例以及它们关联的驱动器号。编码采用 C#。

WMI 类Win32_LogicalDisk分区, Win32_磁盘分区 and Win32_逻辑磁盘似乎是完成这项工作的正确数据源:

  • Win32_LogicalDisk分区包含属性“前因“ 这显然链接到一个”DeviceId“ 类的属性Win32_磁盘分区

  • and Win32_LogicalDisk分区包含属性“依赖者“ 这显然链接到一个”DeviceId“ 类的属性Win32_逻辑磁盘

这是我的问题:

The 前因的财产Win32_LogicalDisk分区返回一个字符串值,例如:

\\\\HOME-PC\\root\\cimv2:Win32_DiskPartition.DeviceID=\"Disk #2, Partition #0\

但我只需要Disk #2, Partition #0来匹配它与DeviceId类的属性值Win32_磁盘分区.

相关属性值存在类似问题。

有没有办法获取这个子字符串(除了通过硬编码字符串解析)?

恐怕查询没有帮助,因为我还需要有关逻辑磁盘和关联磁盘分区的其他信息。我知道我必须覆盖具有多个驱动器号的扩展分区 - 这可以通过起始地址的财产Win32_LogicalDisk分区实例。


这种类型的枚举通常使用System.Management's
管理对象搜索器 https://learn.microsoft.com/en-us/dotnet/api/system.management.managementobjectsearcher使用 WQL 构建查询协会会员 https://learn.microsoft.com/en-us/windows/win32/wmisdk/associators-of-statement陈述
这是您可以遵循的一种顺序路径来检索系统中驱动器的信息:

枚举磁盘驱动器 => 对于每个 [DeviceID] =>
枚举要分区的磁盘驱动器 => 对于每个 [DeviceID]
枚举逻辑磁盘到分区

每个类中的对象都有其关联的属性:

磁盘驱动器 (MSDN) https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-diskdrive
分区(MSDN) https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-logicaldisktopartition
逻辑磁盘 (MSDN) https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-logicaldisk

using System.Management;

 //Define an initial scope for the following queries
 var scope = new ManagementScope(@"\\" + Environment.MachineName + @"\root\CIMV2");

 //Select all Disk Drives
 var query = new SelectQuery("SELECT * FROM Win32_DiskDrive");
 //Options => Timeout infinite to avoid timeouts and forward only for speed
 var options = new EnumerationOptions();
 options.Timeout = EnumerationOptions.InfiniteTimeout;
 options.Rewindable = false;
 options.ReturnImmediately = true;

 //New root Management Object
 var searcher = new ManagementObjectSearcher(scope, query, options);

 //Enumerate all Disk Drives
 foreach (ManagementObject moDisk in searcher.Get())
 {
    //Query the associated partitions of the current DeviceID
    string assocQuery = "Associators of {Win32_DiskDrive.DeviceID='" + 
                        mobDisk.Properties["DeviceID"].Value.ToString() + "'}" +
                        "where AssocClass=Win32_DiskDriveToDiskPartition";
    var assocPart = new ManagementObjectSearcher(assocQuery);
    assocPart.Options.Timeout = EnumerationOptions.InfiniteTimeout;

    //For each Disk Drive, query the associated partitions
    foreach (ManagementObject moPart in assocPart.Get())
    {
       Console.WriteLine("DeviceID: {0}  BootPartition: {1}", 
                         moPart.Properties["DeviceID"].Value.ToString(), 
                         moPart.Properties["BootPartition"].Value.ToString());

       //Query the associated logical disk of the current PartitionID
       string logDiskQuery = "Associators of {Win32_DiskPartition.DeviceID='" + 
                              moPart.Properties["DeviceID"].Value.ToString() + "'} " +
                              "where AssocClass=Win32_LogicalDiskToPartition";

       var logDisk = new ManagementObjectSearcher(logDiskQuery);
       logDisk.Options.Timeout = EnumerationOptions.InfiniteTimeout;

       //For each partition, query the Logical Drives
       foreach (var logDiskEnu in logDisk.Get())
       {
          Console.WriteLine("Volume Name: {0}  Serial Number: {1}  System Name: {2}",
                            logDiskEnu.Properties["VolumeName"].Value.ToString(),
                            logDiskEnu.Properties["VolumeSerialNumber"].Value.ToString(),
                            logDiskEnu.Properties["SystemName"].Value.ToString());
          Console.WriteLine("Description: {0}  DriveType: {1}  MediaType: {2}",
                            logDiskEnu.Properties["Description"].Value.ToString(),
                            logDiskEnu.Properties["DriveType"].Value.ToString(),
                            logDiskEnu.Properties["MediaType"].Value.ToString());
       }
    }
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WMI 逻辑磁盘与磁盘分区的关联 的相关文章

  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 如何避免情绪低落?

    我有一个实现状态模式每个状态处理从事件队列获取的事件 根据State因此类有一个纯虚方法void handleEvent const Event 事件继承基础Event类 但每个事件都包含其可以是不同类型的数据 例如 int string
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 如何在导出到 Excel 时将列表分配给 closeXML 中的单元格(下拉格式)

    我只是想导出一个Datatable Datatable没有任何数据 只有标题 另外 我还有一个List
  • 在类组件中使用多个上下文

    如何在 React 类组件中使用多个 Contex 就像如何在功能组件中使用多个上下文一样 例如在要使用的上下文上调用 useContext 两次或更多次 export default class Component extends Rea
  • ios 谷歌登录未获取个人资料范围

    我不久前在我的应用程序上实现了谷歌登录 一切正常 我请求谷歌个人资料和电子邮件范围以及打电话时https www googleapis com oauth2 v3 tokeninfo id token https www googleapi
  • CMake:如何使用不同的 ADD_EXECUTABLE 进行调试构建?

    我想构建我的应用程序 使调试模式是控制台应用程序 发布模式是 Win32 应用程序 根据文档 https cmake org cmake help v2 8 8 cmake html command 3aadd executable我需要添
  • 我无法在底部显示 LinearLayout 来滚动视图

    我正在使用布局 如下面的 xml 代码所示
  • Webpack [url/file-loader] 未解析 URL 的相对路径

    我在 Webpack 中遇到有关相对路径的问题 让我尝试解释一下这个场景 我有 2 个独立的项目工作区目录 项目 A 使用 Gulp 捆绑 稳定工作 项目 B 使用 Webpack 捆绑 新项目 由于这两个项目都使用相同的样式 所以我想重用
  • Node Express“favicon.ico”未找到错误

    我试图通过使用 Express 作为查询字符串传递的 URL 下载照片 但每次我尝试使用它时 我都会得到Error Invalid URI favicon ico 有没有办法让我的浏览器停止请求网站图标 为了下载图像 我使用image do
  • 如何删除AWS RDS Oracle实例上的存档日志文件

    我们有一个 AWS Oracle RDS 实例 最近空间不足ORA 01653 and ORA 01654 无法将表空间 X 中的索引 X 扩展 8 错误 通过运行查询进行调查 select nvl sum BLOCKS BLOCK SIZ
  • 如何将自定义组件添加到 Mui 主题选项中以便覆盖它?

    我已经搞乱了这一点 并且不断遇到类型错误 所以一定是我遗漏了一些东西 我想要做的是创建自己的组件 然后能够覆盖主题的组件部分中的某些样式 根据我的阅读 我需要将组件添加到 Components 接口 这允许我将该自定义组件添加到compon
  • 使用 jaxb 从我的类路径中的 xsd 生成源代码

    我正在尝试使用 JAXB 从类路径中的模式生成 java 类 对于 CXF 我从类路径中的 wsdl 生成了 java 类 如下所示
  • 如何在 WiX 安装过程中复制文件夹(而不是文件)?

    我正在使用 Wix 编写安装代码 我需要将整个文件夹安装到某个位置 然后将该文件夹复制到几个不同的位置 我可以使用代码将这些相同的文件一一安装到这些位置 但是该文件夹的大小约为 80 Mb 因此它会增加我的 MSI 大小 80 x 3 24
  • 在 .net 异常中如何获取带有参数值的堆栈跟踪

    我正在尝试在 net c 中添加一个未处理的异常处理程序 该处理程序应该对 用户 尽可能有帮助 最终用户主要是程序员 因此他们只需要提示他们操作错误的对象 我正在开发一个类似于应用程序崩溃时的 Windows XP 错误报告的 Window
  • 如何添加键盘快捷键以从文件资源管理器打开文件夹上的 VS Code?

    我希望能够按 在文件资源管理器中的任何文件夹中 然后在该文件夹上打开 Visual Studio Code 与右键单击 用代码打开 效果相同 紧迫 就像我在 GitHub 网站上所做的那样 这可能不是正式可行的 但是有什么解决方法可以使其发
  • 带有滚动功能的 jQuery Mobile 列表视图描述

    我有一个带有一些长标题的列表视图 它自动隐藏在小屏幕显示器上 并用 修复了帖子 我不确定如果整个标题没有显示在屏幕上 是否可以使这些长描述标题滚动 jsFiddle 上的示例 http jsfiddle net yVtVE 16 div d
  • 构建和处理具有不同行的列表视图的最佳方法

    在我的应用程序中 我在列表视图中显示数据 如下所示 列表视图中的每一行都是不同的 即 它们具有不同的视图结构 但每一行都由 1 到多个子视图组成 所有子视图都是相同的 问题 如果尝试从 xml 中增加行 那么我需要使用 xml 1 2 个子
  • BigQuery 字符串到时间戳,在源中保留时区

    我看过其他类似的帖子 不确定他们是否明确地回答了这个问题 也许他们确实回答了这个问题 很抱歉 如果我错过了任何可以回答这个问题的观点 我有一根绳子 2017 06 16T10 34 57 705 01 00 如何将其从字符串转换为 时间戳
  • 使用 Take 和 Skip 的 ASP.NET MVC 分页

    编辑 这个问题已经变得多余 因为大部分代码从使用存储库更改为仅使用控制器 作业 MVC 分页帮助 https stackoverflow com questions 4662611 mvc pagination help Cameron 我
  • jQuery:实际的div宽度

    我有两个 div 一个嵌套到另一个中 定义如下 div class wrapper div class content Content div div The css div wrapper width 660px overflow hid
  • 在一个图中绘制多个时间序列的 acf

    我正在尝试改变 R 中生成的 acf 图 但没有运气 我的目标是在一个图中绘制多个自相关 而不是使用标准直方图 我想将自相关绘制为使用不同颜色的线 因此很容易区分不同的自相关 该图还应包括 95 置信区间 如图所示 我的目标看起来像这样 编
  • WMI 逻辑磁盘与磁盘分区的关联

    我正在尝试整理一个列表 其中显示我的计算机系统中的所有 LogicalDisk 实例以及它们关联的驱动器号 编码采用 C WMI 类Win32 LogicalDisk分区 Win32 磁盘分区 and Win32 逻辑磁盘似乎是完成这项工作