scsi设备扫描特征分析

   当驱动发现一个scsi适配器后,会扫描与其连接的scsi设备。每一个scsi设备的路径可以通过(PathId,TargetId,Lun)表示,当存储miniport驱动收到scsi指令SCSIOP_INQUIRY后,需要判断当前的查询路径上是否有scsi设备连接。

   我们配置scsi适配器时会设置其支持的最大总线数(NumberOfBuses)、最大对应ID设备(MaximumNumberOfTargets)及每一ID设备支持的最大逻辑单元数量(MaximumNumberOfLogicalUnits)。当发现scsi适配器或者调用StorPortNotification(BusChangeDetected, ..., ...)时,Port驱动会向miniport驱动发送SCSIOP_INQUIRY指令,指示miniport驱动重新枚举其上的scsi驱动。在枚举每一个ID设备之前,会先向此ID设置发送SCSIOP_REPORT_LUNS指令。若不支持此指令,再枚举此ID设备上面的逻辑单元。

  我发现响应SCSIOP_INQUIRY指令时,若一个ID设备的Lun 0返回失败,则对这个ID设备的其它的Lun不再发送SCSIOP_INQUIRY指令。若Lun 0返回成功,不管其后的Lun是否枚举成功,都会接受到SCSIOP_INQUIRY指令。与返回的SRB status错误码无关。

PS: 前段文字说Port驱动会向miniport驱动发送SCSIOP_INQUIRY指令,我感觉这说的不准确,因为Port及Miniport驱动组成了一个完整的驱动,当调用StorPortNotification(BusChangeDetected, ..., ...)时,函数内部应该调用IoInvalidateDeviceRelations通知pnp管理器设备发生了变化,而后pnp管理器发送IRP_MN_QUERY_DEVICE_RELATIONS查询设备,Port驱动再处理此IRP时向miniport驱动发送SCSIOP_INQUIRY指令。

807dc3a8 a206c812 OsrSVMStor!tdvdisk_ScsiOpInquiry+0x1c [d:\td\newframe\tdvdisk\tdvdisk\tdvmscsi.c @ 82]
807dc3e8 a206d842 OsrSVMStor!tdvdisk_VmExecuteScsi+0x152 [d:\td\newframe\tdvdisk\tdvdisk\tdvmscsi.c @ 38]
807dc410 88f60635 OsrSVMStor!HwStorStartIo+0xa2 [d:\td\newframe\tdvdisk\tdvdisk\tdvdisk.c @ 257]
807dc420 88f6226b storport!RaCallMiniportStartIo+0x1e
807dc448 88f624e9 storport!RaidAdapterPostScatterGatherExecute+0x184
807dc458 88f6ff44 storport!RaidAdapterExecuteXrb+0x2d
807dc478 88f6748b storport!RaUnitStartIo+0xbf
807dc4b8 88f6da13 storport!RaidStartIoPacket+0x10c
807dc4d8 88f7067f storport!RaidUnitSubmitRequest+0x4e
807dc4f8 88f665a7 storport!RaUnitScsiIrp+0x114
807dc514 83e4a593 storport!RaDriverScsiIrp+0x60
807dc52c 88f6c22d nt!IofCallDriver+0x63
807dc548 88f64e29 storport!RaSendIrpSynchronous+0x3b
807dc5b8 88f6553f storport!RaidBusEnumeratorIssueSynchronousRequest+0x72
807dc5e8 88f65789 storport!RaidBusEnumeratorGenericInquiry+0x61
807dc640 88f65ae7 storport!RaidBusEnumeratorProbeLunZero+0x41
807dc698 88f625af storport!RaidBusEnumeratorGetLunList+0x50
807dc7d8 88f62685 storport!RaidAdapterEnumerateBus+0xbd
807dc874 88f9616f storport!RaidAdapterRescanBus+0x55
807dc898 88f96837 storport!RaidAdapterQueryDeviceRelationsIrp+0x90
807dc8b4 88f96d86 storport!RaidAdapterPnpIrp+0x94
807dc8d0 83e4a593 storport!RaDriverPnpIrp+0x71
807dc8e8 83fd26f8 nt!IofCallDriver+0x63
807dc904 83fd262f nt!PnpAsynchronousCall+0x92
807dc964 83fd23b1 nt!PnpQueryDeviceRelations+0xc5
807dc9a8 83fd0fe1 nt!PipEnumerateDevice+0xf9
807dcba4 83fd1da5 nt!PipProcessDevNodeTree+0x32c
807dcbd8 83e27ce0 nt!PiProcessReenumeration+0x74
807dcc00 83e90aab nt!PnpDeviceActionWorker+0x224
807dcc50 8401cf5e nt!ExpWorkerThread+0x10d
807dcc90 83ec4219 nt!PspSystemThreadStartup+0x9e
00000000 00000000 nt!KiThreadStartup+0x19


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值