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

📄 usbcontrol.cpp

📁 控制U盘的程序
💻 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 + -