如何利用SetUpDi系列函数来获取特定网卡的详细信息,例如其驱动版本和硬件ID?请提供完整的操作步骤和示例代码。
时间: 2024-10-31 18:17:12 浏览: 23
如果你正在寻找一种方法来编程获取计算机中网卡的详细信息,比如驱动版本和硬件ID,那么SetUpDi系列函数是一个不错的选择。具体操作可以分为三个步骤:首先,通过SetupDiGetClassDevs获取指定设备类(如网络适配器)的设备信息集句柄;然后,使用SetupDiEnumDeviceInfo遍历设备信息集以枚举每个设备;最后,利用SetupDiGetDeviceRegistryProperty获取所需的特定设备注册表属性。下面是具体的实现步骤和示例代码:
参考资源链接:[揭秘SetUpDi系列函数:系统设备信息获取与操作详解](https://wenku.csdn.net/doc/4xazwvads0?spm=1055.2569.3001.10343)
1. 使用SetupDiGetClassDevs获取网络适配器的设备信息集句柄。
```c
HDEVINFO hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_NET, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
```
确保在程序退出前调用SetupDiDestroyDeviceInfoList来释放句柄,避免内存泄漏。
2. 遍历设备信息集,并使用SetupDiEnumDeviceInfo获取每个网卡的基本信息。
```c
SP_DEVINFO_DATA DeviceInfoData;
for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) {
// 设备信息枚举代码
}
```
3. 对于感兴趣的网卡,调用SetupDiGetDeviceRegistryProperty来获取驱动版本、硬件ID等详细信息。
```c
SP_DEVINFO_DATA DeviceInfoData = { sizeof(SP_DEVINFO_DATA) };
for (DWORD i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) {
// 判断是否为感兴趣的网卡
// 例如,通过检查某些属性来确认
// ...
// 获取驱动版本
DWORD DataSize = 0;
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER, NULL, NULL, 0, &DataSize)) {
BYTE *DriverVersion = (BYTE *)LocalAlloc(LPTR, DataSize);
SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER, NULL, DriverVersion, DataSize, &DataSize);
// 处理DriverVersion数据...
LocalFree(DriverVersion);
}
// 获取硬件ID
// 重复上述步骤,但是使用SPDRP_HARDWAREID作为属性
// ...
}
```
通过以上步骤,你可以有效地获取到每个网卡的驱动版本和硬件ID等重要信息。这些信息对于系统管理、故障排除和设备驱动开发都是极其有用的。为了进一步了解SetUpDi系列函数的更多细节和高级用法,我强烈建议阅读《揭秘SetUpDi系列函数:系统设备信息获取与操作详解》。这本书详细解释了每个函数的工作原理和使用场景,提供了丰富的示例代码,帮助你更好地掌握设备信息获取的全过程。
参考资源链接:[揭秘SetUpDi系列函数:系统设备信息获取与操作详解](https://wenku.csdn.net/doc/4xazwvads0?spm=1055.2569.3001.10343)
阅读全文