From: Nicolas Aspert on
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