如何在没有驱动程序的情况下获取设备的硬件ID?
How to get the hardwareIDs of a device without a driver?
我目前正在为 XP 和 vista 等较旧的系统编写驱动程序扫描解决方案,我想获取未安装驱动程序的设备的 hardwareIds 列表。
SELECT * FROM Win32_PNPEntity returns 硬件 ID 列表,仅当为设备安装了驱动程序时。
这是我的代码:
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);
}
}
}
谢谢
您可以为此使用 ORMi 库。解决起来极其简单。
1) 定义你的 class:
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");
我目前正在为 XP 和 vista 等较旧的系统编写驱动程序扫描解决方案,我想获取未安装驱动程序的设备的 hardwareIds 列表。
SELECT * FROM Win32_PNPEntity returns 硬件 ID 列表,仅当为设备安装了驱动程序时。
这是我的代码:
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);
}
}
}
谢谢
您可以为此使用 ORMi 库。解决起来极其简单。
1) 定义你的 class:
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");