确定哪些(如果有)PCI 设备插入主板 PCI(e) 插槽

2023-11-30

我正在用 C# 编写一个程序来在许多 Windows XP 工作站上执行硬件审核。

我需要确定哪些 PCI 设备是通过主板插槽连接的实际卡 - 而不是也使用 PCI 总线(内置于主板中)的板载设备。

我可以使用各种 WMI 类成功列出使用所有 PCI 总线的所有设备,但没有一个设备提供任何板载设备与通过插槽连接的设备的指示。

我并不挑剔信息的检索方式或来源(例如 Pinvoke、WMI、注册表等),只要它可靠即可。

谢谢你!


经过几个小时后,我想出了一个“相当”可靠的方法。

该逻辑从根本上假设开槽 PCI 设备总线 ID 是唯一的,并且与所有其他(板载)PCI 总线 ID 分开。到目前为止,我的测试表明情况确实如此;不管怎样这仍然是一个假设。

我的代码相当长,我确信它可以改进,所以我将用伪代码解释该过程:

  1. 确定有多少个插槽正在使用(并且仅当至少有一个插槽实际在使用时才继续):

    “从以下位置选择插槽指定Win32_系统槽其中当前使用情况 = 4"

  2. 存储属于 PCI 总线的所有设备 ID:

    “从以下位置选择设备IDWin32_总线其中总线类型 = 5"

  3. 捕获所有系统和逻辑设备关联:

    “选择 * 从Win32_设备总线"

  4. 搜索所有系统和逻辑设备关联(先行属性)并在每次出现每个 deviceID 时进行计数。

  5. 现在,您可以通过查找出现次数与系统插槽中找到的设备数量相同的 DeviceID 来确定插槽 PCI 设备所在的 DeviceID。

  6. 对于每个包含 DeviceID(在先行属性中)的 Win32_DeviceBus 结果,依赖属性将引用另一个用于 Win32_PnPEntity 类的 DeviceID。

  7. 使用新捕获的 DeviceID 查询 Win32_PnPEntity,您现在拥有所有设备信息(或者更确切地说,Win32_PnPEntity 提供的所有信息)!

    “选择 * 从Win32_PnPEntityWHERE 设备ID = '" + 设备ID + "'"

不幸的是,除了“使用中”查询返回的结果计数之外,我找不到任何方法来利用 Win32_SystemSlot 类返回的严格有限的信息(这会使生活变得太容易!)。

请注意,可能会遇到多个 PCI 总线,其设备数量与正在使用的插槽数相同。如果出现这种情况(我还没有遇到过),那么建议引发异常而不是继续assuming您正在查询正确的 PCI 总线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定哪些(如果有)PCI 设备插入主板 PCI(e) 插槽 的相关文章

