Changes to !poreqlist
I posted about !poaction and !poreqlist about a year ago. I tend to use these extensions whenever I am debugging a power related issue in the framework. A few months ago, I ran !poreqlist and got the following output
0: kd> !poreqlist All active Power Irps from PoRequestPowerIrp PopReqestedPowerIrpList FieldOffset = 00000004
Which is not what I expected to see! It appeared to be broken :(. (See the aforementioned previous posting on what the output should have looked like). The output refered to PopRequestedPowerIrpList, so I went into the kernel power manager code to find the variable...but it was gone! Well, that would explain why the extension didn't work :). Just as a sanity check, I looked at the Server 2003 sources and did find this variable, so obviously a change was made for Vista (the related changes are unimportant for this posting).
What I really wanted to know is if I could still get the pending power IRP list in a Vista debug sesssion. After some digging around in the !poreqlist extension's source, I found what I was looking for. !poaction (which is implemented in the same file) now contains the pending IRP list as well as its original output. PopIrpList replaced PopRequestedPowerIrpList. This was executed while the machine was in S0:
0: kd> !poaction PopAction: 818fc7d8 State..........: 0 - Idle Updates........: 0 Action.........: None Lightest State.: Unspecified Flags..........: 10000003 QueryApps|UIAllowed Irp minor......: ?? System State...: Unspecified Hiber Context..: 00000000 Allocated power irps (PopIrpList - 81909a60) IRP: 8452b5e8 (wait/wake), PDO: 83f509c8 IRP: 845dfa98 (wait/wake), PDO: 83f4f4c0 IRP: 845cd820 (wait/wake), PDO: 8460b6a8 Irp worker threads (PopIrpThreadList - 819094e0) THREAD: 83b6bad0 (static) THREAD: 83b6bd78 (static) Threads with non-zero thread execution state attributes: