社区
Windows SDK/API
帖子详情
如何实现不禁用USB鼠标,禁用U盘?
zhgwbzhd
2009-10-20 02:49:11
我通过这两天的查询。
已经实现了,可以禁用所有的USB接口或者某个指定的接口。
但是,我如何实现不禁用USB鼠标,键盘??
谢谢啊!
...全文
982
13
打赏
收藏
如何实现不禁用USB鼠标,禁用U盘?
我通过这两天的查询。 已经实现了,可以禁用所有的USB接口或者某个指定的接口。 但是,我如何实现不禁用USB鼠标,键盘?? 谢谢啊!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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盘
,但不
禁用
USB
鼠标
键盘
禁用
U盘
,但不
禁用
USB
鼠标
键盘的方法: “regedit”,打开注册表编辑器,依次展开如下分支[HKEY_LOCAL_MACHINE\SYSTEM\CurrentCntrolSet\Services\
USB
STOR],在右侧的窗格中找到名为“Start”的DWORD值,双击,在弹出的编辑对话框中将其数值数据修改为十六位进制数值“4”(默认是3)。点“确定”按钮并关闭注册表...
公司电脑
禁用
U盘
、
禁用
USB
端口使用、
禁用
优盘移动硬盘使用的方法
好的,公司为保障数据安全和防止病毒传播,
禁用
U盘
和
USB
存储设备是常见的IT管理策略。以下是几种从简单到彻底、从软件到硬件的常用方法,IT管理员可以根据公司需求选择组合使用。
Horizon client连接windows桌面显示:
USB
设备已
禁用
/
USB
重定向功能已
禁用
背景
USB
注册表没找到
禁用
的选项,但Horizon client登录时,提示
USB
重定向功能不可用;域控上查看组策略,并没有相关策略配置。 操作过程 1、
禁用
USB
存储而不
禁用
USB
鼠标
和键盘 通过
禁用
U盘
驱动、
USB
驱动的方式来禁止操作系统自动识别
U盘
、自动安装
U盘
启动的方式来限制
U盘
使用、阻止
USB
存储设备的接入,同时还不影响
USB
鼠标
键盘的使用。 我的电脑——>本地磁盘C: ——>windows文件夹——>inf文件夹:在此文件夹中找到
U盘
的2个驱动文件:
usb
stor . inf
关于
禁用
USB
存储设备,而
不禁
使用
USB
键盘,
鼠标
关于
禁用
USB
存储设备,而
不禁
使用
USB
键盘,
鼠标
一般的方法,是在设备管理器中禁止使用
USB
设备。但是这样全部的
USB
设备都无法使用了。包括现在日益流行的
USB
键盘,
鼠标
,摄像头等。 实际上微软在注册表中有一个关于
USB
存储的开关 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\
USB
STOR\Start 将...
C++
禁用
USB
移动存储设备而不
禁用
鼠标
,键盘等输入设备
现在很多公司为了防止泄密,都需要
禁用
USB
移动存储设备的接口,在网上看了很多方法,只能说大都是治标不治本,而且稳定性也很差,用户也可以去修改。先罗列一下网上的一些方法。 1.修改注册表项,
禁用
usb
移动存储设备 2.隐藏可分配给
usb
移动存储设备的盘符并禁止查看 3.禁止安装
usb
驱动程序 4.修改组策略文件隐藏
usb
移动设备盘符 目前网上大都是这4种方式,先来说说他们
Windows SDK/API
1,222
社区成员
8,135
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章