|
Prev: KeAcquireSpinLockAtDpcLevel deadlocks MPS
Next: From Sample Code to Production Driver: What to Change in the Sample
From: Nicolas Aspert on 25 Apr 2008 05:16 Hello I am trying to debug a 1394 driver (source available here http://www-2.cs.cmu.edu/~iwan/1394/downloads/index.html). This driver is intended for cameras which are DCAM compliant. When performing an hibernation with a camera connected, a blue screen occurs at resume. I looked at the sample driver in the DDK (1394vdev) and it seems that the power.c has been simply copied from the sample driver. I have been playing with windbg to debug the driver at resume and it gives the following trace: nt!RtlpBreakWithStatusInstruction nt!KiBugCheckDebugBreak+0x19 nt!KeBugCheck2+0x574 nt!KeBugCheckEx+0x1b nt!MmAccessFault+0x9a8 nt!KiTrap0E+0xd0 nt!IoBuildDeviceIoControlRequest+0xf 1394cmdr!t1394_GetGenerationCount(struct _DEVICE_OBJECT * DeviceObject = 0x00d5aeb8, struct _IRP * Irp = 0x00000000, unsigned long * GenerationCount = 0x85d5810c)+0x65 1394cmdr!t1394Cmdr_DeviceSetPowerIrpCompletion(struct _DEVICE_OBJECT * DeviceObject = 0x85d5aeb8, unsigned char MinorFunction = 0x02 '', union _POWER_STATE state = union _POWER_STATE, struct _POWER_COMPLETION_CONTEXT * PowerContext = 0x00000000, struct _IO_STATUS_BLOCK * IoStatus = 0x86430278)+0xb9 nt!PopCompleteRequestIrp+0x55 nt!IopfCompleteRequest+0xa2 1394BUS!Bus1394Power+0xd4 nt!IopfCallDriver+0x31 nt!PopPresentIrp+0x57 nt!PoCallDriver+0x195 1394cmdr!t1394Cmdr_Power(struct _DEVICE_OBJECT * DeviceObject = 0x00000001, struct _IRP * Irp = 0x86430260)+0x202 nt!IopfCallDriver+0x31 nt!PopPresentIrp+0x57 nt!PoCallDriver+0x195 nt!PoRequestPowerIrp+0x129 It seems to me that DEVICE_OBJECT pointer passed to t1394Cmdr_Power is quite likely to be incorrect (0x0000001), and quite different of the adress that was passed before hibernation. Any idea about what to look to understand what happens ? Thanks in advance best regards |