HI,
In my serial port driver i am mapping the hardware resources in PrepareHardware and accessing the device registers in D0Entry. I am enabling the device interrupts by writing to a register in D0Entry.
But when i update my serial driver with a new driver, i occasionally see a crash. Below is the crash dump.
ADDITIONAL_DEBUG_TEXT:
Use '!findthebuild' command to search for the target build information.
If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols.
FAULTING_MODULE: 83412000 nt
DEBUG_FLR_IMAGE_TIMESTAMP: 51c50c11
READ_ADDRESS: unable to get nt!MmSpecialPoolStart
unable to get nt!MmSpecialPoolEnd
unable to get nt!MmPoolCodeStart
unable to get nt!MmPoolCodeEnd
00000019
CURRENT_IRQL: 0
FAULTING_IP:
nt!READ_REGISTER_UCHAR+4
8344a5b4 8a02 mov al,byte ptr [edx]
DEFAULT_BUCKET_ID: VISTA_DRIVER_FAULT
BUGCHECK_STR: 0xA
LAST_CONTROL_TRANSFER: from 8344a5b4 to 83452b7f
STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
83539abc 8344a5b4 badb0d00 00000019 86e45502 nt!Kei386EoiHelper+0x28b7
83539b5c 8c148637 78d53668 00000000 87683284 nt!READ_REGISTER_UCHAR+0x4
83539b78 8344bbac 87683280 872ac990 83539c20 Wdf01000!FxInterrupt::_InterruptThunk+0xa7
00000000 00000000 00000000 00000000 00000000 nt!KeSynchronizeExecution+0x15c
STACK_COMMAND: kb
FOLLOWUP_IP:
Wdf01000!FxInterrupt::_InterruptThunk+a7
8c148637 8ad8 mov bl,al
SYMBOL_STACK_INDEX: 2
SYMBOL_NAME: Wdf01000!FxInterrupt::_InterruptThunk+a7
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: Wdf01000
IMAGE_NAME: Wdf01000.sys
BUCKET_ID: WRONG_SYMBOLS
Followup: MachineOwner
I am sure that i am not accessing any NULL pointer any where in my driver code.
I am trying to acquire lock to synchronize with service routine and accessing device registers through READ_REGISTER_UCHAR at some point in the driver. Perhaps this c
Is it Ok to enable interrupts in D0Entry? Is it better to move it to some other call back which gets invoked later than D0ENtry?