📄 resetdev.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 + -