peng_intel
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2009-06-27
  • 粉丝0
  • 关注0
  • 积分248分
  • 威望76点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
阅读:1576回复:4

U盘过滤驱动

楼主#
更多 发布于:2008-05-14 15:45
我用DS做了一个U盘只读过滤,用DS自动生成的DLL安装到USBSTOR.SYS的下层过滤。在U盘插入、工作和删除的时候都可以检测到IRP,并且在工作的时候全都是来自InternalDeviceControl这个过滤函数。
我在这个函数里把KIRP里面的CurrentStackLocation里面的Parameters.Scsi.Srb里面的Cdb里面的CDB6READWRITE.OperationCode分解出来,检测了在U盘所有的工作过程当中,只有插入设备的时候的前七个OperationCode或第七个OperationCode不是SCSIOP_TEST_UNIT_READY(0x00),其余的时候全是SCSIOP_TEST_UNIT_READY,在U盘不读写的时候大约有每秒4个,在U盘读数据和写数据的时候在一秒钟就有大量的IRP进来,但是OperationCode也总是SCSIOP_TEST_UNIT_READY(0x00)。
所以我现在很疑惑,我也看到别的有用DS的同行遇到过这个问题,但没有解决方案,希望斑竹和高手可以帮我解答一下,我感激不尽,谢谢。

这是我的DS代码:
NTSTATUS usbfilter2Device::InternalDeviceControl(KIrp I)
{
    PIO_STACK_LOCATION irpStack = I.CurrentStackLocation();
    PSCSI_REQUEST_BLOCK CurSrb = irpStack->Parameters.Scsi.Srb;
    PCDB cdb = (PCDB)CurSrb->Cdb;
    UCHAR opCode = cdb->CDB6READWRITE.OperationCode;
    T << opCode;
    NTSTATUS status = PassThrough(I);
    return status;
}
peng_intel
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2009-06-27
  • 粉丝0
  • 关注0
  • 积分248分
  • 威望76点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-05-14 16:51
望斑竹及高手现身解答,谢谢
peng_intel
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2009-06-27
  • 粉丝0
  • 关注0
  • 积分248分
  • 威望76点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-05-14 18:55
是不是DS的问题,我看好多人用DDK没有遇到这个问题,用DS的倒是有。
如果用DDK,怎么安装可以让USBSTOR.SYS在系统一加载,我的FILTER就挂上?
peng_intel
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2009-06-27
  • 粉丝0
  • 关注0
  • 积分248分
  • 威望76点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-05-14 23:45
peng_intel
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2009-06-27
  • 粉丝0
  • 关注0
  • 积分248分
  • 威望76点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-05-15 17:42
高人在哪里???
游客

返回顶部