社区
Windows SDK/API
帖子详情
如何实现不禁用USB鼠标,禁用U盘?
zhgwbzhd
2009-10-20 02:49:11
我通过这两天的查询。
已经实现了,可以禁用所有的USB接口或者某个指定的接口。
但是,我如何实现不禁用USB鼠标,键盘??
谢谢啊!
...全文
939
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盘
?.docx
C#
禁用
U盘
,不影响其他设备
应用程序使windows操作系统有效的屏蔽
U盘
等移动存储设备。同时,不影响其他
usb
设备的使用
U盘
禁用
小精灵(
禁用
U盘
和移动硬盘)
C#.net开发的小工具,使用者电脑必须安装.net平台才可以使用。.net平台下载地址见:.NET Framework微软官方地址 http://download.microsoft.com/download/3/F/0/3F0A922C-F239-4B9B-9CB0-DF53621C57D9/dotnetfx3.exe 该软件可以让管理员方便的管理
USB
端口。一键即可
实现
启用与
禁用
U盘
。(不影响
USB
鼠标
,键盘及手写板的使用)。该软件适合公司
禁用
U盘
和移动硬盘,以防员工带走机密资料。 第一次使用,默认密码admin。 登录后直接点击对于按钮
禁用
或启用
U盘
即可。
禁用
后,插入的
U盘
将没有任何反应,
USB
接口的
鼠标
和键盘可以正常识别。 使用过程如有任何问题,请到www.piikee.net留言。
大势至
禁用
U盘
软件 完全屏蔽
U盘
禁用
USB
存储 而不影响
USB
鼠标
大势至
USB
端口监控软件是专业禁止
U盘
使用、屏蔽
USB
存储设备的软件,可以完全禁止
USB
存储设备的使用、
禁用
U盘
、移动硬盘和手机存储卡,同时还可以禁止蓝牙、
禁用
光驱、软驱、蓝牙,以及
禁用
随身wifi等,但不影响
USB
鼠标
键盘的使用。同时,还可以禁止修改注册表、限制组策略使用、禁止打开设备管理器等,可以全面保护电脑安全,防止员工反向修改重新启用
U盘
,是当前国内监控
USB
端口、屏蔽
U盘
最有效的电脑安全管理软件。此外,大势至
USB
监控软件操作极为简单,点点
鼠标
就可以完全使用,适合各层次网管员的需要。
禁用
启用
U盘
,不影响
USB
鼠标
键盘 (注册表)
禁用
启用
U盘
,不影响
USB
鼠标
键盘 (注册表)
Windows SDK/API
1,222
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章