C++ 如何读取Windows设备管理器中的所有驱动信息
时间: 2024-03-19 19:46:13 浏览: 15
要读取 Windows 设备管理器中的所有驱动信息,可以使用 Windows API 提供的 SetupDi 系列函数。下面是一个简单的 C++ 代码示例,可以列出所有已安装的驱动程序名称和供应商:
```c++
#include <Windows.h>
#include <SetupAPI.h>
#include <iostream>
#pragma comment(lib, "setupapi.lib")
int main() {
HDEVINFO deviceInfo;
SP_DEVINFO_DATA deviceInfoData;
DWORD index;
CHAR deviceName[1024], vendorName[1024];
deviceInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
if (deviceInfo == INVALID_HANDLE_VALUE) {
std::cerr << "Failed to get device information" << std::endl;
return 1;
}
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (index = 0; SetupDiEnumDeviceInfo(deviceInfo, index, &deviceInfoData); index++) {
DWORD propertyType;
DWORD requiredSize;
// 获取设备名称
if (!SetupDiGetDeviceRegistryPropertyA(deviceInfo, &deviceInfoData, SPDRP_DEVICEDESC, &propertyType, reinterpret_cast<PBYTE>(deviceName), sizeof(deviceName), &requiredSize)) {
std::cerr << "Failed to get device name" << std::endl;
continue;
}
// 获取供应商名称
if (!SetupDiGetDeviceRegistryPropertyA(deviceInfo, &deviceInfoData, SPDRP_MFG, &propertyType, reinterpret_cast<PBYTE>(vendorName), sizeof(vendorName), &requiredSize)) {
std::cerr << "Failed to get vendor name" << std::endl;
continue;
}
std::cout << "Device: " << deviceName << std::endl;
std::cout << "Vendor: " << vendorName << std::endl;
std::cout << std::endl;
}
SetupDiDestroyDeviceInfoList(deviceInfo);
return 0;
}
```
该程序调用了 SetupDiGetClassDevs 函数获取设备信息列表的句柄,然后通过 SetupDiEnumDeviceInfo 函数枚举设备信息。对于每个设备,它调用 SetupDiGetDeviceRegistryProperty 函数来获取设备名称和供应商名称,并将结果输出到控制台。
需要注意的是,此代码需要在 Windows 环境下编译和运行,并且需要使用 Visual Studio 或其他支持 Windows API 的 C++ 编译器。