Hi.
I have a problem in power management which am currently investigating. In a
nutshell, a child device tries bringing its stack back to D0 in order to
enable/disable wakes when system is transitioning to Sx. This is triggered
when receiving the Sx IRP which is sent down the stack after setting a
completion routine to bring the stack back to D0, set wake registers and then
transitioning it back to D3. While this works fine under 2k and XP, I get
failures under Vista (only if DTM Client is installed) and Server2k8 where
parent WDF driver fails to connect interrupts on transition to D0 (possibly
because a Sx IRP has been issued before?).
I'll probably log in more details on this later on. But while investigating
this problem I came across few strange WDF logs. As mentioned, I can see in
some cases the parent is not able to connect interrupts, thus failing
transition to D0. However when the child's completion routine is called the
IoStatus block shows a successful status which isn't what I'd expected.
Also I came across the following which is a bit more strange as you don't
expect a device to succeed powering up when it's parent has failed this
request:
Dumping WDFDEVICE 0x7b47e940
=================================
WDM PDEVICE_OBJECTs: self 848d3030
Pnp state: 119 ( WdfDevStatePnpStarted )
Power state: 32b ( WdfDevStatePowerStartSelfManagedIo )
Power Pol state: 502 ( WdfDevStatePwrPolStartingSucceeded )
Parent WDFDEVICE 7b794620
Parent states:
Pnp state: 119 ( WdfDevStatePnpStarted )
Power state: 33e ( WdfDevStatePowerReportPowerUpFailed )
Power Pol state: 56e ( WdfDevStatePwrPolDevicePowerRequestFailed )
Any advice on this is highly appreciated.
Thanks,
DaveH