IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
阅读:52887回复:7

讨论 bushound实现

楼主#
更多 发布于:2008-09-17 15:45
bushound  ,我想大家都用过。它的最大特点是能过滤出usb主机和设备之间通信的数据包。
但这个过程是如何实现的,希望大家能给点意见,帮帮我。
参考教课书上的例子,我可以把win32的IRP请求包的数据过滤出来,显示在另外的win32程序中。
原理:两个win32驱动程序通过系统线程共享数据。
            首先在分发例程中对感兴趣的IRP数据保存在一个双向链表中,然后通过内核同步事件,通知
            创建的系统线程,系统线程将链表中的数据读取到它的缓冲区中,这样另外的win32程序
            发送IRP给它的驱动,就把缓冲区数据读出来了,显示给用户。

但是不知道如何得到USB低层数据,我想情况可能是这样的:在USB类驱动程序和PCI总线驱动程序间
加一层过滤驱动程序,和上面的原理一样,把感兴趣的数据写到链表中,通过系统线程(自己创建的)发给win32。

希望兄弟们发表下意见。
IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-09-20 11:52
养鸟的地儿!!!!!
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-09-22 07:07
BusHound用的是dispatch hooking,截获IRP,实现了bus filter driver的功能。关键点是注册成usb class的LowerFilter/UpperFilter
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-09-26 20:44
现在已完成一个Lower filter driver,注册成usb class。成功截取IRP。截取的IRP大多数为IRP_MJ_INTERNAL_DEVICE_CONTROL,但是我不知道怎么得到该IRP的数据,即Buffer。DDK上说三种方式:METHOD_BUFFERED ,METHOD_IN_DIRECT or METHOD_OUT_DIRECT 或者METHOD_NEITHER 。反解IOCODE,可知其方式为METHOD_NEITHER ,按照DDK上的说法,IN Buffer应该为Parameters.DeviceIoControl.Type3InputBuffer ,Out Buffer为Irp->UserBuffer. IN 长度为:Parameters.DeviceIoControl.InputBufferLength ,Out 长度为:Parameters.DeviceIoControl.OutputBufferLength 。过滤出来的这两格参数
InputBufferLength 总为0,OutputBufferLength为一个很大的数。所以我认为不对,所以我不知道Buffer在哪里,也不知道Buffer的长度。这块感到很迷惑
IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-09-26 21:30
InputBufferLength 0 ,OutputBufferLength:2249351312 ,IO: METHOD_NEITHER
 OutBuffer:00000000,InBuffer:00000000
我得到的结果
fans_yi
驱动牛犊
驱动牛犊
  • 注册日期2010-02-04
  • 最后登录2010-03-10
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望71点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-03-08 13:55
其实bushound还可以发送数据的
10624164
驱动牛犊
驱动牛犊
  • 注册日期2010-10-12
  • 最后登录2016-02-17
  • 粉丝1
  • 关注2
  • 积分21分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2011-07-07 11:08
回 3楼(IoManager) 的帖子
Lower filter driver 怎么实现的,我实现的是用WDM模式的,数据其实在OTHERS1中。但是这样显然不行,只能在设备驱动加载之后截获数据。其实在驱动加载前,就GET_DESCRIPTOR了。用DEVICETREE没发现有新的设备创建,只有一个设备
10624164
驱动牛犊
驱动牛犊
  • 注册日期2010-10-12
  • 最后登录2016-02-17
  • 粉丝1
  • 关注2
  • 积分21分
  • 威望181点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2011-07-07 11:11
IRP HOOK 吗?
IRP HOOK 属于未公开技术。有可能不稳定。微软建议这么做吗?
在USB 总线下面的设备是什么,是不是挂到它上面。
BUSHOUND 怎么做的?
游客

返回顶部