📄 usbcontrol.cpp
字号:
// UsbControl.cpp: implementation of the CUsbControl class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "USBTest.h"
#include "UsbControl.h"
#include <setupapi.h>
#include <atlbase.h>
#include "GetStatus.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#pragma comment(lib,"setupapi.lib")
#pragma comment(lib,"shlwapi.lib")
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CUsbControl::CUsbControl()
{
}
CUsbControl::~CUsbControl()
{
}
bool CUsbControl::RemoveUsb()
{
RemoveActiveUsb(true);
CtrlUSB(1);
return true;
}
UINT CUsbControl::CtrlUSB(int status)
{
DWORD StartValue =status +3;
if(status==1)
StartValue=4;
else
StartValue=3;
CRegKey KeyCtrlUSB ;
if(KeyCtrlUSB.Open(HKEY_LOCAL_MACHINE,"SYSTEM\\CurrentControlSet\\Services\\USBSTOR")==ERROR_SUCCESS)
{
if(KeyCtrlUSB.SetValue(StartValue,"Start") != ERROR_SUCCESS)
{
TRACE("[kcde]注册表键值设置失败");
}
}
KeyCtrlUSB.Close();
return TRUE;
}
CUsbControl::StartUsb()
{
CtrlUSB(0);
RemoveActiveUsb(false);
}
CUsbControl::RemoveActiveUsb(bool isRemove)
{
HDEVINFO hDevInfo ;
SP_DEVINFO_DATA spDevInfoData ;
// TCHAR * GUIDString = NULL;
GUID guid ={0x36FC9E60L,0xC465,0x11CF,{0x80,0x56,0x44,0x45,0x53,0x54,0x00,0x00}};
hDevInfo = SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
if(hDevInfo==INVALID_HANDLE_VALUE)
{
TRACE("[kcde]访问系统硬件出错!");
return false;
}
DWORD i,err ;
//枚举硬件,获得需要的接口
spDevInfoData.cbSize=sizeof(SP_DEVINFO_DATA);
LPTSTR buffer=NULL ;
DWORD buffersize=100 ;
buffer=(char*)LocalAlloc(LPTR,buffersize);
for(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&spDevInfoData);i++)
{
SP_PROPCHANGE_PARAMS spPropChangeParams ;
spPropChangeParams.ClassInstallHeader.cbSize=sizeof(SP_CLASSINSTALL_HEADER);
spPropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
spPropChangeParams.Scope = DICS_FLAG_GLOBAL;
if(isRemove)
spPropChangeParams.StateChange = DICS_DISABLE;
else
spPropChangeParams.StateChange = DICS_ENABLE;
DWORD DataT ;
while(!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_DEVICEDESC,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if(GetLastError()==ERROR_INVALID_DATA)
{
break ;
}
else if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
if(buffer)
LocalFree(buffer);
buffer=(char*)LocalAlloc(LPTR,buffersize);
}
else
{
break;
}
}
if (strstr(buffer,"torage"))
{
if(!SetupDiSetClassInstallParams(hDevInfo,&spDevInfoData,(SP_CLASSINSTALL_HEADER*)&spPropChangeParams,sizeof(spPropChangeParams)))
{
DWORD errorcode=GetLastError();
}
if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&spDevInfoData))
{
DWORD errorcode=GetLastError();
}
}
}
if(buffer)
LocalFree(buffer);
//退出时,清理工作环境
err=GetLastError();
SetupDiDestroyDeviceInfoList(hDevInfo);
SetLastError(err);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -