2012年1月2日 星期一

BSOD 7A KERNEL_DATA_INPAGE_ERROR


The KERNEL_DATA_INPAGE_ERROR bug check has a value of 0x0000007A. This bug check indicates that the requested page of kernel data from the paging file could not be read into memory.  Usually, this is the HDD or HDD interface problem.  Then we can check parameter 2 for more information. 

Cause

Frequently, you can determine the cause of the KERNEL_DATA_INPAGE_ERROR bug check from the error status (Parameter 2). Some common status codes include the following:
  • 0xC000009A, or STATUS_INSUFFICIENT_RESOURCES, indicates a lack of nonpaged pool resources.
  • 0xC000009C, or STATUS_DEVICE_DATA_ERROR, typically indicates bad blocks (sectors) on the hard disk.
  • 0xC000009D, or STATUS_DEVICE_NOT_CONNECTED, indicates defective or loose cabling, termination, or that the controller does not see the hard disk.
  • 0xC000016A, or STATUS_DISK_OPERATION_FAILED, indicates bad blocks (sectors) on the hard disk.
  • 0xC0000185, or STATUS_IO_DEVICE_ERROR, indicates improper termination or defective cabling on SCSI devices or that two devices are trying to use the same IRQ.
These status codes are the most common ones that have specific causes. For more information about other possible status codes that can be returned, see the Ntstatus.h file in the Microsoft Windows Driver Kit (WDK).  Sometimes, these status code will be also shown in the other kind dump files.  This status code will be useful for us to check the dump file.  Another common cause of this error message is defective hardware or failing RAM.  Or a virus infection can also cause this bug check.

Here also show you the detail about "Resolving the Problem" from windbg help.

Resolving a bad block problem: An I/O status code of 0xC000009C or 0xC000016A typically indicates that the data could not be read from the disk because of a bad block (sector). If you can restart the computer after the error, Autochk runs automatically and attempts to map the bad sector to prevent it from being used anymore.
If Autochk does not scan the hard disk for errors, you can manually start the disk scanner. Run Chkdsk /f /r on the system partition. You must restart the computer before the disk scan begins. If you cannot start the computer because of the error, use the Recovery Console and runChkdsk /r.
Resolving a defective hardware problem: If the I/O status is C0000185 and the paging file is on an SCSI disk, check the disk cabling and SCSI termination for problems.
Resolving a failing RAM problem: Run the hardware diagnostics that the system manufacturer supplies, especially the memory scanner. For more information about these procedures, see the owner's manual for your computer.
Check that all the adapter cards in the computer are properly seated. Use an ink eraser or an electrical contact treatment, available at electronics supply stores, to ensure adapter card contacts are clean.
Check the System Log in Event Viewer for additional error messages that might help identify the device that is causing the error. You can also disable memory caching of the BIOS to try to resolve this error.
Make sure that the latest Windows Service Pack is installed.
If the preceding steps do not resolve the error, take the system motherboard to a repair facility for diagnostic testing. A crack, a scratched trace, or a defective component on the motherboard can cause this error.
Resolving a virus infection: Check your computer for viruses by using any up-to-date, commercial virus scanning software that examines the Master Boot Record of the hard disk. All Windows file systems can be infected by viruses.
There is one real case here
Here is some of the "!analyze -v" result.
KERNEL_DATA_INPAGE_ERROR (7a)
The requested page of kernel data could not be read in.  Typically caused by
a bad block in the paging file or disk controller error. Also see
KERNEL_STACK_INPAGE_ERROR.
If the error status is 0xC000000E, 0xC000009C, 0xC000009D or 0xC0000185,
it means the disk subsystem has experienced a failure.
If the error status is 0xC000009A, then it means the request failed because
a filesystem failed to make forward progress.
Arguments:
Arg1: c040f570, lock type that was held (value 1,2,3, or PTE address)
Arg2: c000009d, error status (normally i/o status code)
Arg3: 2c36a860, current process (virtual address for lock type 3, or PTE)
Arg4: 81eae500, virtual address that could not be in-paged (or PTE contents if arg1 is a PTE address)
Debugging Details:
------------------
ERROR_CODE: (NTSTATUS) 0xc000009d - STATUS_DEVICE_NOT_CONNECTED
DISK_HARDWARE_ERROR: There was error with disk hardware
BUGCHECK_STR:  0x7a_c000009d
DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT

SCSI Miniport Extensions (Scsikd.dll and Minipkd.dll)

Extension commands that are useful for debugging SCSI miniport drivers can be found in Scsikd.dll and Minipkd.dll.
You can use the Scsikd.dll extension commands with any version of Windows. However, you can only use the Minipkd.dll extension commands with Windows XP and later versions of Windows. Commands in Minipkd.dll are only applicable to SCSIport-based miniports.
For more information, see SCSI Miniport Debugging.

Actually, "!classext" is the often used command for me to check SATA related problem.
kd> .load scsikd
kd> !classext
Storage class devices:

