Hi all,
I'm writing a StorPort driver now. When I receive a READ SRB I just put it
in a queue. After I got the interrupt, I insert a DPC. Then in DPC routine,
I put out this SRB from the queue and complete the SRB by using
StorPortNotification( RequestComplete, DeviceExtension, pCurrentSrb );
However, after a very short time, the system will BSOD(The problem doesn't
result in my driver call stack). If I get rid of this code( I
mean StorPortNotification), system will not BSOD. I think system will
complete it automatically after timeout. So I doubt that system has already
complete it before I complete it. What would happen if I complete the SRB
twice? I know that it's very bad error if I complete the IRP twice. The
below is the analysis from windbg:
0: kd> !analyze -v
TRIAGER: Could not open triage file : C:\Program Files (x86)\Windows
Kits\8.0\Debuggers\x64\triage\oca.ini, error 2
TRIAGER: Could not open triage file : C:\Program Files (x86)\Windows
Kits\8.0\Debuggers\x64\winxp\triage.ini, error 2
TRIAGER: Could not open triage file : C:\Program Files (x86)\Windows
Kits\8.0\Debuggers\x64\triage\user.ini, error 2
Connected to Windows 7 7600 x64 target at (Thu Feb 23 00:06:19.491 2012
(UTC + 8:00)), ptr64 TRUE
Loading Kernel Symbols
...............................................................
................................................................
........
Loading User Symbols
Loading unloaded module list
.......Unable to enumerate user-mode unloaded modules, Win32 error 0n30
*******************************************************************************
*
*
* Bugcheck Analysis
*
*
*
*******************************************************************************
DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)
An attempt was made to access a pageable (or completely invalid) address at
an
interrupt request level (IRQL) that is too high. This is usually
caused by drivers using improper addresses.
If kernel debugger is available get stack backtrace.
Arguments:
Arg1: 0000000000000000, memory referenced
Arg2: 0000000000000002, IRQL
Arg3: 0000000000000008, value 0 = read operation, 1 = write operation
Arg4: 0000000000000000, address which referenced memory
Debugging Details:
TRIAGER: Could not open triage file : C:\Program Files (x86)\Windows
Kits\8.0\Debuggers\x64\triage\modclass.ini, error 2
READ_ADDRESS: 0000000000000000
CURRENT_IRQL: 2
FAULTING_IP:
+0
00000000`00000000 ?? ???
PROCESS_NAME: System
DEFAULT_BUCKET_ID: WIN7_DRIVER_FAULT
BUGCHECK_STR: 0xD1
TRAP_FRAME: fffff80000b9cab0 -- (.trap 0xfffff80000b9cab0)
NOTE: The trap frame does not contain all registers.
Some register values may be zeroed or incorrect.
rax=fffffa8005807d30 rbx=0000000000000000 rcx=fffffa8005807d10
rdx=fffffa8005807d10 rsi=0000000000000000 rdi=0000000000000000
rip=0000000000000000 rsp=fffff80000b9cc48 rbp=fffffa8003f714b0
r8=fffffa8005807d30 r9=0000000000000000 r10=fffffa8003f716e0
r11=fffffa8005807d30 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
iopl=0 nv up ei ng nz na po nc
00000000`00000000 ?? ???
Resetting default scope
LAST_CONTROL_TRANSFER: from fffff800027bf3c2 to fffff800026c0620
FAILED_INSTRUCTION_ADDRESS:
+0
00000000`00000000 ?? ???
STACK_TEXT:
fffff80000b9cc48 fffff880010678d3 : 000000000000002a 0000000000000000
00000000ffffffed 000002f6daf4378d : 0x0
fffff80000b9cc50 fffff800026d3a9c : fffff80002842e80 fffffa8000000000
fffffa8003f71578 0000000000000000 : storport!RaidpAdapterDpcRoutine+0x53
fffff80000b9cc90 fffff800026d0d8a : fffff80002842e80 fffff80002850c40
0000000000000000 fffff88001067880 : nt!KiRetireDpcList+0x1bc
fffff80000b9cd40 0000000000000000 : fffff80000b9d000 fffff80000b97000
fffff80000b9cd00 0000000000000000 : nt!KiIdleLoop+0x5a
STACK_COMMAND: .trap 0xfffff80000b9cab0 ; kb
FOLLOWUP_IP:
storport!RaidpAdapterDpcRoutine+53
fffff880`010678d3 ff442448 inc dword ptr [rsp+48h]
SYMBOL_STACK_INDEX: 1
SYMBOL_NAME: storport!RaidpAdapterDpcRoutine+53
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: storport
IMAGE_NAME: storport.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 4d79a403
FAILURE_BUCKET_ID:
X64_0xD1_CODE_AV_NULL_IP_storport!RaidpAdapterDpcRoutine+53
BUCKET_ID: X64_0xD1_CODE_AV_NULL_IP_storport!RaidpAdapterDpcRoutine+53
Followup: MachineOwner
Marvin