随机推荐

  • 使用 eclipselink.media-type 值设置 Marshaller 属性时出现 PropertyException:application/json

    我正在尝试遵循位于的示例here但得到一个javax xml bind PropertyException 由于以下代码行 我收到此异常 marshaller setProperty eclipselink media type appli
  • iphone:Settings.bundle 返回空值

    我使用的是 xCode 3 2 然后转移到 xCode 4 2 并从 Settings bundle 获取一些值 它工作正常 同时 虽然我需要编辑 Settings bundle 中的一些值 但 Root plist 文件没有显示 所以我按
  • Django_filters 小部件自定义

    如何在 Django filters 中自定义小部件 我尝试这样做 但它在选择字段中的价值消失了添加小部件时的图像 当我删除小部件时 会显示该值删除小部件时的图像 抱歉我的英语不好 谢谢之前 class CustomerOrderFilte
  • 当 SwiftUI 已经导入合并时,为什么我还需要导入它?

    我正在尝试听 State变化并遵循这个答案 这是我的代码 import SwiftUI struct ContentView View State var isOn false var body some View Toggle Selec
  • C#/.NET/LINQ 的 Enumerable.All 方法的 Swift 等效项是什么?

    我想要一个将给定函数应用于序列并返回 true 的函数 当且仅当给定函数对序列的每个元素返回 true 时 例如可枚举 全部来自 C NET LINQ 世界 建立在乔恩的回答 您可以使用contains 而不是 显式 循环 extensio
  • read_html 编码错误

    我正在尝试网络抓取page 我想到使用 rvest 包 然而 我陷入了第一步 即使用read html来读取内容 这是我的代码 library rvest url lt http simec mec gov br painelObras r
  • 在 x86/x86_64 处理器上使用 LFENCE 指令是否有意义?

    我经常在互联网上发现LFENCE在 x86 处理器中没有任何意义 即它什么都不做 所以改为MFENCE我们可以绝对无痛地使用SFENCE 因为MFENCE SFENCE LFENCE SFENCE NOP SFENCE But if LFE
  • 在 R 中的多个分隔符处拆分字符串表达式

    我正在尝试解析 R 中的一些数学表达式 因此我想将它们分割为多个分隔符 等等 以便我获得表达式中包含的符号变量的列表 所以例如我想 2 x1 x2 3 x3 回来 x1 x2 x3 有没有好的方法呢 谢谢 您可以使用 R 解析器来查找表达式
  • 使用位置时防止元素显示在页脚顶部:固定

    我想使用CSS属性position fixed来固定元素的位置 但同时防止当用户滚动到页面底部时该元素位于我的页脚上方 有没有办法阻止元素以这种方式显示在页脚上 如果您希望有时固定元素而不是其他元素 则需要使用 JavaScript 来添加
  • 用于创建文件和日期的 csv 列表的 Windows 批处理文件

    我需要创建一个 Windows 批处理文件 该文件生成一个 csv 文件 其中包含目录中所有文件的三个字段 减去批处理文件本身 Fields 文件名 可以包含逗号 创建日期 修改日期 请注意 批处理文件将从目录运行 并且应该知道为当前目录中
  • Sql Server:索引列上的下部函数

    我发现一个大问题 我已将 Lower 函数添加到其中一个表的索引列中以获取数据 该表包含超过 100K 条记录 获取记录时 CPU 使用率达到 100 我无法理解 仅仅因为 Lower 函数 怎么会发生如此巨大的变化 请帮忙 如果您确实经常
  • 使用 strpos 进行多个搜索词匹配

    我想知道是否有人可以帮助解决我似乎无法解决的小问题 我的 此刻头在转圈 好的 我有一个包含大量信息行的 txt 文件 我正在尝试匹配关键字 与这些行并显示一定数量的匹配行 我将这段脚本放在一起 虽然它有效 但它只匹配一行 如果 单词的顺序与
  • 如何解决 AttributeError:“Resource”对象在 Google API 中没有属性?

    对于完整的上下文 我是脚本编写的新手 我正在尝试使用 Google 的 API 从 Google 管理员获取完整的用户列表 但我什至很难通过build 其中的一部分 无论我标记什么service它只是没有这个属性 除了close 我的最终目
  • 如何立即验证 Silverlight 3 Datagrid 中新插入的行?

    我有一个带有自定义 DataGrid 用户控件的 Silverlight 3 工具库 该网格无法直接访问 WCF RIA 服务实体类型 因此当用户在网格为空时单击网格时 我使用反射来添加新项目 private void InsertEmpt
  • 如何在 Python 3.2 中检查整数?

    我正在尝试编写一个程序 其中用户输入一个两位数整数 输出是打印第一位数字指示的次数的第二位数字 这是我到目前为止所拥有的 number input Type two digit integer n a int number 10 b int
  • 如何在 Elixir 中获取上个月

    如何在不使用 Elixir 中的包或库的情况下获取上个月的数据 例如 如果当前日期是2018 01 25 我会得到2017 12 25 或者如果当前日期是2018 03 31 我会得到2018 02 28 2018年不是闰年 Shehary
  • 如何在 Bootstrap 3 中在移动屏幕上显示桌面版本?

    如何在 Bootstrap 3 上在手机屏幕上显示桌面版本 I don t想要一个切换桌面 移动版本的链接 我只想在移动屏幕上显示桌面版本 需要明确的是 我希望该网站能够在平板电脑上做出响应 但是在 media screen max wid
  • 使用DecimalFormat时如何防止负号?

    我正在使用一个库 它允许我使用 DecimalFormat 模式配置数字格式化方式 我需要删除减号以显示数字的绝对值 我尝试了 0 00 0 00 和 0 00 但没有成功 我可以选择任何减号 例如 0 00 0 00 但我不能根本没有符号
  • c 警告:在常量表达式中使用 const 变量在 C 中是非标准的

    当我尝试将数组初始化为常量大小时 我收到此警告 2170 D 在常量表达式中使用 const 变量在 C 中是非标准的 file h typedef struct LED Blink Pattern LEDSeq void addError
  • 确定哪些(如果有)PCI 设备插入主板 PCI(e) 插槽

    我正在用 C 编写一个程序来在许多 Windows XP 工作站上执行硬件审核 我需要确定哪些 PCI 设备是通过主板插槽连接的实际卡 而不是也使用 PCI 总线 内置于主板中 的板载设备 我可以使用各种 WMI 类成功列出使用所有 PCI