win c++ 枚举设备驱动状态
2017-05-27 15:20
274 查看
#include <cfgmgr32.h> #include <SetupAPI.h> #pragma comment(lib,"Setupapi.lib")
bool IsDeviceDisabled(DWORD dwDevID, HDEVINFO hDevInfo, DWORD &dwStatus) { SP_DEVINFO_DATA DevInfoData = {sizeof(SP_DEVINFO_DATA)}; DWORD dwDevStatus,dwProblem; if(!SetupDiEnumDeviceInfo(hDevInfo,dwDevID,&DevInfoData)) { return FALSE; } //查询设备状态 if(CM_Get_DevNode_Status(&dwDevStatus,&dwProblem,DevInfoData.DevInst,0)!=CR_SUCCESS) { return FALSE; } dwStatus = dwProblem; // return ( (dwProblem == CM_PROB_FAILED_INSTALL)); return true; } int IsInstallDriver() { HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i; bool bRet = false; bool bOk = false; //step1. Create a HDEVINFO with all present devices. hDevInfo = SetupDiGetClassDevs(NULL, 0, // Enumerator 0, DIGCF_PRESENT | DIGCF_ALLCLASSES ); if (hDevInfo == INVALID_HANDLE_VALUE) { // Insert error handling here. return bRet; } DWORD dwStatuts = -1; //step2. Enumerate through all devices in Set. DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i=0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++) { DWORD DataT; LPTSTR buffer = NULL; DWORD buffersize = 0; // Call function with null to begin with, // then use the returned buffer size // to Alloc the buffer. Keep calling until // success or an unknown failure. // while (!SetupDiGetDeviceRegistryProperty( hDevInfo, &DeviceInfoData, SPDRP_HARDWAREID, &DataT, (PBYTE)buffer, buffersize, &buffersize)) { if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { // Change the buffer size. if (buffer) LocalFree(buffer); buffer = (LPTSTR)LocalAlloc(LPTR,buffersize); } else { // Insert error handling here. break; } } printf("%S\n", buffer); //step3. find devices status if (buffer && (!wcscmp(buffer,L"USB\\Vid_0955&Pid_7103") || !wcscmp(buffer,L"USB\\Vid_0955&Pid_7102")) ) { if (IsDeviceDisabled(i, hDevInfo, dwStatuts) && dwStatuts == 0) { } //printf( "SPDRP_DEVICEDESC:[%S] %d\n ",buffer, dwStatuts); if (buffer) LocalFree(buffer); break; } if (buffer) LocalFree(buffer); } // step4. Cleanup SetupDiDestroyDeviceInfoList(hDevInfo); return dwStatuts; }
相关文章推荐
- IoEnumerateDeviceObjectList 枚举驱动的所有设备 文件过滤驱动 windows内核开发
- USB设备驱动之设备初始化(设备枚举)
- USB设备驱动之设备初始化(设备枚举)
- Linux下面写i2c设备的驱动-如何枚举产生i2c_client
- Pci设备驱动:设备枚举
- Pci设备驱动0:设备枚举
- 【驱动开发】Windows系统下枚举设备的几个函数
- Linux下面写i2c设备的驱动-如何枚举产生i2c_client
- Linux设备驱动之pci设备的枚举
- Linux设备驱动之pci设备的枚举
- mini2440 usb device controller 驱动的分析--gadget设备(二)---枚举
- USB设备驱动之设备初始化(设备枚举)
- USB设备的驱动状态
- 和菜鸟一起学linux总线驱动之初识USB设备枚举
- 和菜鸟一起学linux总线驱动之初识USB设备枚举
- Linux设备驱动之pci设备的枚举
- IoEnumerateDeviceObjectList 枚举驱动的所有设备 文件过滤驱动 windows内核开发
- Pci设备驱动0:设备枚举
- 总线、设备、驱动、类
- Linux 块设备驱动 (一)