scsi设备扫描特征分析
来源:互联网 发布:linux 列出网卡ip 编辑:程序博客网 时间:2024/06/05 17:31
当驱动发现一个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+0x1e807dc448 88f624e9 storport!RaidAdapterPostScatterGatherExecute+0x184807dc458 88f6ff44 storport!RaidAdapterExecuteXrb+0x2d807dc478 88f6748b storport!RaUnitStartIo+0xbf807dc4b8 88f6da13 storport!RaidStartIoPacket+0x10c807dc4d8 88f7067f storport!RaidUnitSubmitRequest+0x4e807dc4f8 88f665a7 storport!RaUnitScsiIrp+0x114807dc514 83e4a593 storport!RaDriverScsiIrp+0x60807dc52c 88f6c22d nt!IofCallDriver+0x63807dc548 88f64e29 storport!RaSendIrpSynchronous+0x3b807dc5b8 88f6553f storport!RaidBusEnumeratorIssueSynchronousRequest+0x72807dc5e8 88f65789 storport!RaidBusEnumeratorGenericInquiry+0x61807dc640 88f65ae7 storport!RaidBusEnumeratorProbeLunZero+0x41807dc698 88f625af storport!RaidBusEnumeratorGetLunList+0x50807dc7d8 88f62685 storport!RaidAdapterEnumerateBus+0xbd807dc874 88f9616f storport!RaidAdapterRescanBus+0x55807dc898 88f96837 storport!RaidAdapterQueryDeviceRelationsIrp+0x90807dc8b4 88f96d86 storport!RaidAdapterPnpIrp+0x94807dc8d0 83e4a593 storport!RaDriverPnpIrp+0x71807dc8e8 83fd26f8 nt!IofCallDriver+0x63807dc904 83fd262f nt!PnpAsynchronousCall+0x92807dc964 83fd23b1 nt!PnpQueryDeviceRelations+0xc5807dc9a8 83fd0fe1 nt!PipEnumerateDevice+0xf9807dcba4 83fd1da5 nt!PipProcessDevNodeTree+0x32c807dcbd8 83e27ce0 nt!PiProcessReenumeration+0x74807dcc00 83e90aab nt!PnpDeviceActionWorker+0x224807dcc50 8401cf5e nt!ExpWorkerThread+0x10d807dcc90 83ec4219 nt!PspSystemThreadStartup+0x9e00000000 00000000 nt!KiThreadStartup+0x19
- scsi设备扫描特征分析
- scsi 设备挂载
- scsi设备模型一
- SCSI设备:SCSI接口图片说明
- android蓝牙扫描(scan)设备分析
- BlueZ-5.35蓝牙设备扫描源码分析
- SCSI驱动框架分析
- SCSI HBA设备对象例程
- scsi设备驱动体系架构
- scsi设备驱动体系架构
- scsi设备驱动体系架构
- RHEL不重启扫描磁盘阵列变化(SCSI…
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析
- matlab的函数conv()的C语言实现
- 插入排序
- Java内存溢出详解
- 【CodeForces】[659A]New Year and Days
- fitnesse使用
- scsi设备扫描特征分析
- 关于iOS通知(APNS)的理解
- 监听Activity的生命周期
- Python:10054错误
- webstorm添加电脑上其他盘里面 的文件
- pager-taglib 使用说明
- D - Spreadsheets
- UIBarbuttonItem的rigthItem的创建
- 用yeelink记录树莓派的工作温度