阅读:3213回复:4
SCSI filter开发 SCSIOP_MODE_SENSE_10 的处理
SCSI在处理命令字 SCSIOP_MODE_SENSE 时,它用结构体
struct _MODE_SENSE10 { UCHAR OperationCode; UCHAR Reserved1 : 3; UCHAR Dbd : 1; UCHAR Reserved2 : 1; UCHAR LogicalUnitNumber : 3; UCHAR PageCode : 6; UCHAR Pc : 2; UCHAR Reserved3[4]; UCHAR AllocationLength[2]; UCHAR Control; } MODE_SENSE10, *PMODE_SENSE10; 这时的pagecode是什么意思呢 我现在在做一个scsi disk filter,驱动的堆叠顺序为 disk.sys->filter.sys->aha154x.sys 有几个问题: 1.filter拦截到的 irp_write和irp_read之类的,应该如何转化为scsi的srb呢? 2.在scsi driver中startio是很重要的,那么在filter中如何拦截进入这个startio的全部irp呢? 3.scsi driver中,好像没有irp这个概念?这是为什么?因为scsi是属于legacy driver的原因吗> |
|
|
沙发#
发布于:2004-09-28 22:38
PageCode的具体意义你可以查阅SCSI-2协议,里面定义的非常清晰。不过如果你是做一个scsi disk filter,为什么要关心这个呢?你的scsi disk filter有什么特殊作用吗?如果只是加密什么的,没必要关心这个。
你要实现的实际上是一个disk lower filter。你需要拦截IRP_MJ_INTERNAL_DEVICE_CONTROL或者IRP_MJ_SCSI。这两个实际上是一个,它们的值是一样的。你可以通过下面的方法得到SRB。 PCDB cdb; PSCSI_REQUEST_BLOCK srb; int OpCode; PIO_STACK_LOCATION currentIrpStack = IoGetCurrentIrpStackLocation(Irp); srb = currentIrpStack->Parameters.Scsi.Srb; cdb = srb->Cdb; OpCode = Cdb->CDB6GENERIC.OperationCode; 如果OpCode为SCSIOP_READ或SCSIOP_READ6, 读操作 如果OpCode为SCSIOP_WRITE或SCSIOP_WRITE6, 写操作 如果你只filter disk.sys, 一般是SCSIOP_READ和SCSIOP_WRITE 不是很明白你的第二个问题。 关于第三个问题,实际上driver和driver之间的通讯还是通过IRP的。只是在IRP中你要封装SCSI协议的SRB。具体你可以看看DDK中disk class的源代码就完全明白了,其实很简单,因为SCSI是个标准。 希望可以对你有帮助。 |
|
板凳#
发布于:2004-10-01 02:30
谢谢你的解释,
scsi中的startio是用于处理srb的,比如有: SRB_FUNCTION_IO_CONTROL SRB_FUNCTION_SHUTDOWN SRB_FUNCTION_EXECUTE_SCSI 你的意思是在disk filter中拦截IRP_MJ_INTERNAL_DEVICE_CONTROL就可以拦载scsi miniport的 SRB_FUNCTION_EXECUTE_SCSI? 在IRP_MJ_INTERNAL_DEVICE_CONTROL中,其ControlCode可以是下列的值: IOCTL_SCSI_EXECUTE_IN IOCTL_SCSI_EXECUTE_OUT IOCTL_SCSI_EXECUTE_NONE IOCTL_SCSI_PASS_THROUGH IOCTL_SCSI_PASS_THROUGH_DIRECT IOCTL_SCSI_GET_CAPABILITIES 这几个值分别是什么意思? 能给些详细介绍 scsiII的网站或资料吗? 请联系一下我,谢谢 [编辑 - 10/1/04 by SunMing.Cai] |
|
|
地板#
发布于:2004-10-01 09:52
在你的disk filter中拦截IRP_MJ_INTERNAL_DEVICE_CONTROL就可以拦载SRB_FUNCTION_EXECUTE_SCSI。得到SRB后,检查srb->Function是否等于SRB_FUNCTION_EXECUTE_SCSI就可以了。
我不知道你的disk filter是做什么用的,为何要关心那些IOCTL呢? SCSI-2协议好象本站就有,你找找。 |
|
地下室#
发布于:2004-10-11 08:15
你要的SPC在www.t10.org
|
|