ACPI!device后ACPI!Name函数建立子节点对象
0: kd> db 0xf74c8cbb-80
f74c8c3b 5f 53 42 5f 50 43 49 30-49 53 41 5f 4c 4e 4b 41 _SB_PCI0ISA_LNKA
f74c8c4b 0a 00 12 1e 04 0c ff ff-07 00 0a 01 5c 2f 04 5f ............\/._
f74c8c5b 53 42 5f 50 43 49 30 49-53 41 5f 4c 4e 4b 42 0a SB_PCI0ISA_LNKB.
f74c8c6b 00 12 1e 04 0c ff ff 07-00 0a 02 5c 2f 04 5f 53 ...........\/._S
f74c8c7b 42 5f 50 43 49 30 49 53-41 5f 4c 4e 4b 43 0a 00 B_PCI0ISA_LNKC..
f74c8c8b 12 1e 04 0c ff ff 07 00-0a 03 5c 2f 04 5f 53 42 ..........\/._SB
f74c8c9b 5f 50 43 49 30 49 53 41-5f 4c 4e 4b 44 0a 00 5b _PCI0ISA_LNKD..[
f74c8cab 82 0f 41 47 50 5f 08 5f-41 44 52 0c 00 00 01 00 ..AGP_._ADR.....
f74c8c9b 5b _PCI0ISA_LNKD..[
f74c8cab 82 0f 41 47 50 5f 08 5f-41 44 52 0c 00 00 01 00 ..AGP_._ADR.....
NTSTATUS LOCAL Name(PCTXT pctxt, PTERM pterm)
{
TRACENAME("NAME")
NTSTATUS rc = STATUS_SUCCESS;
ENTER(2, ("Name(pctxt=%x,pbOp=%x,pterm=%x)\n", pctxt, pctxt->pbOp, pterm));
ASSERT(pterm->pdataArgs[0].dwDataType == OBJTYPE_STRDATA);
if ((rc = CreateNameSpaceObject(pctxt->pheapCurrent,
(PSZ)pterm->pdataArgs[0].pbDataBuff,
pctxt->pnsScope, pctxt->powner,
&pterm->pnsObj, 0)) == STATUS_SUCCESS)
{
MoveObjData(&pterm->pnsObj->ObjData, &pterm->pdataArgs[1]);
}
0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997ddc4
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ctxt *)0x8997c000)
((ACPI!_ctxt *)0x8997c000) : 0x8997c000 [Type: _ctxt *]
+0x000\] dwSig : 0x54585443 \[Type: unsigned long
+0x004\] pbCtxtEnd : 0x8997e000 : 0x54 \[Type: unsigned char \*
+0x008\] listCtxt \[Type: _List
+0x010\] listQueue \[Type: _List
+0x018\] pplistCtxtQueue : 0x0 \[Type: _List \* \*
+0x01c\] plistResources : 0x0 \[Type: _List \*
+0x020\] dwfCtxt : 0x10 \[Type: unsigned long
+0x024\] pnsObj : 0x0 \[Type: _NSObj \*
+0x028\] pnsScope : 0x899b21bc \[Type: _NSObj \*
+0x02c\] powner : 0x899af330 \[Type: _objowner \*
+0x030\] pcall : 0x8997df34 \[Type: _call \*
+0x034\] pnctxt : 0x0 \[Type: _nestedctxt \*
+0x038\] dwSyncLevel : 0x0 \[Type: unsigned long
+0x03c\] pbOp : 0xf74c8cbb : 0x5b \[Type: unsigned char \*
+0x040\] Result \[Type: _ObjData
+0x054\] pfnAsyncCallBack : 0xf741eeb5 \[Type: void (__cdecl\*)(_NSObj \*,long,_ObjData \*,void \*)
+0x058\] pdataCallBack : 0x0 \[Type: _ObjData \*
+0x05c\] pvContext : 0xf789a1bc \[Type: void \*
+0x060\] Timer \[Type: _KTIMER
+0x088\] Dpc \[Type: _KDPC
+0x0a8\] pheapCurrent : 0x899af000 \[Type: _heap \*
+0x0ac\] CtxtData \[Type: _ctxtdata
+0x0bc\] LocalHeap \[Type: _heap
0: kd> dt _nsobj 0x899b21bc
ACPI!_NSObj
+0x000 list : _List
+0x008 pnsParent : 0x899affac _NSObj
+0x00c pnsFirstChild : (null)
+0x010 dwNameSeg : 0x5f504741
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : 0x899b149c _NSObj
+0x01c ObjData : _ObjData
+0x030 Context : 0x899c0bf0 Void
+0x034 dwRefCount : 0
0: kd> db 0x899b21bc
899b21bc 9c 14 9b 89 24 00 9b 89-ac ff 9a 89 00 00 00 00 ....$...........
899b21cc 41 47 50 5f 30 f3 9a 89-9c 14 9b 89 00 00 06 00 AGP_0...........
899b21dc 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b21ec f0 0b 9c 89 00 00 00 00-48 44 41 54 34 00 00 00 ........HDAT4...
899b21fc 00 f0 9a 89 00 00 02 00-00 00 00 00 00 00 00 00 ................
899b220c 05 00 00 00 14 0b 9b 89-00 00 01 00 00 00 00 00 ................
899b221c 00 00 01 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b222c 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899b21d8))
(*((ACPI!_ObjData *)0x899b21d8)) [Type: _ObjData]
+0x000\] dwfData : 0x0 \[Type: unsigned short
+0x002\] dwDataType : 0x6 \[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 \*
0: kd> t
Breakpoint 5 hit
eax=899b2200 ebx=8997dde4 ecx=899b220c edx=00000000 esi=8997ddc4 edi=8997c000
eip=f741dc18 esp=f789a0ec ebp=f789a114 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!CreateNameSpaceObject:
f741dc18 55 push ebp
0: kd> dv
pheap = 0x899af000
pszName = 0x899b0b14 "_ADR"
pnsScope = 0x899b21bc
powner = 0x899af330
ppns = 0x8997dde4
dwfNS = 0
pns = 0x00000008
rc = 0n-146678760
pnsParent = 0x899b0b14
iLen = 0n-1986321988
0: kd> gu
eax=00000000 ebx=8997dde4 ecx=899b2234 edx=00000000 esi=8997ddc4 edi=8997c000
eip=f7425a57 esp=f789a0f0 ebp=f789a114 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!Name+0x74:
f7425a57 8bf8 mov edi,eax
0: kd> gu
eax=00000000 ebx=8997dde4 ecx=899b2234 edx=00000000 esi=8997ddc4 edi=8997c000
eip=f7425a57 esp=f789a0f0 ebp=f789a114 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!Name+0x74:
f7425a57 8bf8 mov edi,eax
0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997ddc4
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997ddc4)
((ACPI!_term *)0x8997ddc4) : 0x8997ddc4 [Type: _term *]
+0x000\] FrameHdr \[Type: _framehdr
+0x010\] pbOpTerm : 0xf74c8cb1 : 0x8 \[Type: unsigned char \*
+0x014\] pbOpEnd : 0x0 \[Type: unsigned char \*
+0x018\] pbScopeEnd : 0xf74c8cbb : 0x5b \[Type: unsigned char \*
+0x01c\] pamlterm : 0xf7438cf0 \[Type: _amlterm \*
+0x020\] pnsObj : 0x899b2234 \[Type: _NSObj \*
+0x024\] iArg : 2 \[Type: int
+0x028\] icArgs : 2 \[Type: int
+0x02c\] pdataArgs : 0x899b2200 \[Type: _ObjData \*
+0x030\] pdataResult : 0x8997c040 \[Type: _ObjData \*
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899b2234)
((ACPI!_NSObj *)0x899b2234) : 0x899b2234 [Type: _NSObj *]
+0x000\] list \[Type: _List
+0x008\] pnsParent : 0x899b21bc \[Type: _NSObj \*
+0x00c\] pnsFirstChild : 0x0 \[Type: _NSObj \*
+0x010\] dwNameSeg : 0x5244415f \[Type: unsigned long
+0x014\] hOwner : 0x899af330 \[Type: void \*
+0x018\] pnsOwnedNext : 0x899b21bc \[Type: _NSObj \*
+0x01c\] ObjData \[Type: _ObjData
+0x030\] Context : 0x0 \[Type: void \*
+0x034\] dwRefCount : 0x0 \[Type: unsigned long
0: kd> db 0x899b2234
899b2234 34 22 9b 89 34 22 9b 89-bc 21 9b 89 00 00 00 00 4"..4"...!......
899b2244 5f 41 44 52 30 f3 9a 89-bc 21 9b 89 00 00 00 00 _ADR0....!......
if ((rc = CreateNameSpaceObject(pctxt->pheapCurrent,
(PSZ)pterm->pdataArgs[0].pbDataBuff,
pctxt->pnsScope, pctxt->powner,
&pterm->pnsObj, 0)) == STATUS_SUCCESS) 返回到这里:
{
MoveObjData(&pterm->pnsObj->ObjData, &pterm->pdataArgs[1]);
}
0: kd> dt ACPI!_NSObj 0x899b2234
+0x000 list : _List
+0x008 pnsParent : 0x899b21bc _NSObj
+0x00c pnsFirstChild : (null)
+0x010 dwNameSeg : 0x5244415f
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : 0x899b21bc _NSObj
+0x01c ObjData : _ObjData
+0x030 Context : (null)
+0x034 dwRefCount : 0
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899b2250))
(*((ACPI!_ObjData *)0x899b2250)) [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 : 0x10000 \[Type: unsigned long
+0x008\] uipDataValue : 0x10000 \[Type: unsigned long
+0x008\] pnsAlias : 0x10000 \[Type: _NSObj \*
+0x008\] pdataAlias : 0x10000 \[Type: _ObjData \*
+0x008\] powner : 0x10000 \[Type: void \*
+0x00c\] dwDataLen : 0x0 \[Type: unsigned long
+0x010\] pbDataBuff : 0x0 \[Type: unsigned char \*
if (pterm->pdataArgs != NULL)
{
FreeDataBuffs(pterm->pdataArgs, pterm->icArgs);
FREEODOBJ(pterm->pdataArgs);
}
PopFrame(pctxt);
}
EXIT(2, ("ParseTerm=%x\n", rc));
return rc;
} //ParseTerm
//
// Go for as long as there's work to perform.
//
while (!IsStackEmpty(pctxt))
{
CHKDEBUGGERREQ();
pfh = (PFRAMEHDR)pctxt->LocalHeap.pbHeapEnd;
ASSERT(pfh->pfnParse != NULL);
rc = pfh->pfnParse(pctxt, pfh, rc);
0: kd> p
eax=8997dd00 ebx=f743a948 ecx=8997c000 edx=899af000 esi=8997c000 edi=8997ddf8
eip=f741d80d esp=f789a144 ebp=f789a158 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!RunContext+0xfd:
f741d80d 837f0c00 cmp dword ptr [edi+0Ch],0 ds:0023:8997de04={ACPI!ParseScope (f74274fd)}
0: kd> dt _FRAMEHDR 8997ddf8
ACPI!_framehdr
+0x000 dwSig : 0x504f4353
+0x004 dwLen : 0x28
+0x008 dwfFrame : 1
+0x00c pfnParse : 0xf74274fd long ACPI!ParseScope+0
0: kd> t
eax=8997dd00 ebx=f743a948 ecx=8997c000 edx=899af000 esi=8997c000 edi=8997ddf8
eip=f74274fd esp=f789a134 ebp=f789a158 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
ACPI!ParseScope:
f74274fd 55 push ebp
0: kd> kc
00 ACPI!ParseScope
01 ACPI!RunContext
02 ACPI!InsertReadyQueue
03 ACPI!RestartContext
04 ACPI!SyncLoadDDB
05 ACPI!AMLILoadDDB
06 ACPI!ACPIInitializeDDB
07 ACPI!ACPIInitializeDDBs
08 ACPI!ACPIInitialize
09 ACPI!ACPIInitStartACPI
0a ACPI!ACPIRootIrpStartDevice
0b ACPI!ACPIDispatchIrp
0c nt!IofCallDriver
0d nt!IopSynchronousCall
0e nt!IopStartDevice
0f nt!PipProcessStartPhase1
10 nt!PipProcessDevNodeTree
11 nt!PipDeviceActionWorker
12 nt!PipRequestDeviceAction
13 nt!IopInitializeBootDrivers
14 nt!IoInitSystem
15 nt!Phase1Initialization
16 nt!PspSystemThreadStartup
17 nt!KiThreadStartup
0: kd> dv
pctxt = 0x8997c000
pscope = 0x8997ddf8
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ctxt *)0x8997c000)
((ACPI!_ctxt *)0x8997c000) : 0x8997c000 [Type: _ctxt *]
+0x000\] dwSig : 0x54585443 \[Type: unsigned long
+0x004\] pbCtxtEnd : 0x8997e000 : 0x54 \[Type: unsigned char \*
+0x008\] listCtxt \[Type: _List
+0x010\] listQueue \[Type: _List
+0x018\] pplistCtxtQueue : 0x0 \[Type: _List \* \*
+0x01c\] plistResources : 0x0 \[Type: _List \*
+0x020\] dwfCtxt : 0x10 \[Type: unsigned long
+0x024\] pnsObj : 0x0 \[Type: _NSObj \*
+0x028\] pnsScope : 0x899b21bc \[Type: _NSObj \*
+0x02c\] powner : 0x899af330 \[Type: _objowner \*
+0x030\] pcall : 0x8997df34 \[Type: _call \*
+0x034\] pnctxt : 0x0 \[Type: _nestedctxt \*
+0x038\] dwSyncLevel : 0x0 \[Type: unsigned long
+0x03c\] pbOp : 0xf74c8cbb : 0x5b \[Type: unsigned char \*
0: kd> db 0xf74c8cbb
f74c8cbb 5b 82 46 58 49 53 41 5f-08 5f 41 44 52 0c 00 00 [.FXISA_._ADR...
f74c8ccb 07 00 5b 82 4a 14 4d 42-52 44 08 5f 48 49 44 0c ..[.J.MBRD._HID.
f74c8cdb 41 d0 0c 02 08 5f 55 49-44 0a 1f 08 52 53 52 43 A...._UID...RSRC
f74c8ceb 11 46 0b 0a b2 47 01 10-00 10 00 01 10 47 01 24 .F...G.......G.$
f74c8cfb 00 24 00 01 02 47 01 28-00 28 00 01 02 47 01 2c .$...G.(.(...G.,
f74c8d0b 00 2c 00 01 02 47 01 2e-00 2e 00 01 02 47 01 30 .,...G.......G.0
f74c8d1b 00 30 00 01 02 47 01 34-00 34 00 01 02 47 01 38 .0...G.4.4...G.8
f74c8d2b 00 38 00 01 02 47 01 3c-00 3c 00 01 02 47 01 50 .8...G.<.<...G.P
0: kd> ?5b
Evaluate expression: 91 = 0000005b
5b表示扩展操作码,82表示建立设备,设备名:FXIS。41,表示名字子对象,对象名字_ADR。
case 1:
Stage1:
//
// Stage 1: Parse next opcode.
//
if (rc == AMLISTA_BREAK)
{
pctxt->pbOp = pscope->pbOpEnd;
rc = STATUS_SUCCESS;
}
else
{
while (pctxt->pbOp < pscope->pbOpEnd) 上一个建立设备完成了。
{
0: kd> dv
pctxt = 0x8997c000
pscope = 0x8997ddf8
rc = 0n0
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ctxt *)0x8997c000)
((ACPI!_ctxt *)0x8997c000) : 0x8997c000 [Type: _ctxt *]
+0x000\] dwSig : 0x54585443 \[Type: unsigned long
+0x004\] pbCtxtEnd : 0x8997e000 : 0x54 \[Type: unsigned char \*
+0x008\] listCtxt \[Type: _List
+0x010\] listQueue \[Type: _List
+0x018\] pplistCtxtQueue : 0x0 \[Type: _List \* \*
+0x01c\] plistResources : 0x0 \[Type: _List \*
+0x020\] dwfCtxt : 0x10 \[Type: unsigned long
+0x024\] pnsObj : 0x0 \[Type: _NSObj \*
+0x028\] pnsScope : 0x899b21bc \[Type: _NSObj \*
+0x02c\] powner : 0x899af330 \[Type: _objowner \*
+0x030\] pcall : 0x8997df34 \[Type: _call \*
+0x034\] pnctxt : 0x0 \[Type: _nestedctxt \*
+0x038\] dwSyncLevel : 0x0 \[Type: unsigned long
+0x03c\] pbOp : 0xf74c8cbb : 0x5b \[Type: unsigned char \*\] \[+0x03c\] pbOp : 0xf74c8cbb 0: kd\> dx -id 0,0,899a2278 -r1 ((ACPI!_scope \*)0x8997ddf8) ((ACPI!_scope \*)0x8997ddf8) : 0x8997ddf8 \[Type: _scope \*
+0x000\] FrameHdr \[Type: _framehdr
+0x010\] pbOpEnd : 0xf74c8cbb : 0x5b \[Type: unsigned char \*\] \[+0x010\] pbOpEnd : 0xf74c8cbb \[+0x014\] pbOpRet : 0x0 \[Type: unsigned char \*
+0x018\] pnsPrevScope : 0x899affac \[Type: _NSObj \*
+0x01c\] pownerPrev : 0x899af330 \[Type: _objowner \*
+0x020\] pheapPrev : 0x899af000 \[Type: _heap \*
+0x024\] pdataResult : 0x8997c040 \[Type: _ObjData \*
case 2:
//
// Stage 2: clean up.
//
#ifdef DEBUGGER
if (gDebugger.dwfDebugger &
(DBGF_AMLTRACE_ON | DBGF_STEP_MODES))
{
gDebugger.iPrintLevel--;
PrintIndent(pctxt);
PRINTF("}");
}
#endif
pctxt->pnsScope = pscope->pnsPrevScope; //关键代码:返回上一个范围节点。
pctxt->powner = pscope->pownerPrev;
pctxt->pheapCurrent = pscope->pheapPrev;
if (pscope->pbOpRet != NULL)
{
pctxt->pbOp = pscope->pbOpRet;
}
PopFrame(pctxt);
}
0: kd> dv
pctxt = 0x8997c000
pscope = 0x8997ddf8
rc = 0n0
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_scope *)0x8997ddf8)
((ACPI!_scope *)0x8997ddf8) : 0x8997ddf8 [Type: _scope *]
+0x000\] FrameHdr \[Type: _framehdr
+0x010\] pbOpEnd : 0xf74c8cbb : 0x5b \[Type: unsigned char \*
+0x014\] pbOpRet : 0x0 \[Type: unsigned char \*
+0x018\] pnsPrevScope : 0x899affac \[Type: _NSObj \*
+0x01c\] pownerPrev : 0x899af330 \[Type: _objowner \*
+0x020\] pheapPrev : 0x899af000 \[Type: _heap \*
+0x024\] pdataResult : 0x8997c040 \[Type: _ObjData \*
0: kd> dt _nsobj 0x899affac
ACPI!_NSObj
+0x000 list : _List
+0x008 pnsParent : 0x899af0f0 _NSObj
+0x00c pnsFirstChild : 0x899b0024 _NSObj
+0x010 dwNameSeg : 0x30494350
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : 0x899aff4c _NSObj
+0x01c ObjData : _ObjData
+0x030 Context : 0x899c0d58 Void
+0x034 dwRefCount : 0
0: kd> db 0x899affac
899affac 4c ff 9a 89 74 f4 9a 89-f0 f0 9a 89 24 00 9b 89 L...t.......$...
899affbc 50 43 49 30 30 f3 9a 89-4c ff 9a 89 00 00 06 00 PCI00...L.......
899affcc 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899affdc 58 0d 9c 89 00 00 00 00-48 4f 52 47 34 00 00 00 X.......HORG4...
899affec 00 f0 9a 89 50 00 00 00-30 00 00 00 02 00 00 00 ....P...0.......
899afffc 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b000c 00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f ............HNSO
899b001c 44 00 00 00 00 f0 9a 89-bc 21 9b 89 68 00 9b 89 D........!..h...
刚刚建立了第一个子设备:
+0x00c pnsFirstChild : 0x899b0024
0: kd> dt _nsobj 0x899b0024
ACPI!_NSObj
+0x000 list : _List
+0x008 pnsParent : 0x899affac _NSObj
+0x00c pnsFirstChild : (null)
+0x010 dwNameSeg : 0x4449485f
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : 0x899affac _NSObj
+0x01c ObjData : _ObjData
+0x030 Context : (null)
+0x034 dwRefCount : 0
0: kd> db 0x899b0024
899b0024 bc 21 9b 89 68 00 9b 89-ac ff 9a 89 00 00 00 00 .!..h...........
899b0034 5f 48 49 44 30 f3 9a 89-ac ff 9a 89 00 00 01 00 _HID0...........
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_List *)0x899b0024))
(*((ACPI!_List *)0x899b0024)) [Type: _List]
+0x000\] plistPrev : 0x899b21bc \[Type: _List \*\] 最后建立的 \[+0x004\] plistNext : 0x899b0068 \[Type: _List \*\] 最开始建立的。 0: kd\> dt _nsobj 0x899b21bc ACPI!_NSObj +0x000 list : _List +0x008 pnsParent : 0x899affac _NSObj +0x00c pnsFirstChild : 0x899b2234 _NSObj +0x010 dwNameSeg : 0x5f504741 +0x014 hOwner : 0x899af330 Void +0x018 pnsOwnedNext : 0x899b149c _NSObj +0x01c ObjData : _ObjData +0x030 Context : 0x899c0bf0 Void +0x034 dwRefCount : 0 0: kd\> dx -id 0,0,899a2278 -r1 (\*((ACPI!_ObjData \*)0x899b21d8)) (\*((ACPI!_ObjData \*)0x899b21d8)) \[Type: _ObjData
+0x000\] dwfData : 0x0 \[Type: unsigned short
+0x002\] dwDataType : 0x6 \[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 \*
0: kd> db 0x899b21bc
899b21bc 9c 14 9b 89 24 00 9b 89-ac ff 9a 89 34 22 9b 89 ....$.......4"..
899b21cc 41 47 50 5f 30 f3 9a 89-9c 14 9b 89 00 00 06 00 AGP_0...........
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899b2234)
((ACPI!_NSObj *)0x899b2234) : 0x899b2234 [Type: _NSObj *]
+0x000\] list \[Type: _List
+0x008\] pnsParent : 0x899b21bc \[Type: _NSObj \*
+0x00c\] pnsFirstChild : 0x0 \[Type: _NSObj \*
+0x010\] dwNameSeg : 0x5244415f \[Type: unsigned long
+0x014\] hOwner : 0x899af330 \[Type: void \*
+0x018\] pnsOwnedNext : 0x899b21bc \[Type: _NSObj \*
+0x01c\] ObjData \[Type: _ObjData
+0x030\] Context : 0x0 \[Type: void \*
+0x034\] dwRefCount : 0x0 \[Type: unsigned long
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_List *)0x899b2234))
(*((ACPI!_List *)0x899b2234)) [Type: _List]
+0x000\] plistPrev : 0x899b2234 \[Type: _List \*
+0x004\] plistNext : 0x899b2234 \[Type: _List \*
0: kd> db 0x899b2234
899b2234 34 22 9b 89 34 22 9b 89-bc 21 9b 89 00 00 00 00 4"..4"...!......
899b2244 5f 41 44 52 30 f3 9a 89-bc 21 9b 89 00 00 01 00 _ADR0....!......
PCI0
AGP_
_ADR
PopFrame(pctxt);//之后[+0x03c] pbOp : 0xf74c8cbb不变。
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ctxt *)0x8997c000)
((ACPI!_ctxt *)0x8997c000) : 0x8997c000 [Type: _ctxt *]
+0x000\] dwSig : 0x54585443 \[Type: unsigned long
+0x004\] pbCtxtEnd : 0x8997e000 : 0x54 \[Type: unsigned char \*
+0x008\] listCtxt \[Type: _List
+0x010\] listQueue \[Type: _List
+0x018\] pplistCtxtQueue : 0x0 \[Type: _List \* \*
+0x01c\] plistResources : 0x0 \[Type: _List \*
+0x020\] dwfCtxt : 0x10 \[Type: unsigned long
+0x024\] pnsObj : 0x0 \[Type: _NSObj \*
+0x028\] pnsScope : 0x899affac \[Type: _NSObj \*
+0x02c\] powner : 0x899af330 \[Type: _objowner \*
+0x030\] pcall : 0x8997df34 \[Type: _call \*
+0x034\] pnctxt : 0x0 \[Type: _nestedctxt \*
+0x038\] dwSyncLevel : 0x0 \[Type: unsigned long
+0x03c\] pbOp : 0xf74c8cbb : 0x5b \[Type: unsigned char \*
//
// Go for as long as there's work to perform.
//
while (!IsStackEmpty(pctxt))
{
CHKDEBUGGERREQ();
pfh = (PFRAMEHDR)pctxt->LocalHeap.pbHeapEnd;
ASSERT(pfh->pfnParse != NULL);
rc = pfh->pfnParse(pctxt, pfh, rc);
0: kd> t
eax=8997de00 ebx=f743a948 ecx=8997c000 edx=899af000 esi=8997c000 edi=8997de20
eip=f7427a34 esp=f789a134 ebp=f789a158 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
ACPI!ParseTerm:
f7427a34 55 push ebp
0: kd> kc
00 ACPI!ParseTerm
01 ACPI!RunContext
02 ACPI!InsertReadyQueue
03 ACPI!RestartContext
04 ACPI!SyncLoadDDB
05 ACPI!AMLILoadDDB
06 ACPI!ACPIInitializeDDB
07 ACPI!ACPIInitializeDDBs
08 ACPI!ACPIInitialize
09 ACPI!ACPIInitStartACPI
0a ACPI!ACPIRootIrpStartDevice
0b ACPI!ACPIDispatchIrp
0c nt!IofCallDriver
0d nt!IopSynchronousCall
0e nt!IopStartDevice
0f nt!PipProcessStartPhase1
10 nt!PipProcessDevNodeTree
11 nt!PipDeviceActionWorker
12 nt!PipRequestDeviceAction
13 nt!IopInitializeBootDrivers
14 nt!IoInitSystem
15 nt!Phase1Initialization
16 nt!PspSystemThreadStartup
17 nt!KiThreadStartup
0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997de20
rc = 0n0
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ctxt *)0x8997c000)
((ACPI!_ctxt *)0x8997c000) : 0x8997c000 [Type: _ctxt *]
+0x000\] dwSig : 0x54585443 \[Type: unsigned long
+0x004\] pbCtxtEnd : 0x8997e000 : 0x54 \[Type: unsigned char \*
+0x008\] listCtxt \[Type: _List
+0x010\] listQueue \[Type: _List
+0x018\] pplistCtxtQueue : 0x0 \[Type: _List \* \*
+0x01c\] plistResources : 0x0 \[Type: _List \*
+0x020\] dwfCtxt : 0x10 \[Type: unsigned long
+0x024\] pnsObj : 0x0 \[Type: _NSObj \*
+0x028\] pnsScope : 0x899affac \[Type: _NSObj \*
+0x02c\] powner : 0x899af330 \[Type: _objowner \*
+0x030\] pcall : 0x8997df34 \[Type: _call \*
+0x034\] pnctxt : 0x0 \[Type: _nestedctxt \*
+0x038\] dwSyncLevel : 0x0 \[Type: unsigned long
+0x03c\] pbOp : 0xf74c8cbb : 0x5b \[Type: unsigned char \*
+0x040\] Result \[Type: _ObjData
+0x054\] pfnAsyncCallBack : 0xf741eeb5 \[Type: void (__cdecl\*)(_NSObj \*,long,_ObjData \*,void \*)
+0x058\] pdataCallBack : 0x0 \[Type: _ObjData \*
+0x05c\] pvContext : 0xf789a1bc \[Type: void \*
+0x060\] Timer \[Type: _KTIMER
+0x088\] Dpc \[Type: _KDPC
+0x0a8\] pheapCurrent : 0x899af000 \[Type: _heap \*
+0x0ac\] CtxtData \[Type: _ctxtdata
+0x0bc\] LocalHeap \[Type: _heap
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_heap *)0x8997c0bc))
(*((ACPI!_heap *)0x8997c0bc)) [Type: _heap]
+0x000\] dwSig : 0x50414548 \[Type: unsigned long
+0x004\] pbHeapEnd : 0x8997de20 : 0x54 \[Type: unsigned char \*
+0x008\] pheapHead : 0x8997c0bc \[Type: _heap \*
+0x00c\] pheapNext : 0x0 \[Type: _heap \*
+0x010\] pbHeapTop : 0x8997c0d4 : 0x0 \[Type: unsigned char \*
+0x014\] plistFreeHeap : 0x0 \[Type: _List \*
+0x018\] Heap \[Type: _heapobjhdr
0: kd> dt _TERM 0x8997c0bc
ACPI!_term
+0x000 FrameHdr : _framehdr
+0x010 pbOpTerm : 0x8997c0d4 ""
+0x014 pbOpEnd : (null)
+0x018 pbScopeEnd : (null)
+0x01c pamlterm : (null)
+0x020 pnsObj : (null)
+0x024 iArg : 0n0
+0x028 icArgs : 0n0
+0x02c pdataArgs : (null)
+0x030 pdataResult : (null)