gaofengwen
驱动牛犊
驱动牛犊
  • 注册日期2011-03-15
  • 最后登录2011-04-27
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2628回复:4

求教USB过滤驱动如何限制某类设备的使用(如U盘)

楼主#
更多 发布于:2011-03-15 16:09
我写了个过滤驱动,想限制U盘的使用,但是在限制完后,所有USB设备均不能使用,我是想在IRP_MN_START_DEVICE过程中就来判断设备类型,如果是U盘,就返回加载失败.
哪会大侠指点一下如何在IRP_MN_START_DEVICE判断U盘设备,本人为初学者,请附上代码,谢谢.
gaofengwen
驱动牛犊
驱动牛犊
  • 注册日期2011-03-15
  • 最后登录2011-04-27
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望21点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2011-04-02 15:47
难道没有清楚或搞过的大牛吗
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
板凳#
发布于:2011-04-02 16:53
判断设备的类,比如usbstor之类,u盘之类是usbstor,键盘是hid
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
地板#
发布于:2011-04-02 16:53
代码就免了,多简单的,而且是商业代码,也不方便帖。但是只要你细心,就会明白。
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
catface
驱动小牛
驱动小牛
  • 注册日期2009-01-11
  • 最后登录2014-03-09
  • 粉丝1
  • 关注1
  • 积分155分
  • 威望1341点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分2分
地下室#
发布于:2011-04-08 09:19
在卷加载的实际判断 是否为USB STORAGE类型来区分是否为U盘
发送IRP查询总线类型 区分本地和U盘类型(是区分本地和U盘)
论坛有贴代码的 不过要自己改 你搜索下
就是ZNSOFT发的查询BUSTYPE
论坛也有很多禁止USB 存储设备的代码

区分USB和U盘的话
获得设备的DRIVER类型是否为USB STORAGE也可以区分U盘和其他USB
网络转载如下:(注意字符长度 这个代码似乎没注意宽字符长度)
我完全是用DDK的例子修改的,就是src\general\toaster\filter做的修改,在

IRP_MJ_INTERNAL_DEVICE_CONTROL的分发例程中,比较驱动的名称是否为usbstor,如果是的话即为

存储设备,将IRP返回即可

   if (_wcsnicmp(DeviceObject->AttachedDevice->DriverObject->DriverName.Buffer,L"\Driver\USBSTOR",15)==0)
  ...{
          DbgPrint("Find USB StorIRP_MJ_DEVICE_INTERL_CONTROL::Cmp Result is %d ",
        _wcsnicmp(DeviceObject->AttachedDevice->DriverObject->DriverName.Buffer,L"\Driver\USBSTOR",15));
        Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
        Irp->IoStatus.Information = 0;
        IoCompleteRequest( Irp, IO_NO_INCREMENT );
        return STATUS_ACCESS_DENIED;
    }
     else
      ...{
                 Irp->IoStatus.Status = STATUS_SUCCESS;
           return FilterPass(DeviceObject, Irp);  
      }
 

游客

返回顶部