怎么实现不禁用USB鼠标,禁用U盘

如何实现不禁用USB鼠标,禁用U盘? - C++ Builder / Windows SDK/API
我通过这两天的查询。
已经实现了,可以禁用所有的USB接口或者某个指定的接口。

但是,我如何实现不禁用USB鼠标,键盘??

谢谢啊!

------解决方案--------------------
这就得区分USB鼠标,键盘的dwIoControlCode控制码。驱动程序可以通过CTL_CODE宏来组合定义一个控制码,并在IRP_MJ_DEVICE_CONTROL的实现中进行控制码的操作。在驱动层,irpStack->Parameters.DeviceIoControl.IoControlCode表示了这个控制码。
屏蔽USB鼠标,键盘以外的dwIoControlCode控制码。
------解决方案--------------------
我们公司的做法是删除U盘驱动,然后控制管理员权限(大部分人都没有这个权限,当然用其它手段得到的不算-_-)
------解决方案--------------------
mark
学习一下
------解决方案--------------------
标记,学习
------解决方案--------------------
学习一下
------解决方案--------------------
之前俺做过一个弹出U盘的小程序, 使用的ddk , 版本记不清楚了. 以前在2000下可以编译, 现在在xp下不能编译. 你枚举usb 设备的时候会有一个字符串名称"the mass storage"(大容量存储器) 判断这个就行了.
------解决方案--------------------
可以枚舉所有USB VID/PID,選擇你要移除的drive.
------解决方案--------------------
代碼: 
HDEVINFO hDevInfo;
bool Success, BNewValue;
struct {DWORD cbSize; char DevicePath[256];} FunctionClassDeviceData;
SP_INTERFACE_DEVICE_DATA DeviceInterfaceData;
SP_DEVINFO_DATA DeviceInfoData;
// DWORD i;
DWORD i,j,k,p,q,BytesReturned;
char Msg[300]={0};
//--------------------------------------
hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_CLASS_USB_DEVICE,
0, // Enumerator
0,
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE );
if (hDevInfo == INVALID_HANDLE_VALUE) {
printf("ERROR - SetupDiGetClassDevs()");
return false ;
}
//--------------------------------------
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i=0;SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData);i++)
{
Application->ProcessMessages();
if ( bStop->Tag == 1 )
return false;//exit timer1
sprintf(Msg,"Device [%d]",i);
iXprintf ("%s",Msg);
//should do this before SetupDiEnumDeviceInterfaces(hDevInfo, NULL, (LPGUID)&GUID_CLASS_USB_DEVICEA, i, &DeviceInterfaceData);
DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData);
Success = SetupDiEnumDeviceInterfaces(hDevInfo, NULL, (LPGUID)&GUID_CLASS_USB_DEVICE, i, &DeviceInterfaceData);
if (Success)
{
// There is a device here, get it's name
FunctionClassDeviceData.cbSize = 5;
Success = SetupDiGetDeviceInterfaceDetail(hDevInfo, &DeviceInterfaceData,
(PSP_INTERFACE_DEVICE_DETAIL_DATA)&FunctionClassDeviceData, 256, &BytesReturned, NULL);
if (!Success)
{
sprintf(Msg,"%s",SysErrorMessage(GetLastError()));
iXprintf("Get USB informtion Fail [%s]",Msg);
return false;
}
else
{
sprintf(Msg,"%s",FunctionClassDeviceData.DevicePath);
iXprintf("%s",Msg);
char Dir[80];
ZeroMemory(Dir,sizeof(Dir));
k = 0;
p = 0;
for ( j = 0; j < strlen(FunctionClassDeviceData.DevicePath); j++ )
{//FunctionClassDeviceData.DevicePath sample [\\?\usb#vid_067b&pid_2507#6&14e622e5&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}]