SCSI 미니포트 드라이버 디버깅을 위한 확장

SCSI 미니포트 드라이버를 디버그할 때 다음 디버거 확장이 유용할 수 있습니다. 일반 디버거 확장이 먼저 나열된 다음 SCSI 미니포트 디버깅과 관련된 확장이 나열됩니다.

!devobj
!devobj 확장은 DEVICE_OBJECT 대한 자세한 정보를 표시합니다. 현재 Irp 필드가 null이 아니면 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(기호 경로 설정) 명령을 사용하여 현재 경로를 표시하고 경로를 변경할 수 있습니다. .reload(모듈 다시 로드) 명령은 현재 경로에서 기호를 다시 로드합니다.

!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 필드를 확인하여 찾을 수 있습니다) 또는 실제 디바이스 개체(!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 확장은 지정된 SRB(SCSI 요청 블록)에 대한 자세한 정보를 표시합니다. SRB는 주소로 지정됩니다. 현재 활성 상태인 모든 요청의 주소는 !minipkd.req 명령에서 출력의 SRB 필드에서 찾을 수 있습니다.

!scsikd.classext [디바이스 [수준]]
!scsikd.classext 확장은 지정된 클래스 플러그 앤 플레이(PnP) 디바이스 또는 이러한 모든 디바이스 목록에 대한 자세한 정보를 표시합니다. 디바이스는 PnP 클래스 디바이스의 디바이스 개체 또는 디바이스 확장입니다. 디바이스를 생략하면 모든 클래스 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 추적 블록에 대한 자세한 정보를 표시합니다.