检查我的USB设备是否已安装驱动程序

4

我使用SetupDiGetClassDevs()SetupDiEnumDeviceInfo()SetupDiGetDeviceRegistryProperty()来枚举我的USB设备并检查设备是否可用。

如何检查我的设备是否安装了正确的驱动程序?
是否有可用的API来检查这个问题?


相关问题:https://dev59.com/FIXca4cB1Zd3GeqPJYaH - tobi_s
1个回答

4

您可以获取设备的驱动程序信息,然后检查它,看看您的驱动程序是否安装并且是最新版本。

这里是一些可能会帮助您的 C++ 代码:

bool fetchDriverDescription( const std::wstring& driverRegistryLocation, tDriverDescription& desc )
{
    bool    rval = false;

    std::wstring regFolder = L"SYSTEM\\CurrentControlSet\\Control\\Class\\";
    regFolder += driverRegistryLocation;
    win32::registry::reg_key hKey = 
        win32::registry::reg_key::open( HKEY_LOCAL_MACHINE, regFolder, KEY_READ );
    if( hKey )
    {
        if( win32::registry::read( hKey, L"ProviderName", desc.DriverProviderName, false ) != ERROR_SUCCESS )
            return false;

        desc.InstalledDriverRegFolder = regFolder;

        std::wstring val;
        if( win32::registry::read( hKey, L"DriverVersion", val, false ) == ERROR_SUCCESS )
            desc.Version = val;
        rval = true;
    }
    return rval;
}

std::wstring driverRegLocation;
if( fetchStringFromDiGetDevice( hDevInfo, DeviceInfo, SPDRP_DRIVER, driverRegLocation ) )
{
    bSuccessful = fetchDriverDescription( driverRegLocation, dev.DriverDesc );
}

你选择ControlSet001而不是CurrentControlSet有什么原因吗? - peterchen
1
最好使用[SetupDiGetDeviceRegistryProperty](http://msdn.microsoft.com/en-us/library/windows/hardware/ff551967(v=vs.85).aspx),这是你已经在使用的函数。你应该从这个答案中借鉴的唯一内容是要读取的属性名称:“ProviderName”和“DriverVersion”。 - Ben Voigt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接