linan1003
驱动牛犊
驱动牛犊
  • 注册日期2005-05-05
  • 最后登录2010-02-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2106回复:11

USB过滤驱动打开问题?

楼主#
更多 发布于:2005-05-25 18:55
我是修改的UsbSniffer代码,我把过滤驱动已经附加在了一个USB的驱动上了,并且能够截获所有发送给这个驱动的IRP,安装,卸载完全正常,可是我使用应用程序和此过滤驱动通讯时候出现问题
大概是这样的
驱动
GUID  InterfaceClassGuid=RegSampleDevice_CLASS_GUID;

IoRegisterDeviceInterface (pdo,&InterfaceClassGuid,NULL,&nameString);

IoSetDeviceInterfaceState (&nameString,TRUE);
此时nameString返回\\\\\\\\.\\\\USB#Vid_07d0&Pid_4100#5&16304b08&0&1#{c6afb5ed-ca11-4b0f-84b5-b48a442d9263}

应用程序
直接使用这个名字CreateFile成功,然后使用DeviceIoControl也返回成功,但是驱动没有收到MJ_CREATE和MJ_DRIVER_CONTROL

我已经郁闷很久了,哪位能帮我提示一下,
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-05-25 22:06
我是修改的UsbSniffer代码,我把过滤驱动已经附加在了一个USB的驱动上了,并且能够截获所有发送给这个驱动的IRP,安装,卸载完全正常,可是我使用应用程序和此过滤驱动通讯时候出现问题
大概是这样的
驱动
GUID  InterfaceClassGuid=RegSampleDevice_CLASS_GUID;

IoRegisterDeviceInterface (pdo,&InterfaceClassGuid,NULL,&nameString);

IoSetDeviceInterfaceState (&nameString,TRUE);
此时nameString返回\\\\\\\\.\\\\USB#Vid_07d0&Pid_4100#5&16304b08&0&1#{c6afb5ed-ca11-4b0f-84b5-b48a442d9263}

应用程序
直接使用这个名字CreateFile成功,然后使用DeviceIoControl也返回成功,但是驱动没有收到MJ_CREATE和MJ_DRIVER_CONTROL

我已经郁闷很久了,哪位能帮我提示一下,

既然你的MJ_CREATE都没有收到,当然就不可能有后面的MJ_DRIVER_CONTROL等了
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-26 10:07
你可以在设置完再查询一下设备接口属性,确认一下是这个GUID
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
linan1003
驱动牛犊
驱动牛犊
  • 注册日期2005-05-05
  • 最后登录2010-02-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-26 12:54
谢谢大哥们得参与,
现在我知道为什么我收不到MJ_CREATE了,因为我的过滤驱动是lower的,上层的没有把MJ_CREATE向下传,

于是我这样。
建立过滤驱动设备无名的,然后再建立一个命名的设备对象用来用来通讯代码如下

#define USBFILTER_NT_NAME L\"\\\\Device\\\\usbsnoop\"
#define USBFILTER_DOS_NAME L\"\\\\DosDevices\\\\usbsnoop\"

RtlInitUnicodeString( &nameString, USBFILTER_NT_NAME );
RtlInitUnicodeString( &LinkName, USBFILTER_DOS_NAME );
status = IoCreateDevice(DriverObject, 0, &nameString,
FILE_DEVICE_UNKNOWN, 0, FALSE, &g_ControlDeviceObject);
status =IoCreateSymbolicLink(&LinkName,&nameString);

