다음을 통해 공유


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: