IoManager
驱动牛犊
驱动牛犊
  • 注册日期2007-05-04
  • 最后登录2008-12-29
  • 粉丝1
  • 关注1
  • 积分185分
  • 威望35点
  • 贡献值0点
  • 好评度30点
  • 原创分0分
  • 专家分0分
阅读:53430回复: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
养鸟的地儿!!!!!
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
我得到的结果
游客

返回顶部