第一次调用ACPI!ACPIBuildProcessQueueList时ACPI!AcpiBuildDeviceList中项的来源和ACPI!ACPIBuildDeviceRequest函数有关-重要
0: kd> gu
Breakpoint 19 hit
eax=00000000 ebx=ffdff120 ecx=ffdff988 edx=ffdff980 esi=f73fc5b2 edi=ffdff980
eip=f73fc5b2 esp=f789efa0 ebp=f789eff4 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!ACPIBuildDeviceDpc:
f73fc5b2 53 push ebx
0: kd> kc
#
00 ACPI!ACPIBuildDeviceDpc
01 nt!KiRetireDpcList
02 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
03 0x0
0: kd> x acpi!AcpiBuildDpcRunning
f743b89e ACPI!AcpiBuildDpcRunning = 0x00 ''
if (AcpiBuildDpcRunning) {
//
// The DPC is already running, so we need to exit now
//
KeReleaseSpinLockFromDpcLevel( &AcpiBuildQueueLock );
return;
}
//
// Remember that the DPC is now running
//
AcpiBuildDpcRunning = TRUE;
//
// We must try to do *some* work
//
do {
//
// Assume that we won't do any work
//
AcpiBuildWorkDone = FALSE;
//
// If there are items in the Request Queue, then move them to the
// proper list
//
if (!IsListEmpty( &AcpiBuildQueueList ) ) {
//
// Sort the list
//分类一下!!!
ACPIBuildProcessQueueList();
}
0: kd> kc
#
00 ACPI!ACPIBuildProcessQueueList
01 ACPI!ACPIBuildDeviceDpc
02 nt!KiRetireDpcList
03 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
04 0x0
acpi!AcpiBuildQueueList
0: kd> x acpi!AcpiBuildQueueList
f743b890 ACPI!AcpiBuildQueueList = struct _LIST_ENTRY [ 0x89906de0 - 0x89906e30 ]
0: kd> dx -r1 (*((ACPI!_LIST_ENTRY *)0xf743b890))
(*((ACPI!_LIST_ENTRY *)0xf743b890)) [Type: _LIST_ENTRY]
[+0x000] Flink :0x89906de0[Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89906e30 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x89906de0)
((ACPI!_LIST_ENTRY *)0x89906de0) : 0x89906de0 [Type: _LIST_ENTRY *] 1
[+0x000] Flink :0x89996208[Type: _LIST_ENTRY *]
[+0x004] Blink : 0xf743b890 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x89996208)
((ACPI!_LIST_ENTRY *)0x89996208) : 0x89996208 [Type: _LIST_ENTRY *]
[+0x000] Flink :0x89986158[Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89906de0 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x89986158)
((ACPI!_LIST_ENTRY *)0x89986158) : 0x89986158 [Type: _LIST_ENTRY *]
[+0x000] Flink :0x899841d8[Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89996208 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x899841d8)
((ACPI!_LIST_ENTRY *)0x899841d8) : 0x899841d8 [Type: _LIST_ENTRY *]
[+0x000] Flink :0x89984188[Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89986158 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x89984188)
((ACPI!_LIST_ENTRY *)0x89984188) : 0x89984188 [Type: _LIST_ENTRY *]
[+0x000] Flink :0x89984138[Type: _LIST_ENTRY *]
[+0x004] Blink : 0x899841d8 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x89984138)
((ACPI!_LIST_ENTRY *)0x89984138) : 0x89984138 [Type: _LIST_ENTRY *]
[+0x000] Flink : 0x899c21d8 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89984188 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x899c21d8)
((ACPI!_LIST_ENTRY *)0x899c21d8) : 0x899c21d8 [Type: _LIST_ENTRY *]
[+0x000] Flink : 0x899c2188 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x89984138 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x899c2188)
((ACPI!_LIST_ENTRY *)0x899c2188) : 0x899c2188 [Type: _LIST_ENTRY *]
[+0x000] Flink : 0x899c2138 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x899c21d8 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x899c2138)
((ACPI!_LIST_ENTRY *)0x899c2138) : 0x899c2138 [Type: _LIST_ENTRY *]
[+0x000] Flink : 0x89996ba0 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x899c2188 [Type: _LIST_ENTRY *]
0: kd> dx -r1 ((ACPI!_LIST_ENTRY *)0x89996ba0)
((ACPI!_LIST_ENTRY *)0x89996ba0) : 0x89996ba0 [Type: _LIST_ENTRY *] 10
[+0x000] Flink : 0x89996b50 [Type: _LIST_ENTRY *]
[+0x004] Blink : 0x899c2138 [Type: _LIST_ENTRY *]
0: kd> t
eax=00000002 ebx=80afae90 ecx=f743b898 edx=ffdff980 esi=f743b898 edi=ffdff980
eip=f73fbad0 esp=f789ef90 ebp=f789eff4 iopl=0 nv up ei ng nz na pe cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000287
ACPI!ACPIBuildProcessQueueList:
f73fbad0 56 push esi
0: kd> kc
#
00 ACPI!ACPIBuildProcessQueueList
01 ACPI!ACPIBuildDeviceDpc
02 nt!KiRetireDpcList
03 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
04 0x0
0: kd> dv
0: kd> dt ACPI_BUILD_REQUEST 0x89906e30
+0x000 ListEntry : _LIST_ENTRY [ 0xf743b890 - 0x89907358 ]
+0x008 Signature : 0x5f534750
+0x00c Flags : 0x100c
+0x00c UFlags : __unnamed
+0x010 WorkDone : 3
+0x014 CurrentWorkDone : 0
+0x018 NextWorkDone : 0
+0x01c BuildContext : 0x89981a18 Void
+0x020 Status : 0n0
+0x024 CurrentObject : (null)
+0x028 CallBack : (null)
+0x02c CallBackContext : (null)
+0x030 DeviceRequest : __unnamed
+0x030 RunRequest : __unnamed
+0x030 SynchronizeRequest : __unnamed
+0x044 Integer : 0xf743b870
+0x044 String : 0xf743b870 "p???"
+0x044 TargetListEntry : 0xf743b870 _LIST_ENTRY [