* !classext 8658d310 [1,2] ST332081 3AS Paging Disk       
  !classext 89b67a28 [1,2] Optiarc CDRWDVD CRX890S Removable Cdrom      

Usage: !classext <class device> <level [0-2]>
kd> !scsikd.classext 8658d310 2
Storage class device 8658d310 with extension at 8658d3c8

Classpnp Internal Information at 86690310

    Transfer Packet Engine:

     Packet  Status  DL Irp  Opcode  Sector   UL Irp 
    -------- ------ -------- ------ -------- --------
    8a0b59f8  Free  84f8b488 
    85f99128  Free  8a15b310 
    84f9ff08  Free  a32dd860 
    8a0977c8  Free  a484e2d0 
    84f9abe0  Free  8cb6e008 
    8cc3af08  Free  9d790008 
    8ccb04d8  Free  8caf8678 
    852e7810  Free  8a039920 
    Pending Idle Requests: 0x0
    Failed Requests:
           Srb    Scsi                                   
    Opcode Status Status Sense Code  Sector   Time Stamp 
    ------ ------ ------ ---------- -------- ------------
      2a     0a     00    00 00 00  00521510 03:40:58.212   
      2a     0a     00    00 00 00  00549f98 03:40:58.212   
      2a     0a     00    00 00 00  0054a058 03:40:58.212   
      2a     0a     00    00 00 00  0054a118 03:40:58.212   
      2a     0a     00    00 00 00  0054a1d8 03:40:58.212   
      2a     0a     00    00 00 00  0054a298 03:40:58.212   
      2a     0a     00    00 00 00  005e0808 03:40:58.212   
      2a     0a     00    00 00 00  00288558 03:40:58.212   
      2a     0a     00    00 00 00  0029e230 03:40:58.212   
      2a     0a     00    00 00 00  005e1748 03:40:58.212   
      2a     0a     00    00 00 00  005e1748 03:40:58.212   
      2a     0a     00    00 00 00  005e0800 03:40:58.212   
      2a     0a     00    00 00 00  00d17650 03:40:58.212   
      2a     0a     00    00 00 00  00275858 03:40:58.212   
      2a     0a     00    00 00 00  005e0808 03:40:58.212   
      2a     0a     00    00 00 00  003b1038 03:40:58.212   

Opcode :  It mean SCSI CDB operation codes and it can find the detail information in the storport.h of Windows WDK.  Below show some definitions.
// 10-byte commands
#define SCSIOP_READ_FORMATTED_CAPACITY  0x23
#define SCSIOP_READ_CAPACITY            0x25
#define SCSIOP_READ                     0x28
#define SCSIOP_WRITE                    0x2A
Srb status :  It also can be checked in the WDK storport.h
#define SRB_STATUS_PENDING                  0x00
#define SRB_STATUS_SUCCESS                  0x01
#define SRB_STATUS_ABORTED                  0x02
#define SRB_STATUS_ABORT_FAILED             0x03
#define SRB_STATUS_ERROR                    0x04
#define SRB_STATUS_BUSY                     0x05
#define SRB_STATUS_INVALID_REQUEST          0x06
#define SRB_STATUS_INVALID_PATH_ID          0x07
#define SRB_STATUS_NO_DEVICE                0x08
#define SRB_STATUS_TIMEOUT                  0x09
#define SRB_STATUS_SELECTION_TIMEOUT        0x0A
#define SRB_STATUS_COMMAND_TIMEOUT          0x0B

Scsi status :  SCSI Status Code is used to determine the success or failure of a SCSI command. At the end of any command, the target returns a Status Code byte which should be one of the following:  (http://en.wikipedia.org/wiki/SCSI_Status_Code)
 CodeName
00hGOOD
02hCHECK CONDITION
04hCONDITION MET
08hBUSY
18hRESERVATION CONFLICT
28hTASK SET FULL
30hACA ACTIVE
40hTASK ABORTED
Sense code : It can check http://en.wikipedia.org/wiki/Key_Code_Qualifier for more detail.
Key Code Qualifier is a computer term used to describe an error-code returned by a SCSI device.
When a SCSI target device returns a check condition in response to a command, the initiator usually then issues a SCSI Request Sense command. This process is part of a SCSI protocol calledContingent Allegiance Condition. The target will respond to the Request Sense command with a set of SCSI sense data which includes three fields giving increasing levels of detail about the error:
  • K - sense key - 4 bits, (byte 2 of Fixed sense data format)
  • C - additional sense code (ASC) - 8 bits, (byte 12 of Fixed sense data format)
  • Q - additional sense code qualifier (ASCQ) - 8 bits, (byte 13 of Fixed sense data format)
The initiator can take action based on just the K field which indicates if the error is minor or major. However all three fields are usually logically combined into a 20 bit field called Key Code Qualifier or KCQ. The specification for the target device will define the list of possible KCQ values. In practice there are many KCQ values which are common between different SCSI device types and different SCSI device vendors.

沒有留言:

張貼留言