对所有的USB接口禁用启用都可以,但是我的目的是要对几个USB接口中的一个或几个禁用或启用
比如:
我电脑有四个USB接口,其中一个必须插入鼠标,所以不能禁用,其它三USB接口把它们禁用掉
请高手指点如何办得到还一个问题:优盘插进去时我想判断该优盘是否是我允许使用的优盘,如果不是,则禁用,如果是则可以正常使用
如果分不够另开贴加分
比如:
我电脑有四个USB接口,其中一个必须插入鼠标,所以不能禁用,其它三USB接口把它们禁用掉
请高手指点如何办得到还一个问题:优盘插进去时我想判断该优盘是否是我允许使用的优盘,如果不是,则禁用,如果是则可以正常使用
如果分不够另开贴加分
#include <setupapi.h>
#include <devguid.h>
#include <regstr.h>
#pragma comment(lib,"Setupapi.lib")void GetHardDevices()//查找所有硬件设备
{
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i;
// Create a HDEVINFO with all present devices.
hDevInfo = SetupDiGetClassDevs(NULL,0, 0,
DIGCF_PRESENT | DIGCF_ALLCLASSES );
if (hDevInfo == INVALID_HANDLE_VALUE)
{
// Insert error handling here.
return ;
}
// 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;
while (!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() ==
ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
buffer = (char*)LocalAlloc(LPTR,buffersize);
}
else
{
// Insert error handling here.
break;
}
} CString strTemp;
strTemp.Format("%s",buffer);
if (strTemp.Find("USB") == 0)
{
StateChange(DICS_DISABLE, i, hDevInfo);//禁用USB
//StateChange(DICS_ENABLE, i, hDevInfo); //启用USB
}
if (buffer) LocalFree(buffer);
}
if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
// Insert error handling here.
return ;
}
// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);
}BOOL StateChange(DWORD NewState, DWORD SelectedItem, HDEVINFO hDevInfo)//设置设备状态
{
SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
//
// Get a handle to the Selected Item.
//
if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
{
return FALSE;
}
//
// Set the PropChangeParams structure.
//
PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL;
PropChangeParams.StateChange = NewState;
if (!SetupDiSetClassInstallParams(hDevInfo,
&DeviceInfoData,
(SP_CLASSINSTALL_HEADER *)&PropChangeParams,
sizeof(PropChangeParams)))
{
return FALSE;
}
//
// Call the ClassInstaller and perform the change.
//
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
hDevInfo,
&DeviceInfoData))
{
return TRUE;
}
return TRUE;
}
对于第二个问题,你可以查查Setupapi相关函数
rageliu 你说的通过ID可以区别,该ID指的是哪个ID??