这些都成功。
我用WINOBJ查看了在\\?\\里已经有了一个LINK,但是
我 HANDLE hDev = CreateFile(_T(\"\\\\\\\\.\\\\usbsnoop\") GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
失败,错误是2,没有该设备


请问谁能给点提示,是不是我的MJ_CREATE没有些对,还是
richer-w
驱动牛犊
驱动牛犊
  • 注册日期2003-04-19
  • 最后登录2006-01-20
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-05-26 14:07
鉴定:方法是完全可行的(实际使用过)。


[编辑 -  5/27/05 by  richer-w]
……沉默……偶就是不说偶喜欢你,憋死你丫的…… “我万能的主啊,请赐我一个活泼可爱,善良温柔的姑娘给我做老婆吧,我已经完全不满足你很多年以前给我的健康的身体和丰盛的晚餐了!”
linan1003
驱动牛犊
驱动牛犊
  • 注册日期2005-05-05
  • 最后登录2010-02-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-26 18:40
在IoCreateDevice里面还是指定一个设备扩展试试呢?
能不能具体点,

指定一个设备扩展用来何意义呢,能不能把你的代码给我关键一段给我看看,不甚感谢
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-05-26 20:26
在IoCreateDevice里面还是指定一个设备扩展试试呢?
能不能具体点,

指定一个设备扩展用来何意义呢,能不能把你的代码给我关键一段给我看看,不甚感谢

应该跟设备扩展没有关系。
你要在MJ_CREATE,Close,DeviceIoControl函数里判断一下,是你的ControlDevice,就直接处理了,不是ControlDevice,再IoCallDriver往下传
就应该ok了
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-27 09:03
谢谢大哥们得参与,
现在我知道为什么我收不到MJ_CREATE了,因为我的过滤驱动是lower的,上层的没有把MJ_CREATE向下传,

于是我这样。
建立过滤驱动设备无名的,然后再建立一个命名的设备对象用来用来通讯代码如下

#define USBFILTER_NT_NAME L\"\\\\Device\\\\usbsnoop\"
#define USBFILTER_DOS_NAME L\"\\\\DosDevices\\\\usbsnoop\"

RtlInitUnicodeString( &nameString, USBFILTER_NT_NAME );
RtlInitUnicodeString( &LinkName, USBFILTER_DOS_NAME );
status = IoCreateDevice(DriverObject, 0, &nameString,
FILE_DEVICE_UNKNOWN, 0, FALSE, &g_ControlDeviceObject);
status =IoCreateSymbolicLink(&LinkName,&nameString);

这些都成功。
我用WINOBJ查看了在\\?\\里已经有了一个LINK,但是
我 HANDLE hDev = CreateFile(_T(\"\\\\\\\\.\\\\usbsnoop\") GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
失败,错误是2,没有该设备


请问谁能给点提示,是不是我的MJ_CREATE没有些对,还是

这个问题最好的办法是在你的IRP_MJ_CREATE处理例程入口下断点,调试一下
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
linan1003
驱动牛犊
驱动牛犊
  • 注册日期2005-05-05
  • 最后登录2010-02-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-05-29 10:07
我的过滤驱动是下层过滤驱动,
A,B,C,D四层驱动层,A是USB设备的驱动,例如你装了USB红外适配器,然后你出现了A,
C是USB的类驱动吧,D是PDO,由于USB都是很多IRP内部产生的,是由A产生直接给C的,因此装A的上层过滤就截获不到这些内部IRP,
应此我装了B,装在A,C之间,
但是我需要和B通讯,我的MJ_CREATE这些,都在A这里就不往下传了,我在B里根本就收不到这些IRP,我试着把B放在A之上,这些MJ_CREATE才能收到,但是又不能截获所有USB的IRP,因此郁闷啊

我就算用命名设备对象,也不知道怎么去和他通讯
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2005-05-29 11:21
我的过滤驱动是下层过滤驱动,
A,B,C,D四层驱动层,A是USB设备的驱动,例如你装了USB红外适配器,然后你出现了A,
C是USB的类驱动吧,D是PDO,由于USB都是很多IRP内部产生的,是由A产生直接给C的,因此装A的上层过滤就截获不到这些内部IRP,
应此我装了B,装在A,C之间,
但是我需要和B通讯,我的MJ_CREATE这些,都在A这里就不往下传了,我在B里根本就收不到这些IRP,我试着把B放在A之上,这些MJ_CREATE才能收到,但是又不能截获所有USB的IRP,因此郁闷啊

我就算用命名设备对象,也不知道怎么去和他通讯

1。你自己建立一个ControlDevice,再调用IoCreateSymbolic建立一个连接名字,上层应用程序打开
2。驱动里判断是自己ControlDevice(Create,Close,DeivceIoControl),是就直接处理了
3。不是才IoCallDriver往下传
4。用ice在MJ_CREATE设置断点调试一下,看看是不是看到了DeviceObject 等于ControlDevice的情况
这是一种非常基本的方法,不会有任何问题,你好好跟踪调试一下
linan1003
驱动牛犊
驱动牛犊
  • 注册日期2005-05-05
  • 最后登录2010-02-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-05-31 11:00
感谢zhaock,问题解决
也感谢所有参与的人,我爱你们
mudan2288
驱动牛犊
驱动牛犊
  • 注册日期2004-09-24
  • 最后登录2005-07-26
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-07-26 18:17
论坛上有很多类似的贴子,没有一个完整的,能否麻烦老兄将最后解决的标准代码贴出来??/
游客

返回顶部