⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resetdev.cpp

📁 禁用/启用设备
💻 CPP
字号:
// resetdev.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#include <setupapi.h> // for SetupDiXxx functions.
#include "objbase.h"
#include "initguid.h"
#include "devguid.h"

DEFINE_GUID( GUID_DEVCLASS_STILLIMAGE1,     0x6bdd1fc6L, 0x810f, 0x11d0, 0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f );

static GUID guid_StillImage = GUID_DEVCLASS_STILLIMAGE1;

BOOL GetRegistryProperty(HDEVINFO WY_hDevInfo, PSP_DEVINFO_DATA WY_DevInfoData, ULONG WY_ulProperty, PVOID WY_pBuffer, PULONG WY_pulBufLen)
{
	while (!SetupDiGetDeviceRegistryProperty(WY_hDevInfo,
        WY_DevInfoData,
        WY_ulProperty,  //????
        NULL,
        (UCHAR *)WY_pBuffer,
        *WY_pulBufLen,
        WY_pulBufLen
        ))
    {
		return FALSE;
    }

    return (*(LPTSTR *)WY_pBuffer)[0];

}

BOOL StateChange(DWORD WY_dwNewState, DWORD WY_dwDevID, HDEVINFO WY_hDevInfo)
{
 SP_PROPCHANGE_PARAMS  WY_PropChangeParams;
 SP_DEVINFO_DATA   WY_DevInfoData = {sizeof(SP_DEVINFO_DATA)};
 SP_DEVINSTALL_PARAMS  WY_devParams;

 //??????
 if(!SetupDiEnumDeviceInfo(WY_hDevInfo,WY_dwDevID,&WY_DevInfoData))
 {
  OutputDebugString("SetupDiEnumDeviceInfo FAILED");
  return FALSE;
 }

 //??????????
 WY_PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
 WY_PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
 WY_PropChangeParams.Scope = DICS_FLAG_GLOBAL;  //??????????????????
 WY_PropChangeParams.StateChange = WY_dwNewState;
 WY_PropChangeParams.HwProfile = 0;
 //??????
 if(!SetupDiSetClassInstallParams(WY_hDevInfo,&WY_DevInfoData,(SP_CLASSINSTALL_HEADER *)&WY_PropChangeParams,sizeof(WY_PropChangeParams)))
 {
  OutputDebugString("SetupDiSetClassInstallParams FAILED");
  return FALSE;
 }
 
 WY_PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
 WY_PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
 WY_PropChangeParams.Scope = DICS_FLAG_CONFIGSPECIFIC;//????????????????
 WY_PropChangeParams.StateChange = WY_dwNewState;
 WY_PropChangeParams.HwProfile = 0;
 //?????????????
 if(!SetupDiSetClassInstallParams(WY_hDevInfo,&WY_DevInfoData,(SP_CLASSINSTALL_HEADER *)&WY_PropChangeParams,sizeof(WY_PropChangeParams))
  || !SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,WY_hDevInfo,&WY_DevInfoData))
 {
  OutputDebugString("SetupDiSetClassInstallParams or SetupDiCallClassInstaller FAILED");
  return TRUE;
 }
 else
 { //??????????
  WY_devParams.cbSize = sizeof(WY_devParams);
  if(!SetupDiGetDeviceInstallParams(WY_hDevInfo,&WY_DevInfoData,&WY_devParams))
  {
   OutputDebugString("SetupDiGetDeviceInstallParams FAILED");
   return FALSE;
  }
  if(!WY_devParams.Flags & (DI_NEEDRESTART|DI_NEEDREBOOT))
  {
   OutputDebugString("Need Restart Computer");
   return TRUE;
  }
  return TRUE;
 }
}

BOOL ResetDevice()
{
	HDEVINFO   WY_hDevInfo;
	DWORD     WY_dwDevID;
	SP_DEVINFO_DATA  WY_DevInfoData = {sizeof(SP_DEVINFO_DATA)};

	WY_hDevInfo=SetupDiGetClassDevs(&guid_StillImage,NULL,NULL,DIGCF_PRESENT|DIGCF_ALLCLASSES);

	if(!WY_hDevInfo)
		MessageBox(0,"0","0",MB_OK);

//	MessageBox(0,"1","1",MB_OK);

	for(WY_dwDevID = 0;SetupDiEnumDeviceInfo(WY_hDevInfo,WY_dwDevID,&WY_DevInfoData);WY_dwDevID++)
	{
		DWORD DataT;
        LPTSTR buffer = NULL;
        DWORD buffersize = 0;

//		MessageBox(0,"2","2",MB_OK);

		while (!SetupDiGetDeviceRegistryProperty(
            WY_hDevInfo,
            &WY_DevInfoData,
            SPDRP_HARDWAREID,//SPDRP_FRIENDLYNAME,/*SPDRP_DEVICEDESC,*/
            &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;
            }
        }

		char DeviceID[MAX_PATH]="USB\\VID_1871&PID_0306";

		CString s;

		if(buffersize>=strlen(DeviceID))
		{
			s= buffer;
			
            buffer[strlen(DeviceID)] = 0;
		//	if(stricmp(buffer,"AVEO USB 2.0 PC Camera")==0)
			if(stricmp(buffer,DeviceID)==0) 
			{
				if(-1 !=s.Find("MI_00",0))
				{
				//	AfxMessageBox("aa");

					StateChange(DICS_DISABLE, WY_dwDevID,WY_hDevInfo);
					Sleep(2000);
					StateChange(DICS_ENABLE, WY_dwDevID,WY_hDevInfo);

					Sleep(2000);

						if (buffer) LocalFree(buffer);
					break;

				}
			

			
			}
			
			if (buffer) LocalFree(buffer);
		}

	 }

	SetupDiDestroyDeviceInfoList(WY_hDevInfo);

	return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -