NOTE: The text in the following Microsoft Knowledge Base article is provided so that the site search can find this page. Please click the Knowledge Base link to insure that you are reading the most current information.

Microsoft Knowledge Base article Q325606 contains:

This article describes event ID 51 entries that may be recorded in the System event log. This is an example of an event ID 51 entry that is logged in the System event log when the system is writing information to the physical disk:

Event ID: 51
Event Type: Warning
Event Source: Disk
Description: An error was detected on device \Device\Harddisk3\DR3 during a paging operation.
Data:
0000: 04 00 22 00 01 00 72 00
0008: 00 00 00 00 33 00 04 80
0010: 2d 01 00 00 00 00 00 00
0018: 00 00 00 00 00 00 00 00
0020: 00 52 ea 04 15 00 00 00
0028: 01 00 00 00 04 00 00 00
0030: 03 00 00 00 2a 00 00 00
0038: 02 84 00 00 00 29 06 00
0040: 2a 60 0a 82 75 29 00 00
0048: 80 00
Note that the device in the description and the specific hexadecimal data may vary.

MORE INFORMATION

An event ID 51 entry is a generic error entry for any type of error that occurs when Windows is paging information to input/output (I/O). A paging operation occurs when Windows either swaps a page of memory from memory to disk, or when Windows retrieves a page of memory from disk to memory. This is part of the memory management features of Windows XP.

Not every disk access is paging I/O. Programs can perform non-buffered I/O to access disk data. Also, Windows is not necessarily writing to the paging file (Pagefile.sys), which the name implies. This may be any type of data access. Event ID 51 is similar to event ID 9 or 11, but it is not as serious an error. Event ID 51 occurs only during a paging I/O operation. If this error occurs when no paging operation is occurring, an event is not logged, which is unlike event ID 9 or 11.

You can troubleshoot event ID 51 in the same manner as event ID 9 or 11. For additional information, click the article number below to view the article in the Microsoft Knowledge Base:
Q314093 How to Troubleshoot Error Messages About Event ID 9 and Event ID 11
You can use the binary data that is associated with any "Disk" error (event IDs 9, 11, 51, and others) to help you identify the problem. You do this by decoding the data section of the error. For additional information about how to decode the data section, click the article number below to view the article in the Microsoft Knowledge Base:
Q182335 INFO: Format of Event Log Data Created by ScsiPortLogError

Entries in the Data Section

Because event ID 51 has an additional Cdb field, you must consider the following information when you are reviewing the data section of an event ID 51 entry.

The Error Code

In the sample entry in the "Summary" section of this article, the error code is listed in the second line, which starts with "0008:" and includes the last four octets in the line.

ErrorCode = 0x80040033.

This is the code for error 51, which is the same for all event ID 51 errors:
IO_WARNING_PAGING_FAILURE
When you are interpreting the status code from the hexadecimal data in the event ID entry, remember that the values are represented in the little Endian format.

The Final Status Code

In the example in the "Summary" section of this article, the final status code is listed in the third line, which starts with "0010:" and includes the last four octets in the line.

FinalStatus = 0x00000000.

This event ID data indicates "success," so it is probable that no loss of data occurred.

The SCSI Request Block (SRB) Parameters

You can use this data to you help determine where the problem occurred. The Data section is represented in the following format:
DumpData\[0\] = PathId
DumpData\[1\] = TargetId
DumpData\[2\] = LUN
DumpData\[3\] = Cdb
DumpData\[4\] = ErrorEncountered 8 | ScsiStatus
In the example in the "Summary" section of this article, the ScsiStatus value is 0x02 (the first octet in the "0038" line), and the SrbStatus value is 0x84 (the second octet in the "0038" line). This provides the following information:
SrbStatus of 0x84: SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_ERROR

ScsiStatus of 0x02: SP_UNEXPECTED_DISCONNECT
Ten SCSI errors are currently defined in the Microsoft Windows NT Device Driver Kit (DDK) documentation, and in the Srb.h file. The SCSI miniport calls ScsiPortLogError and supplies a SCSI error value (SP_ xxx) as the ErrorCode parameter. By using the information from the following table, the ScsiPort driver translates the SCSI error to a Windows NT error code (IO_ERR_ xxx).

SRB status codes (from the Srb.h file):
0x00 = SRB_STATUS_PENDING
0x01 = SRB_STATUS_SUCCESS
0x02 = SRB_STATUS_ABORTED
0x03 = SRB_STATUS_ABORT_FAILED
0x04 = SRB_STATUS_ERROR
0x05 = SRB_STATUS_BUSY
0x06 = SRB_STATUS_INVALID_REQUEST
0x07 = SRB_STATUS_INVALID_PATH_ID
0x08 = SRB_STATUS_NO_DEVICE
0x09 = SRB_STATUS_TIMEOUT
0x0A = SRB_STATUS_SELECTION_TIMEOUT
0x0B = SRB_STATUS_COMMAND_TIMEOUT
0x0D = SRB_STATUS_MESSAGE_REJECTED
0x0E = SRB_STATUS_BUS_RESET
0x0F = SRB_STATUS_PARITY_ERROR
0x10 = SRB_STATUS_REQUEST_SENSE_FAILED
0x11 = SRB_STATUS_NO_HBA
0x12 = SRB_STATUS_DATA_OVERRUN
0x13 = SRB_STATUS_UNEXPECTED_BUS_FREE
0x14 = SRB_STATUS_PHASE_SEQUENCE_FAILURE
0x15 = SRB_STATUS_BAD_SRB_BLOCK_LENGTH
0x16 = SRB_STATUS_REQUEST_FLUSHED
0x20 = SRB_STATUS_INVALID_LUN
0x21 = SRB_STATUS_INVALID_TARGET_ID
0x22 = SRB_STATUS_BAD_FUNCTION
0x23 = SRB_STATUS_ERROR_RECOVERY
0x24 = SRB_STATUS_NOT_POWERED
This value is used by the port driver to indicate that a non-SCSI-related error occurred. Miniports must never return this status:
0x30 = SRB_STATUS_INTERNAL_ERROR
SRB status values 0x38 through 0x3f are reserved for internal port driver use.

SRB status masks must be broken down; they are a sub-status. They are combined with the error that is listed earlier in this article:
0x40 = SRB_STATUS_QUEUE_FROZEN
0x80 = SRB_STATUS_AUTOSENSE_VALID
For example, 0x84 is 0x80, which equals SRB_STATUS_AUTOSENSE_VALID and 0x04 SRB_STATUS_ERROR.

SCSI status codes (from the Scsi.h file):
0x00 = SCSISTAT_GOOD
0x02 = SCSISTAT_CHECK_CONDITION
0x04 = SCSISTAT_CONDITION_MET
0x08 = SCSISTAT_BUSY
0x10 = SCSISTAT_INTERMEDIATE
0x14 = SCSISTAT_INTERMEDIATE_COND_MET
0x18 = SCSISTAT_RESERVATION_CONFLICT
0x22 = SCSISTAT_COMMAND_TERMINATED
0x28 = SCSISTAT_QUEUE_FULL