阅读:1908回复:4
U盘过滤驱动
我用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; } |
|
沙发#
发布于:2008-05-14 16:51
望斑竹及高手现身解答,谢谢
|
|
板凳#
发布于:2008-05-14 18:55
是不是DS的问题,我看好多人用DDK没有遇到这个问题,用DS的倒是有。
如果用DDK,怎么安装可以让USBSTOR.SYS在系统一加载,我的FILTER就挂上? |
|
地板#
发布于:2008-05-14 23:45
![]() |
|
地下室#
发布于:2008-05-15 17:42
高人在哪里???
|
|