用于调试 SCSI 微型端口驱动程序的扩展

调试 SCSI 微型端口驱动程序时,可能会发现以下调试器扩展很有用。 首先列出常规调试器扩展,然后列出特定于 SCSI 微型端口调试的扩展。

!devobj
!devobj 扩展显示有关DEVICE_OBJECT的详细信息。 如果 “当前 Irp ”字段为非空,则这可能是由等待映射寄存器的 SCSI 驱动程序引起的。

以下是示例:

0: kd> !devobj 8633da70
Device object (8633da70) is for:
 adpu160m1 \Driver\adpu160m DriverObject 8633eeb8
Current Irp 860ef008 RefCount 0 Type 00000004 Flags 00000050
Dacl e129871c DevExt 8633db28 DevObjExt 8633dfd0
ExtensionFlags (0000000000)
AttachedTo (Lower) 863b2978 \Driver\PCI
Device queue is not busy. 

!errlog
!errlog 扩展显示 I/O 系统错误日志中任何挂起条目的内容。

!对象
!object 扩展显示有关系统对象的信息。 此扩展显示所有 SCSI 设备。

例如:

0: kd> !object \device\scsi
Object: e12a2520  Type: (863d12c8) Directory
    ObjectHeader: e12a2508
    HandleCount: 0  PointerCount: 9
    Directory Object: e1001100  Name: Scsi

    Hash Address  Type          Name
    ---- -------  ----          ----
     04  86352040 Device        adpu160m1Port3Path0Target6Lun0
     11  86353040 Device        adpu160m1Port3Path0Target1Lun0
     13  86334a70 Device        lp6nds351
     22  862e6040 Device        adpu160m1Port3Path0Target0Lun0
     24  8633da70 Device        adpu160m1
     25  86376040 Device        adpu160m2
     34  862e5040 Device        adpu160m1Port3Path0Target2Lun0 

!pcr
!pcr 扩展显示有关处理器控制区域的详细信息, (处理器上的 PCR) 。 该信息包括 DPC 队列中的项,这些项可能很有用。 调试已停止的驱动程序或超时时。

!minipkd.help
!minipkd.help 扩展显示所有 Minipkd.dll 扩展命令的列表。

如果出现类似于以下内容的错误消息,则表明符号路径不正确,并且未指向 Scsiport.sys 符号的正确版本。

minipkd error (0) <path> ... \minipkd\minipkd.c @ line 435

.sympath (Set Symbol Path) 命令可用于显示当前路径和更改路径。 .reload (Reload Module) 命令将从当前路径重新加载符号。

!minipkd.adapter 适配器
!minipkd.adapter 扩展显示有关指定适配器的详细信息。 可以通过查看!minipkd.adapters 显示中的 DevExt 字段来找到适配器。

!minipkd.adapters
!minipkd.adapters 扩展显示与 Windows 标识的 SCSI 端口驱动程序一起使用的所有适配器,以及与每个适配器关联的单个设备。

以下是示例:

0: kd> !minipkd.adapters
Adapter \Driver\lp6nds35     DO 86334a70         DevExt 86334b28
Adapter \Driver\adpu160m     DO 8633da70         DevExt 8633db28
 LUN 862e60f8 @(0,0,0) c ev     pnp(00/ff) pow(0,0) DevObj 862e6040
 LUN 863530f8 @(0,1,0) c ev p d pnp(00/ff) pow(0,0) DevObj 86353040
 LUN 862e50f8 @(0,2,0) c ev     pnp(00/ff) pow(0,0) DevObj 862e5040
 LUN 863520f8 @(0,6,0)   ev     pnp(00/ff) pow(0,0) DevObj 86352040
Adapter \Driver\adpu160m     DO 86376040         DevExt 863760f8 

类似于以下内容的错误消息指示符号路径不正确且未指向正确版本的 Scsiport.sys 符号,或者 Windows 未识别任何使用 SCSI 端口驱动程序的适配器:

minipkd error (0) <path> ... \minipkd\minipkd.c @ line 435

