C# 如何在没有驱动程序的情况下获得设备的硬件?

C# 如何在没有驱动程序的情况下获得设备的硬件?,c#,driver,wmi,C#,Driver,Wmi,我目前正在为XP和vista等较旧的系统编写driverscan解决方案,我想获得一个没有安装驱动程序的设备的硬件列表 仅当设备安装了驱动程序时,SELECT*FROM Win32_pPentity才会返回硬件EID列表 这是我的密码: string txt = "SELECT * FROM win32_PNPEntity"; ManagementObjectSearcher deviceSearch = new ManagementObjectSearcher("root\\

我目前正在为XP和vista等较旧的系统编写driverscan解决方案,我想获得一个没有安装驱动程序的设备的硬件列表

仅当设备安装了驱动程序时,SELECT*FROM Win32_pPentity才会返回硬件EID列表

这是我的密码:

string txt = "SELECT * FROM win32_PNPEntity";

        ManagementObjectSearcher deviceSearch = new ManagementObjectSearcher("root\\CIMV2", txt);
        foreach (ManagementObject device in deviceSearch.Get())
        {
            if (device["Status"].ToString() != "OK")
            {
                try
                {
                    foreach (var item in device.Properties)
                    {
                        Console.WriteLine(item.Name + ": " + item.Value);
                    }

                    Console.WriteLine("HardwareIDs:");
                    foreach (string id in (string[])device["HardwareID"]) { Console.WriteLine(id); }

                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
谢谢

您可以使用此库。解决这个问题非常简单

1) 定义您的类:

public class Win32_PnPEntity
{
    public string Caption { get; set; }
    public string Status { get; set; }
}
2) 访问WMI:

WMIHelper helper = new WMIHelper("root\\CimV2");

List<Win32_PnPEntity> devices = helper.Query<Win32_PnPEntity>().ToList().Where(p => p.Status == "Error");
WMIHelper helper=new WMIHelper(“root\\CimV2”);
List devices=helper.Query().ToList()。其中(p=>p.Status==“Error”);

WMI是Windows管理工具。它将只识别安装的内容。现在我注意到你有一个txt文件。里面有什么?如果它是一个兼容ID的列表,那么您需要将HID(硬件ID)调用到CID(兼容ID)的txt文件中。不,我存储查询的字符串就是txt。因此,如果WMI只能显示已安装内容的信息,那么设备管理器从何处获取其信息?假设您有一个ID,并且该ID已过期。MS具有具有所有ID设置的服务器。这是关于微软的。现在让我们假设你去系统制造商的网站,比如说惠普,你看驱动程序,有一个注释说在安装驱动程序之前备份计算机。因为无论是MS还是制造商网站,计算机都只会对ID进行匹配。他们有一个包含兼容和不兼容ID列表的服务器列表。因此,理论上,ID xXxX与ID OXO兼容,然后它会更新。如果不是,它会说无法安装。当您转到设备管理器并更新连接到MS服务器的设备时,一些设备ID会连接到制造商网站。大多数设备ID都是在BIOS中设置的,这就是它应该具备的功能。从长远来看,您要做的是获取与型号不兼容的设备ID并列出这些ID。这太过分了。所需的设备ID模型实现起来简单,编码更少。此外,如果MS未列出设备ID,则意味着该设备模型与其他ID不兼容。如果查看设备管理器和属性,则有几件事情需要查看。我正在制作一个系统控制监视器,让我看到安装了什么硬件和软件。这个硬件和软件有两个方面。硬件ID必须与操作系统兼容。这就是为什么存在兼容模式。您不能在Windows上使用XP中的设备驱动程序。你可以,但我不推荐。