社区
Windows SDK/API
帖子详情
如何实现不禁用USB鼠标,禁用U盘?
zhgwbzhd
2009-10-20 02:49:11
我通过这两天的查询。
已经实现了,可以禁用所有的USB接口或者某个指定的接口。
但是,我如何实现不禁用USB鼠标,键盘??
谢谢啊!
...全文
940
13
打赏
收藏
如何实现不禁用USB鼠标,禁用U盘?
我通过这两天的查询。 已经实现了,可以禁用所有的USB接口或者某个指定的接口。 但是,我如何实现不禁用USB鼠标,键盘?? 谢谢啊!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
花气袭人知昼暖
2010-12-30
打赏
举报
回复
我现在也在写这个程序,不知道楼主解决了问题没有?
zjj_zjj
2009-11-18
打赏
举报
回复
USB 键盘的CLASSID 是多少,我忘了,可以用此来进行区别的
USB\\CLASS_08
zhgwbzhd
2009-11-01
打赏
举报
回复
哦,谢谢啊。
我试试。
gangliche
2009-10-29
打赏
举报
回复
代碼:
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}]
if ( FunctionClassDeviceData.DevicePath[j] == '#' )
{
k++;
if ( k == 3 )
{
break;
}
Dir[p++] = '\\';
continue;
}
if ( k == 0 )
continue;
else if ( k <= 2 )
{//copy example [#vid_067b&pid_2507#6&14e622e5&0&2#]
Dir[p++] = FunctionClassDeviceData.DevicePath[j];
}
}
iXprintf("%s",Dir);
/* if ( (strstr(Dir,"2507") == NULL) && (strstr(Dir,"04B4") == NULL)
&& (strstr(Dir,"152D") == NULL))
continue;//not PL-2507, try next device
for ( q = 0; q < 4; q++ )
{//check repeat class id ( not the new one)
BNewValue = true;
if ( strcmp(Dir,USB[q].ClassID) == 0 )
{
BNewValue = false;
break;
}
}
if ( BNewValue )
{//new value, copy to array
strcpy(USB[Order].ClassID,Dir);
USB[Order].Len = strlen(USB[Order].ClassID);
break;
}*/
}
}
else
return false;
}//end for
if ( GetLastError()!=NO_ERROR &&
GetLastError()!=ERROR_NO_MORE_ITEMS )
{
// Insert error handling here.
return false ;
}
// Cleanup
SetupDiDestroyDeviceInfoList(hDevInfo);
return true;
gangliche
2009-10-29
打赏
举报
回复
可以枚舉所有USB VID/PID,選擇你要移除的drive.
EagleFew
2009-10-28
打赏
举报
回复
之前俺做过一个弹出U盘的小程序, 使用的ddk , 版本记不清楚了. 以前在2000下可以编译, 现在在xp下不能编译. 你枚举usb 设备的时候会有一个字符串名称"the mass storage"(大容量存储器) 判断这个就行了.
YeBinYe
2009-10-20
打赏
举报
回复
学习一下
hemiya
2009-10-20
打赏
举报
回复
标记,学习
gameloader
2009-10-20
打赏
举报
回复
mark
学习一下
Waiting4you
2009-10-20
打赏
举报
回复
我们公司的做法是删除U盘驱动,然后控制管理员权限(大部分人都没有这个权限,当然用其它手段得到的不算-_-)
zhgwbzhd
2009-10-20
打赏
举报
回复
我没有做到驱动那样。
我现在做的是样例。
先通过 SetupDiGetClassDevs 得到一个句柄。
在通过循环 SetupDiEnumDeviceInfo
通过CM_Get_DevNode_Status得到设备的状态。
如果该设备没问题。
就用
SetupDiGetDeviceRegistryProperty得到设备的参数。
用参数SPDRP_DEVICEDESC是就可以得到下面的信息
USB Root Hub
USB Root Hub
USB Root Hub
USB Root Hub
USB 人体学接口设备
禁止通过 StateChange实现。
如果把前4个都禁止了,鼠标也没了。
我怎能才能把U盘之类的和鼠标键盘之类的区别开来呢?
谢谢各位!
lghndyz
2009-10-20
打赏
举报
回复
这就得区分USB鼠标,键盘的dwIoControlCode控制码。驱动程序可以通过CTL_CODE宏来组合定义一个控制码,并在IRP_MJ_DEVICE_CONTROL的实现中进行控制码的操作。在驱动层,irpStack->Parameters.DeviceIoControl.IoControlCode表示了这个控制码。
屏蔽USB鼠标,键盘以外的dwIoControlCode控制码。
局域网计算机怎么
禁用
U盘
?.docx
#### 五、使用第三方软件
禁用
U盘
**1. 选择合适的第三方软件** - “大势至
USB
控制”软件因其高度定制性和易用性而受到欢迎。 - 下载安装该软件后,首次运行时需设置管理密码。 **2. 设置
禁用
USB
存储设备** - 在...
C#
禁用
U盘
,不影响其他设备
在Windows操作系统中,有时出于安全考虑或特定需求,我们需要
禁用
U盘
等移动存储设备的使用,但同时又不希望影响到其他的
USB
设备,比如
鼠标
、键盘或打印机等。C#编程语言提供了一种方法来
实现
这样的功能。本文将详细...
U盘
禁用
小精灵(
禁用
U盘
和移动硬盘)
(不影响
USB
鼠标
,键盘及手写板的使用)。该软件适合公司
禁用
U盘
和移动硬盘,以防员工带走机密资料。 第一次使用,默认密码admin。 登录后直接点击对于按钮
禁用
或启用
U盘
即可。
禁用
后,插入的
U盘
将没有任何反应...
大势至
禁用
U盘
软件 完全屏蔽
U盘
禁用
USB
存储 而不影响
USB
鼠标
可以完全禁止
USB
存储设备的使用、
禁用
U盘
、移动硬盘和手机存储卡,同时还可以禁止蓝牙、
禁用
光驱、软驱、蓝牙,以及
禁用
随身wifi等,但不影响
USB
鼠标
键盘的使用。同时,还可以禁止修改注册表、限制组策略使用、禁止...
禁用
启用
U盘
,不影响
USB
鼠标
键盘 (注册表)
在Windows操作系统中,有时出于安全考虑或管理需求,我们需要
禁用
U盘
的使用,但同时又要确保
USB
鼠标
和键盘能够正常工作。通过修改注册表,我们可以
实现
这一目标。注册表是Windows系统中的一个重要数据库,存储着系统...
Windows SDK/API
1,222
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章