jackboy
驱动牛犊
驱动牛犊
  • 注册日期2003-10-13
  • 最后登录2010-11-10
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望130点
  • 贡献值0点
  • 好评度18点
  • 原创分0分
  • 专家分0分
阅读:1413回复:1

如何编程获取设备驱动已经安装?

楼主#
更多 发布于:2004-07-22 15:31
 :)
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-22 16:10
/*************************************************************************************
*
* Name: FindWdmDevice
* Desc: Find the device info
* Para: HardwareId: the device's hardware id
* pDeviceINfoData: Save the device info
* Retn: if find the device info, return DeviceInfoSet that contain the device info,
* Otherwise return INVALID_HANDLE_VALUE
*
***************************************************************************************/
HDEVINFO
FindWdmDevice(
IN LPCTSTR HardwareId,
IN PSP_DEVINFO_DATA pDeviceInfoData
)
{
    HDEVINFO DeviceInfoSet;
    DWORD i;
    DWORD DataT;
    LPTSTR p;
CCHAR Buffer[ 1024 ];
    DWORD BufferSize = 0;

if( HardwareId == NULL  || pDeviceInfoData == NULL )
return INVALID_HANDLE_VALUE;

    //
    // Create a Device Information Set with all present devices.
    //
    DeviceInfoSet = SetupDiGetClassDevs(NULL, // All Classes
        0,
        0,
        DIGCF_ALLCLASSES  );
    if( DeviceInfoSet == INVALID_HANDLE_VALUE )
    {
        TRACE( "GetClassDevs(All Present Devices) failed\n" );
        return INVALID_HANDLE_VALUE;
    }
    
    TRACE( "Search for Device ID: [%s]\n", HardwareId );
    
    pDeviceInfoData->cbSize = sizeof(SP_DEVINFO_DATA);
    for ( i=0; SetupDiEnumDeviceInfo( DeviceInfoSet, i, pDeviceInfoData ); i++ )
    {

        // 获取DEVICE_ID
BufferSize = sizeof( Buffer );
        if( !SetupDiGetDeviceRegistryProperty(
DeviceInfoSet,
pDeviceInfoData,
SPDRP_HARDWAREID,
&DataT,
(PBYTE)Buffer,
BufferSize,
&BufferSize) )
        {
// 未知错误
// TRACE1( "GetDeviceRegistryProperty failed: 0x%x", GetLastError() );
            continue;
        }

// 按字符串比较(一个设备可能有多个ID )
        for( p = Buffer; *p && ( p < &Buffer[BufferSize] ); p += lstrlen( p ) + sizeof( TCHAR ) )
        {
// TRACE1( "Device: %s", p );
            if (!_tcsicmp( HardwareId, p ) )
            {
// 找到了指定的设备
                return DeviceInfoSet;
            }
        }
        
    }// for
    
// 没找到
SetupDiDestroyDeviceInfoList(DeviceInfoSet);
    return INVALID_HANDLE_VALUE;
}

适用于Win98SE、WinMe、Win2k、WinXp&2003
游客

返回顶部