top of page

The Intraoral Picture (2 CEs)

Public·1475 members

Colton Mitchell
Colton Mitchell

SCSIPORT Debugging: Best Practices for Analyzing Stalled Drivers and Time-Outs



Fortunately, the SCSIPORT structure is not simple. In particular, the StorPort structure is packed. Since the assembly has a lot of members and constants, I could not just create a new structure to copy over the whole structure, so I had to turn to some ugly nasty tricks.




SCSIPORT debugging



First, you may notice that the "dwMajorFunction" field is being displayed as a "0x%08x". The debugger may not be using Windows data types for the debugging info. Most debuggers will default to a Windows data type in any case, and sometimes in the Windows.map files the debuggers use a "CDBG" data type, but the dddprintf.sys debugging info is generated from Windows bit fields and works just fine without Windows data types.


KPRINT_T KdPrint( KPRINT_T pstr,... ); dwMajorFunction cdbg.cdbkprintf( 1, "%s (%x,%08x)", pstr, (wProcessorLevel), (wMajorFunction) ); SCSIPORT debugging The second red flag is the "UnRelocatedBase" (in SCSIRequestInfo.dwStateField), which may appear as the hexadecimal address 0000:10, 000. Some filter drivers have state fields that are in the range of 0000:10, 001 to 0000:10, 100. The debug information has not yet been relocatable. This is a temporary state, and all bases are valid.


SCSIPort.sys is a proprietary.NET managed driver, built using the external symbols provided by Microsoft. This usually indicates that the symbol path does not point to the appropriate version of the unmanaged symbols.


If the scsiport.sys file version is in the form of: v*.Build.Number: If you're using a version of scsiport.sys that is newer than what was provided, then this indicates an incorrect symbol path. See the SCSIPORT debugging section above for more information.


bottom of page