如果 !minipkd.help 扩展命令成功返回帮助信息,则 SCSI 端口符号是正确的。

!minipkd.exports 适配器
!minipkd.exports 扩展显示指定适配器的微型端口导出的地址。

!minipkd.lun {LUN |Device}
!minipkd.lun 扩展显示有关指定逻辑单元扩展 (LUN) 的详细信息。 可以通过指定 LUN 的地址 (可通过查看 !minipkd.adapters 显示) 中的 LUN 字段来指定 LUN,也可以按其物理设备对象 (指定,该对象可在 !minipkd.adapters 显示) 的 DevObj 字段中找到。

!minipkd.portconfig PortConfig
!minipkd.portconfig 扩展显示有关指定PORT_CONFIGURATION_DATA的详细信息。 PortConfig 可在 !minipkd.adapter 显示的“端口配置信息”字段中找到。

!minipkd.req {Adapter |Device}
!minipkd.req 扩展显示有关指定适配器或 LUN 设备上所有当前活动请求的信息。

!minipkd.srb SRB
!minipkd.srb 扩展显示有关指定 SCSI 请求块的详细信息 (SRB) 。 SRB 由地址指定。 可以在 !minipkd.req 命令输出的 SRB 字段中找到所有当前活动请求的地址。

!scsikd.classext [Device [Level]]
!scsikd.classext 扩展显示有关指定类的详细信息即插即用 (PnP) 设备或所有此类设备的列表。 设备是类 PnP 设备的设备对象或设备扩展。 如果省略 Device ,则显示所有类 PnP 扩展的列表。

以下是示例:

0: kd> !scsikd.classext 

 ' !scsikd.classext 8633e3f0 '   (             ) "IBM     " / "DDYS-T09170M    " / "S93E" / "        XBY45906"
 ' !scsikd.classext 86347b48 '   (paging device) "IBM     " / "DDYS-T09170M    " / "S80D" / "        VDA60491"
  ' !scsikd.classext 86347360 '   (             ) "UNISYS  " / "003451ST34573WC " / "5786" / "HN0220750000181300L6"
  ' !scsikd.classext 861d1898 '   (             ) "" / "MATSHITA CD-ROM CR-177" / "7T03" / ""

 usage: !classext <class fdo> <level [0-2]> 

!scsikd.scsiext 设备
!scsikd.scsiext 扩展显示有关指定 SCSI 端口扩展的详细信息。 设备可以是适配器或 LUN 的设备对象或设备扩展。

下面是一些示例:

0: kd> !scsikd.scsiext 86353040
Common Extension:
   < ..omitted.. >
Logical Unit Extension:
  Address (3, 0, 1, 0) Claimed  Enumerated Visible
  LuFlags (0x00000000):
  Retry 0x00          Key 0x008889ff
  Lock 0x00000000  Pause 0x00000000   CurrentLock: 0x00000000
  HwLuExt 0x862e6f00  Adapter 0x8633db28  Timeout 0x0000000a
  NextLun 0x00000000  ReadyLun 0x00000000
  Pending 0x00000000  Busy 0x00000000     Untagged 0x00000000
  < ..omitted.. >
Request list @0x86353200:
      Tick count is 2526
      SrbData 8615d700  Srb 8611f4fc  Irp 8611f2b8   Key 60197  <1s
      SrbData 85e72868  Srb 86100c3c Irp 861009f8   Key e29dc7  <1s

0: kd> !scsikd.scsiext 8633da70 
Common Extension:
   < ..omitted.. >
Adapter Extension:
  Port 3     IsPnp VirtualSlot HasInterrupt
  LowerPdo 0x84f9fb68   HwDevExt 0x84634004   Active Requests 0x00000000
  MaxBus 0x03   MaxTarget 0x40   MaxLun 0x08
  Port Flags (0x00001000): PD_DISCONNECT_RUNNING
  NonCacheExt 0x850d4000  IoBase 0xd80f0000   Int 0x23  < ..omitted.. > 

!scsikd.srbdata Address
!scsikd.srbdata 扩展显示有关指定SRB_DATA跟踪块的详细信息。