ACPI!ACPIDetectPdoDevices函数中ACPIGetDevicePresenceSync对节点BAT1的_STA方法的处理到ACPI!SyncEvalObject中的ACPI!RestartContext
1: kd> kc
#
00 ACPI!RunContext
01 ACPI!DispatchCtxtQueue
02 ACPI!StartTimeSlicePassive
03 ACPI!ACPIWorker
04 nt!PspSystemThreadStartup
05 nt!KiThreadStartup
1: kd> dv
pctxt = 0x89564000
pctxtSave = 0xf741d711
pkthSave = 0x00000008
rc = 0n-1990836224
1: kd> dx -r1 ((ACPI!_ctxt *)0x89564000)
((ACPI!_ctxt *)0x89564000) : 0x89564000 [Type: _ctxt *]
[+0x000] dwSig : 0x54585443 [Type: unsigned long]
[+0x004] pbCtxtEnd : 0x89566000 : 0x0 [Type: unsigned char *]
[+0x008] listCtxt [Type: _List]
[+0x010] listQueue [Type: _List]
[+0x018] pplistCtxtQueue : 0x0 [Type: _List * *]
[+0x01c] plistResources : 0x0 [Type: _List *]
[+0x020] dwfCtxt : 0x128 [Type: unsigned long]
[+0x024] pnsObj : 0x899b00f0 [Type: _NSObj *]
[+0x028] pnsScope : 0x899b00f0 [Type: _NSObj *]
[+0x02c] powner : 0x0 [Type: _objowner *]
[+0x030] pcall : 0x0 [Type: _call *]
[+0x034] pnctxt : 0x0 [Type: _nestedctxt *]
[+0x038] dwSyncLevel : 0x0 [Type: unsigned long]
[+0x03c] pbOp : 0x0 [Type: unsigned char *]
[+0x040] Result [Type: _ObjData]
[+0x054] pfnAsyncCallBack : 0xf7407364 [Type: void (__cdecl*)(_NSObj *,long,_ObjData *,void *)]
[+0x058] pdataCallBack : 0x899681d4 [Type: _ObjData *]
[+0x05c] pvContext : 0x899681a8 [Type: void *]
[+0x060] Timer [Type: _KTIMER]
[+0x088] Dpc [Type: _KDPC]
[+0x0a8] pheapCurrent : 0x895640bc [Type: _heap *]
[+0x0ac] CtxtData [Type: _ctxtdata]
[+0x0bc] LocalHeap [Type: _heap]
1: kd> dx -r1 (*((ACPI!_heap *)0x895640bc))
(*((ACPI!_heap *)0x895640bc)) [Type: _heap]
[+0x000] dwSig : 0x50414548 [Type: unsigned long]
[+0x004] pbHeapEnd : 0x89565fe4 : 0x50 [Type: unsigned char *]
[+0x008] pheapHead : 0x895640bc [Type: _heap *]
[+0x00c] pheapNext : 0x0 [Type: _heap *]
[+0x010] pbHeapTop : 0x895640d4 : 0x0 [Type: unsigned char *]
[+0x014] plistFreeHeap : 0x0 [Type: _List *]
[+0x018] Heap [Type: _heapobjhdr]
1: kd> dt framehdr 0x89565fe4
ACPI!FRAMEHDR
+0x000 dwSig : 0x54534f50
+0x004 dwLen : 0x1c
+0x008 dwfFrame : 0
+0x00c pfnParse : 0xf741ef2b long ACPI!ProcessEvalObj+0
1: kd> kc
#
00 ACPI!AsyncCallBack
01 ACPI!RunContext
02 ACPI!DispatchCtxtQueue
03 ACPI!StartTimeSlicePassive
04 ACPI!ACPIWorker
05 nt!PspSystemThreadStartup
06 nt!KiThreadStartup
1: kd> dv
pctxt = 0x89564000
rcCtxt = 0n0
pfnAsyncCallBack = 0x89564000
pdataCallBack = 0x00000008
1: kd> dt ACPI!_ctxt 0x89564000
+0x000 dwSig : 0x54585443
+0x004 pbCtxtEnd : 0x89566000 ""
+0x008 listCtxt : _List
+0x010 listQueue : _List
+0x018 pplistCtxtQueue : (null)
+0x01c plistResources : (null)
+0x020 dwfCtxt : 0x120
+0x024 pnsObj : 0x899b00f0 _NSObj
+0x028 pnsScope : 0x899b00f0 _NSObj
+0x02c powner : (null)
+0x030 pcall : (null)
+0x034 pnctxt : (null)
+0x038 dwSyncLevel : 0
+0x03c pbOp : (null)
+0x040 Result : _ObjData
+0x054 pfnAsyncCallBack : 0xf7407364 void ACPI!ACPIGetWorkerForInteger+0
+0x058 pdataCallBack : 0x899681d4 _ObjData
+0x05c pvContext : 0x899681a8 Void
+0x060 Timer : _KTIMER
+0x088 Dpc : _KDPC
+0x0a8 pheapCurrent : 0x895640bc _heap
+0x0ac CtxtData : _ctxtdata
+0x0bc LocalHeap : _heap
1: kd> kc
#
00 ACPI!ACPIGetWorkerForInteger
01 ACPI!AsyncCallBack
02 ACPI!RunContext
03 ACPI!DispatchCtxtQueue
04 ACPI!StartTimeSlicePassive
05 ACPI!ACPIWorker
06 nt!PspSystemThreadStartup
07 nt!KiThreadStartup
1: kd> dv
AcpiObject = 0x899b00f0
Status = 0n0
Result = 0x899681d4
Context = 0x899681a8
freeData = 0x00 ''
1: kd> db 0x899b00f0
899b00f0 ac 00 9b 89 90 01 9b 89-ac ff 9a 89 00 00 00 00 ................
899b0100 5f 41 44 52 30 f3 9a 89-ac 00 9b 89 00 00 01 00 _ADR0...........
1: kd> dx -r1 ((ACPI!_NSObj *)0x899b00f0)
((ACPI!_NSObj *)0x899b00f0) : 0x899b00f0 [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x899affac [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x0 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x5244415f [Type: unsigned long]
[+0x014] hOwner : 0x899af330 [Type: void *]
[+0x018] pnsOwnedNext : 0x899b00ac [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x0 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
1: kd> db 0x899affac
899affac 4c ff 9a 89 ac 40 9b 89-f0 f0 9a 89 24 00 9b 89 L....@......$...
899affbc 50 43 49 30 30 f3 9a 89-4c ff 9a 89 00 00 06 00 PCI00...L.......
1: kd> dx -r1 (*((ACPI!_ObjData *)0x899b010c))
(*((ACPI!_ObjData *)0x899b010c)) [Type: _ObjData]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x1 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0x0 [Type: unsigned long]
[+0x008] uipDataValue : 0x0 [Type: unsigned long]
[+0x008] pnsAlias : 0x0 [Type: _NSObj *]
[+0x008] pdataAlias : 0x0 [Type: _ObjData *]
[+0x008] powner : 0x0 [Type: void *]
[+0x00c] dwDataLen : 0x0 [Type: unsigned long]
[+0x010] pbDataBuff : 0x0 [Type: unsigned char *]
Device (PCI0)
{
Name (_HID, EisaId ("PNP0A03")) // _HID: Hardware ID
Name (_CID, EisaId ("PNP0A08")) // _CID: Compatible ID
Name (_BBN, 0x00) // _BBN: BIOS Bus Number
Name (_ADR, 0x00) // _ADR: Address
1: kd> dt ACPI_GET_REQUEST 0x899681a8
+0x000 Flags : 0x48040402
+0x000 UFlags : __unnamed
+0x004 ObjectID : 0x5244415f
+0x008 ListEntry : _LIST_ENTRY [ 0xf743b940 - 0x89968648 ]
+0x010 DeviceExtension : (null)
+0x014 AcpiObject : 0x899affac _NSObj
+0x018 CallBackRoutine : 0xf740ceea void ACPI!GetPciAddressWorker+0
+0x01c CallBackContext : 0x89639b78 Void
+0x020 Buffer : 0x89639b90 -> (null)
+0x024 BufferSize : (null)
+0x028 Status : 0n0
+0x02c ResultData : _ObjData
1: kd> kc
#
00 ACPI!GetPciAddressWorker
01 ACPI!ACPIGetWorkerForInteger
02 ACPI!AsyncCallBack
03 ACPI!RunContext
04 ACPI!DispatchCtxtQueue
05 ACPI!StartTimeSlicePassive
06 ACPI!ACPIWorker
07 nt!PspSystemThreadStartup
08 nt!KiThreadStartup
1: kd> dv
AcpiObject = 0x899b00f0
Status = 0n0
Result = 0x00000000
Context = 0x89639b78
buffer = unsigned char [64] ""
1: kd> dt GET_ADDRESS_CONTEXT 0x89639b78
ACPI!GET_ADDRESS_CONTEXT
+0x000 PciObject : 0x899affac _NSObj
+0x004 Bus : 0x899a9640 ""
+0x008 Slot : 0x899a963c _PCI_SLOT_NUMBER
+0x00c ParentBus : 0 ''
+0x010 ParentSlot : _PCI_SLOT_NUMBER
+0x014 Flags : 8 #define PCISUPP_CHECKED_ADR 8
+0x018 Address : 0
+0x01c BaseBusNumber : 0
+0x020 RunCompletion : 0n0
+0x024 CompletionRoutine : 0xf740d62c void ACPI!PciConfigSpaceHandlerWorker+0
+0x028 CompletionContext : 0x899a9608 Void
#define PCISUPP_GOT_SLOT_INFO 0x100
if (!(state->Flags & PCISUPP_GOT_SLOT_INFO)) {
//
// Build a PCI_SLOT_NUMBER out of the integer returned
// from the interpretter.
//
state->Slot->u.bits.FunctionNumber = (state->Address) & 0x7;
state->Slot->u.bits.DeviceNumber = ( (state->Address) >> 16) & 0x1f;
state->Flags |= PCISUPP_GOT_SLOT_INFO;
}
//
// Is there a _BBN to run?
//
tempObj = ACPIAmliGetNamedChild(bus, PACKED_BBN);
if (tempObj) {
//
// This device must be the child of a root PCI bus.
//
if (!(state->Flags & PCISUPP_CHECKED_BBN)) {
state->Flags |= PCISUPP_CHECKED_BBN;
status = ACPIGetNSIntegerAsync(
#define PCISUPP_CHECKED_BBN 0x2000
1: kd> kc
#
00 ACPI!ACPIGet
01 ACPI!GetPciAddressWorker
02 ACPI!ACPIGetWorkerForInteger
03 ACPI!AsyncCallBack
04 ACPI!RunContext
05 ACPI!DispatchCtxtQueue
06 ACPI!StartTimeSlicePassive
07 ACPI!ACPIWorker
08 nt!PspSystemThreadStartup
09 nt!KiThreadStartup
1: kd> r
eax=00000000 ebx=f743b938 ecx=00000000 edx=00000000 esi=89922590 edi=89922598
eip=f74078d8 esp=f791abf0 ebp=f791ac34 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
ACPI!ACPIGet+0x220:
f74078d8 e83b2bffff call ACPI!ACPIAmliGetNamedChild (f73fa418)
1: kd> db f791abf0
f791abf0 ac ff 9a 89 5f 42 42 4e-03 01 00 00 78 9b 63 89 ...._BBN....x.c.
1: kd> gu
eax=899b00ac ebx=f743b938 ecx=4e42425f edx=00000000 esi=89922590 edi=89922598
eip=f74078dd esp=f791abf8 ebp=f791ac34 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!ACPIGet+0x225:
f74078dd 85c0 test eax,eax
1: kd> kc
#
00 ACPI!AMLIAsyncEvalObject
01 ACPI!ACPIGet
02 ACPI!GetPciAddressWorker
03 ACPI!ACPIGetWorkerForInteger
04 ACPI!AsyncCallBack
05 ACPI!RunContext
06 ACPI!DispatchCtxtQueue
07 ACPI!StartTimeSlicePassive
08 ACPI!ACPIWorker
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
1: kd> dv
pns = 0x899b00ac
pdataResult = 0x899225bc
icArgs = 0n0
pdataArgs = 0x00000000
pfnAsyncCallBack = 0xf7407364
pvContext = 0x89922590
pHData = 0x00000008
1: kd> db 0x899b00ac
899b00ac 68 00 9b 89 f0 00 9b 89-ac ff 9a 89 00 00 00 00 h...............
899b00bc 5f 42 42 4e 30 f3 9a 89-68 00 9b 89 00 00 01 00 _BBN0...h.......
1: kd> kc
#
00 ACPI!AsyncEvalObject
01 ACPI!AMLIAsyncEvalObject
02 ACPI!ACPIGet
03 ACPI!GetPciAddressWorker
04 ACPI!ACPIGetWorkerForInteger
05 ACPI!AsyncCallBack
06 ACPI!RunContext
07 ACPI!DispatchCtxtQueue
08 ACPI!StartTimeSlicePassive
09 ACPI!ACPIWorker
0a nt!PspSystemThreadStartup
0b nt!KiThreadStartup
1: kd> dv
pns = 0x899b00ac
pdataResult = 0x899225bc
icArgs = 0n0
pdataArgs = 0x00000000
pfnAsyncCallBack = 0xf7407364
pvContext = 0x89922590
1: kd> kc
#
00 ACPI!RestartContext
01 ACPI!AsyncEvalObject
02 ACPI!AMLIAsyncEvalObject
03 ACPI!ACPIGet
04 ACPI!GetPciAddressWorker
05 ACPI!ACPIGetWorkerForInteger
06 ACPI!AsyncCallBack
07 ACPI!RunContext
08 ACPI!DispatchCtxtQueue
09 ACPI!StartTimeSlicePassive
0a ACPI!ACPIWorker
0b nt!PspSystemThreadStartup
0c nt!KiThreadStartup
1: kd> dv
pctxt = 0x89560000
fDelayExecute = 0x00 ''
1: kd> kc
#
00 ACPI!InsertReadyQueue
01 ACPI!RestartContext
02 ACPI!AsyncEvalObject
03 ACPI!AMLIAsyncEvalObject
04 ACPI!ACPIGet
05 ACPI!GetPciAddressWorker
06 ACPI!ACPIGetWorkerForInteger
07 ACPI!AsyncCallBack
08 ACPI!RunContext
09 ACPI!DispatchCtxtQueue
0a ACPI!StartTimeSlicePassive
0b ACPI!ACPIWorker
0c nt!PspSystemThreadStartup
0d nt!KiThreadStartup
1: kd> dv
pctxt = 0x89560000
fDelayExecute = 0x00 ''
1: kd> x acpi!greadyqueue
f743a928 ACPI!gReadyQueue = struct _ctxtq
1: kd> dx -r1 (*((ACPI!_ctxtq *)0xf743a928))
(*((ACPI!_ctxtq *)0xf743a928)) [Type: _ctxtq]
[+0x000] dwfCtxtQ : 0x0 [Type: unsigned long]
[+0x004] pkthCurrent : 0x89981ca0 [Type: _KTHREAD *]
[+0x008] pctxtCurrent : 0x89564000 [Type: _ctxt *]
[+0x00c] plistCtxtQ : 0x0 [Type: _List *]
[+0x010] dwmsTimeSliceLength : 0x64 [Type: unsigned long]
[+0x014] dwmsTimeSliceInterval : 0x64 [Type: unsigned long]
[+0x018] pfnPauseCallback : 0x0 [Type: void (__cdecl*)(void *)]
[+0x01c] PauseCBContext : 0x0 [Type: void *]
[+0x020] mutCtxtQ [Type: _mutex]
[+0x028] Timer [Type: _KTIMER]
[+0x050] DpcStartTimeSlice [Type: _KDPC]
[+0x070] DpcExpireTimeSlice [Type: _KDPC]
[+0x090] WorkItem [Type: _WORK_QUEUE_ITEM]
else
{
//
// Insert the context in the ready queue.
//
ASSERT(!(pctxt->dwfCtxt & (CTXTF_IN_READYQ | CTXTF_RUNNING)));
LOGSCHEDEVENT('QCTX', (ULONG_PTR)pctxt, (ULONG_PTR)
(pctxt->pnctxt? pctxt->pnctxt->pnsObj: pctxt->pnsObj),
(ULONG_PTR)pctxt->pbOp);
if (!(pctxt->dwfCtxt & CTXTF_IN_READYQ))
{
pctxt->dwfCtxt |= CTXTF_IN_READYQ;
ListInsertTail(&pctxt->listQueue, &gReadyQueue.plistCtxtQ);
pctxt->pplistCtxtQueue = &gReadyQueue.plistCtxtQ;
}
pctxt->dwfCtxt |= CTXTF_NEED_CALLBACK;
rc = AMLISTA_PENDING;
}
1: kd> kc
#
00 ACPI!RunContext
01 ACPI!DispatchCtxtQueue
02 ACPI!StartTimeSlicePassive
03 ACPI!ACPIWorker
04 nt!PspSystemThreadStartup
05 nt!KiThreadStartup
1: kd> dv
pctxt = 0x89560000
pctxtSave = 0xf741d711
pkthSave = 0x00000008
rc = 0n-1990852608
1: kd> kc
#
00 ACPI!AsyncCallBack
01 ACPI!RunContext
02 ACPI!DispatchCtxtQueue
03 ACPI!StartTimeSlicePassive
04 ACPI!ACPIWorker
05 nt!PspSystemThreadStartup
06 nt!KiThreadStartup
1: kd> dv
pctxt = 0x89560000
rcCtxt = 0n0
pfnAsyncCallBack = 0x89560000
pdataCallBack = 0x00000008
1: kd> kc
#
00 ACPI!ACPIGetWorkerForInteger
01 ACPI!AsyncCallBack
02 ACPI!RunContext
03 ACPI!DispatchCtxtQueue
04 ACPI!StartTimeSlicePassive
05 ACPI!ACPIWorker
06 nt!PspSystemThreadStartup
07 nt!KiThreadStartup
1: kd> dv
AcpiObject = 0x899b00ac
Status = 0n0
Result = 0x899225bc
Context = 0x89922590
1: kd> dt ACPI_GET_REQUEST 0x89922590
+0x000 Flags : 0x48040002
+0x000 UFlags : __unnamed
+0x004 ObjectID : 0x4e42425f
+0x008 ListEntry : _LIST_ENTRY [ 0xf743b940 - 0x89968648 ]
+0x010 DeviceExtension : (null)
+0x014 AcpiObject : 0x899affac _NSObj
+0x018 CallBackRoutine : 0xf740ceea void ACPI!GetPciAddressWorker+0
+0x01c CallBackContext : 0x89639b78 Void
+0x020 Buffer : 0x89639b94 -> (null)
+0x024 BufferSize : (null)
+0x028 Status : 0n0
+0x02c ResultData : _ObjData
1: kd> kc
#
00 ACPI!GetPciAddressWorker
01 ACPI!ACPIGetWorkerForInteger
02 ACPI!AsyncCallBack
03 ACPI!RunContext
04 ACPI!DispatchCtxtQueue
05 ACPI!StartTimeSlicePassive
06 ACPI!ACPIWorker
07 nt!PspSystemThreadStartup
08 nt!KiThreadStartup
1: kd> dv
AcpiObject = 0x899b00ac
Status = 0n0
Result = 0x00000000
Context = 0x89639b78
buffer = unsigned char [64] ""
1: kd> dt GET_ADDRESS_CONTEXT 0x89639b78
ACPI!GET_ADDRESS_CONTEXT
+0x000 PciObject : 0x899affac _NSObj
+0x004 Bus : 0x899a9640 ""
+0x008 Slot : 0x899a963c _PCI_SLOT_NUMBER
+0x00c ParentBus : 0 ''
+0x010 ParentSlot : _PCI_SLOT_NUMBER
+0x014 Flags : 0x2108
+0x018 Address : 0
+0x01c BaseBusNumber : 0
+0x020 RunCompletion : 0n1
+0x024 CompletionRoutine : 0xf740d62c void ACPI!PciConfigSpaceHandlerWorker+0
+0x028 CompletionContext : 0x899a9608 Void
1: kd> kc
#
00 ACPI!PciConfigSpaceHandlerWorker
01 ACPI!GetPciAddressWorker
02 ACPI!ACPIGetWorkerForInteger
03 ACPI!AsyncCallBack
04 ACPI!RunContext
05 ACPI!DispatchCtxtQueue
06 ACPI!StartTimeSlicePassive
07 ACPI!ACPIWorker
08 nt!PspSystemThreadStartup
09 nt!KiThreadStartup
1: kd> dv
AcpiObject = 0x899b00ac
CompletionStatus = 0n0
Result = 0x00000000
Context = 0x899a9608
1: kd> dt PCI_CONFIG_STATE 0x899a9608
ACPI!PCI_CONFIG_STATE
+0x000 AccessType : 1 写PCI配置空间
+0x004 OpRegion : 0x899b0b50 _NSObj
+0x008 Address : 0xd8
+0x00c Size : 4
+0x010 Data : 0x89569c28 -> 0x40e98101
+0x014 Context : 0
+0x018 CompletionHandler : 0xf7420914 Void
+0x01c CompletionContext : 0x895680ac Void
+0x020 PciObj : 0x899affac _NSObj
+0x024 ParentObj : (null)
+0x028 CompletionHandlerType : 0
+0x02c Flags : 0x100
+0x030 RunCompletion : 0n0
+0x034 Slot : _PCI_SLOT_NUMBER
+0x038 Bus : 0 ''
+0x039 IsPciDeviceResult : 0 ''
#define PCISUPP_GOT_SCOPE 0x1000
#define PCISUPP_GOT_SLOT_INFO 0x100
1: kd> g
Breakpoint 47 hit
eax=00000000 ebx=899a9608 ecx=00000004 edx=00000028 esi=00000000 edi=00000000
eip=804f2676 esp=f791abdc ebp=f791ac48 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
hal!HalSetBusDataByOffset:
804f2676 55 push ebp
1: kd> dv
BusDataType = PCIConfiguration (0n4)
BusNumber = 0
SlotNumber = 0
Buffer = 0x89569c28
Offset = 0xd8
Length = 4
bus = struct _BUS_HANDLER
1: kd> dd 0x89569c28
89569c28 40e98101 ffffffff 00000000 00000000
0: kd> p
Breakpoint 42 hit
eax=00000001 ebx=899a9608 ecx=8997e000 edx=00002707 esi=89568000 edi=f7433f60
eip=f74207d4 esp=f791abc8 ebp=f791abec iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
ACPI!RestartContext:
f74207d4 55 push ebp
1: kd> kc
#
00 ACPI!RestartContext
01 ACPI!RestartCtxtCallback
02 ACPI!PciConfigSpaceHandlerWorker
03 ACPI!GetPciAddressWorker
04 ACPI!ACPIGetWorkerForInteger
05 ACPI!AsyncCallBack
06 ACPI!RunContext
07 ACPI!DispatchCtxtQueue
08 ACPI!StartTimeSlicePassive
09 ACPI!ACPIWorker
0a nt!PspSystemThreadStartup
0b nt!KiThreadStartup
1: kd> dv
pctxt = 0x89568000
fDelayExecute = 0x01 ''
1: kd> dx -r1 ((ACPI!_ctxt *)0x89568000)
((ACPI!_ctxt *)0x89568000) : 0x89568000 [Type: _ctxt *]
[+0x000] dwSig : 0x54585443 [Type: unsigned long]
[+0x004] pbCtxtEnd : 0x8956a000 : 0x0 [Type: unsigned char *]
[+0x008] listCtxt [Type: _List]
[+0x010] listQueue [Type: _List]
[+0x018] pplistCtxtQueue : 0x0 [Type: _List * *]
[+0x01c] plistResources : 0x89568198 [Type: _List *]
[+0x020] dwfCtxt : 0x20 [Type: unsigned long]
[+0x024] pnsObj : 0x899b464c [Type: _NSObj *]
[+0x028] pnsScope : 0x899b40ac [Type: _NSObj *]
[+0x02c] powner : 0x895681ac [Type: _objowner *]
[+0x030] pcall : 0x89569d18 [Type: _call *]
[+0x034] pnctxt : 0x0 [Type: _nestedctxt *]
[+0x038] dwSyncLevel : 0xf [Type: unsigned long]
[+0x03c] pbOp : 0x899b4122 : 0x0 [Type: unsigned char *]
[+0x040] Result [Type: _ObjData]
[+0x054] pfnAsyncCallBack : 0xf741eeb5 [Type: void (__cdecl*)(_NSObj *,long,_ObjData *,void *)]
[+0x058] pdataCallBack : 0x8996866c [Type: _ObjData *]
[+0x05c] pvContext : 0xf789a160 [Type: void *]
[+0x060] Timer [Type: _KTIMER]
[+0x088] Dpc [Type: _KDPC]
[+0x0a8] pheapCurrent : 0x895680bc [Type: _heap *]
[+0x0ac] CtxtData [Type: _ctxtdata]
[+0x0bc] LocalHeap [Type: _heap]
1: kd> dx -r1 (*((ACPI!_heap *)0x895680bc))
(*((ACPI!_heap *)0x895680bc)) [Type: _heap]
[+0x000] dwSig : 0x50414548 [Type: unsigned long]
[+0x004] pbHeapEnd : 0x89569c08 : 0x57 [Type: unsigned char *]
[+0x008] pheapHead : 0x895680bc [Type: _heap *]
[+0x00c] pheapNext : 0x0 [Type: _heap *]
[+0x010] pbHeapTop : 0x895681f0 : 0x0 [Type: unsigned char *]
[+0x014] plistFreeHeap : 0x0 [Type: _List *]
[+0x018] Heap [Type: _heapobjhdr]
1: kd> dt framehdr 0x89569c08
ACPI!FRAMEHDR
+0x000 dwSig : 0x41435257
+0x004 dwLen : 0x30
+0x008 dwfFrame : 3
+0x00c pfnParse : 0xf7417c1d long ACPI!WriteCookAccess+0
0: kd> kc
#
00 ACPI!RunContext
01 ACPI!InsertReadyQueue
02 ACPI!RestartContext
03 ACPI!SyncEvalObject
04 ACPI!AMLIEvalNameSpaceObject
05 ACPI!ACPIGet
06 ACPI!ACPIDetectPdoDevices
07 ACPI!ACPIRootIrpQueryBusRelations
08 ACPI!ACPIRootIrpQueryDeviceRelations
09 ACPI!ACPIDispatchIrp
0a nt!IofCallDriver
0b nt!IopSynchronousCall
0c nt!IopQueryDeviceRelations
0d nt!PipEnumerateDevice
0e nt!PipProcessDevNodeTree
0f nt!PipDeviceActionWorker
10 nt!PipRequestDeviceAction
11 nt!IopInitializeBootDrivers
12 nt!IoInitSystem
13 nt!Phase1Initialization
14 nt!PspSystemThreadStartup
15 nt!KiThreadStartup
0: kd> dv
pctxt = 0x89568000
pctxtSave = 0xf741d711
pkthSave = 0x00000008
rc = 0n-1990819840
0: kd> x acpi!greadyqueue
f743a928 ACPI!gReadyQueue = struct _ctxtq
0: kd> dx -r1 (*((ACPI!_ctxtq *)0xf743a928))
(*((ACPI!_ctxtq *)0xf743a928)) [Type: _ctxtq]
[+0x000] dwfCtxtQ : 0x0 [Type: unsigned long]
[+0x004] pkthCurrent : 0x899a1020 [Type: _KTHREAD *]
[+0x008] pctxtCurrent : 0x89568000 [Type: _ctxt *]
[+0x00c] plistCtxtQ : 0x0 [Type: _List *]
[+0x010] dwmsTimeSliceLength : 0x64 [Type: unsigned long]
[+0x014] dwmsTimeSliceInterval : 0x64 [Type: unsigned long]
[+0x018] pfnPauseCallback : 0x0 [Type: void (__cdecl*)(void *)]
[+0x01c] PauseCBContext : 0x0 [Type: void *]
[+0x020] mutCtxt
NTSTATUS LOCAL SyncEvalObject(PNSOBJ pns, POBJDATA pdataResult, int icArgs,
POBJDATA pdataArgs)
{
while (rc == AMLISTA_PENDING)
{
if ((rc = KeWaitForSingleObject(&seEvalObj.Event, Executive,
KernelMode, FALSE,
(PLARGE_INTEGER)NULL)) ==
STATUS_SUCCESS)
{
if (seEvalObj.rcCompleted == AMLISTA_CONTINUE)
{
rc = RestartContext(seEvalObj.pctxt, FALSE);
}
else
{
rc = AMLIERR(seEvalObj.rcCompleted);
}
}
else
{
rc = AMLI_LOGERR(AMLIERR_FATAL,
("SyncEvalObject: object synchronization failed (rc=%x)",
rc));
}
}