|
From: Royce M. I. <ro...@ev...> - 2002-09-01 21:10:04
|
Hello Eric,
Here's the relevant snippet:
Initializing system32\drivers\disk.sys...
DriverBase for system32\drivers\disk.sys: dcccc000
(atapi.c:783) Srb c04de636 XferLen 0 XferSz 512 LastBlk TRUE TgtAddr ccc6448
2
(atapi.c:783) Srb c04de636 XferLen 0 XferSz 512 LastBlk TRUE TgtAddr ccc6448
2
(atapi.c:783) Srb c00b4440 XferLen 0 XferSz 53456 LastBlk TRUE TgtAddr c04dd
78a
Page fault at high IRQL was 12
Bug detected code: 0x1D
Page Fault Exception: 14(2)
Just so as there's no confusion, here's my atapi.c:783 :
DPRINT1("Srb %p XferLen %lu XferSz %lu LastBlk %s TgtAddr %lx\n",
Srb, Srb->DataTransferLength, TransferSize,
(IsLastBlock) ? "TRUE" : "FALSE", (ULONG)TargetAddress );
Why would Srb->DataTransferLength be 0???
Royce3
Sunday, September 1, 2002, 7:47:37 AM, you wrote:
EK> Well, it clearly shows that something is going wrong.
EK> In AtapiInterrupt() you will find some more DPRINT() macros. Enable one of
EK> them, by changing it to DPRINT1(), to get some more information about the
EK> failed data transfer.
EK> For example, enable the DPRINT() at line 718 to check the validity of the
EK> SRB (Scsi Request Block). The SRB should be the same for each valid
EK> interrupt of a data-transfer.
EK> Or enable the DPRINT()s at lines 757, 758 and 771 to check the progress of
EK> the current transfer. IsLastBlock should be TRUE at the last interrupt of a
EK> transfer. TransferLength is the number of bytes that will have to be
EK> transferred to complete the transfer. It should diminish by 512 (0x200) upon
EK> each interrupt.
EK> Your harddisk might generate an excessive interrupt after the data transfer
EK> has completed. In this case atapi.sys might not identify this interrupt as
EK> invalid.
EK> Eric
|