相关疑难解决方法(0)

如何从 C++ 获取 Windows 上驱动程序的版本

我正在寻找一种编程方式来获取驱动程序的版本号。我想要设备管理器在设备的驱动程序属性中显示的相同数字。

背景:我有一个与一些自定义硬件对话的应用程序。自定义硬件的设备驱动程序在特定版本号之前已存在已知错误。我希望应用程序检查驱动程序版本并警告用户是否需要更新。该应用程序在 Windows XP 和 7 上运行,并用 C++ 编写。

我之前使用的方法是直接从 system32/drivers 读取 .sys 文件并直接搜索“FileVersion”。出于多种原因,这很糟糕。特别是它似乎需要 Windows 7 上的管理员权限。

我知道类 GUID 和硬件 ID(即“USB\VID_1234&PID_5678”)。

应用程序当前使用SetupDiGetClassDevs、SetupDiEnumDeviceInterfaces 和SetupDiGetDeviceInterfaceDetail 来获取“DevicePath”。然后,它使用该路径调用 CreateFile 来与驱动程序对话。

看起来我需要从某个地方获取 SP_DRVINFO_DATA 结构。我尝试了 setupapi.h 中的各种函数,例如 SetupDiGetDeviceInterfaceDetail。这是我尝试过但失败的一些代码:

int main(void)
{
    HDEVINFO DeviceInfoSet = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_USBSPI, NULL, NULL,
        DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);

    SP_INTERFACE_DEVICE_DATA InterfaceDeviceData;
    InterfaceDeviceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);

    // Cycle through all devices.
    for (int i = 0; i < 32; i++)
    {
        if (!SetupDiEnumDeviceInterfaces(DeviceInfoSet, 0, (LPGUID)&GUID_DEVINTERFACE_USBSPI, i, &InterfaceDeviceData))
            break;

        PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailData;
        DWORD RequiredSize;

        SetupDiGetDeviceInterfaceDetail(DeviceInfoSet, &InterfaceDeviceData, NULL, 0, &RequiredSize, …
Run Code Online (Sandbox Code Playgroud)

c++ windows driver

6
推荐指数
1
解决办法
8997
查看次数

标签 统计

c++ ×1

driver ×1

windows ×1