如何在c ++中获取有关网络适配器的信息?

时间:2010-09-20 01:04:27

标签: .net c++ winapi networking wmi

如何获取有关系统中所有网络适配器的信息? 名称,制造商,位置(PCI,插槽2),驱动程序版本。 实际上我用WMI检索了名称和制造商,但我找不到位置和驱动程序版本。 我只需要c ++解决方案而不是MFC / clr。 winapi功能? wmi(缺少一些东西)? 我还需要在系统上检索.NET版本。

2 个答案:

答案 0 :(得分:1)

参考你的第二个请求:'我需要在系统上检索.NET版本'

这可以通过Unmanaged Hosting API完成。如果您使用的是.NET 4.0,则可以使用新的ICLRMetaHost接口。 EnumerateInstalledRuntimes()函数将为您提供当前安装的所有.NET运行时。

您也可以使用WMI执行此操作,但这需要更多工作。安装.NET时,会创建一个WMI Win32_Product对象。使用WMI Studio,您可以连接到root\CIMV2(Windows 7),导航到CIM_Product\Win32_Product,并查看所有MSI安装的应用程序的所有WMI对象。您将能够在那里找到所有已安装的框架实例,并确定如何在代码中识别它们。

仅提及您可以从WMI获得的有关网络适配器驱动程序的内容。我假设您正在使用Win32_NetworkAdapter个对象。该对象上的ServiceName属性与Name对象的Win32_SystemDriver属性相关联,该属性表示用于该适配器的驱动程序。 Win32_SystemDriver个对象没有版本信息,但它们确实有实际文件二进制文件的路径。例如,我的无线网络适配器正在使用此驱动程序C:\Windows\system32\DRIVERS\athr.sys。获得完整的驱动程序路径后,您可以通过其他机制获取文件的版本。

答案 1 :(得分:0)

我不知道WMI是否公开了这个,但是位置信息是通过SetupAPI函数SetupDiGetDeviceRegistryProperty通过SPDRP_LOCATION_INFORMATION从注册表获得的。