阅读:1457回复:1
如何编程获取设备驱动已经安装?
:)
|
|
沙发#
发布于: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 |
|