news 2026/4/27 17:51:22

ACPI!device后ACPI!Name函数建立子节点对象

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!device后ACPI!Name函数建立子节点对象

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 005b_PCI0ISA_LNKD..[
f74c8cab82 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 00AGP_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)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 13:48:55

.NET程序安全完整实战:高效代码混淆技术解析

在当今数字化时代&#xff0c;.NET程序安全面临着严峻挑战。未经保护的代码容易被反编译工具轻易还原&#xff0c;导致知识产权泄露和业务逻辑暴露。代码混淆技术应运而生&#xff0c;成为保护.NET程序安全的重要防线。 【免费下载链接】obfuscar Open source obfuscation tool…

作者头像 李华
网站建设 2026/4/22 9:24:36

独角数卡(dujiaoka)部署运维全攻略:新手站长必备解决方案

独角数卡(dujiaoka)部署运维全攻略&#xff1a;新手站长必备解决方案 【免费下载链接】dujiaoka &#x1f984;独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速&#xff01;&#x1f680;&#x1f680;&#x1f389;&#x1f389; 项目地址: https://g…

作者头像 李华
网站建设 2026/4/25 3:17:53

CP测试MLO是什么

CP测试MLO是半导体测试中的关键组件&#xff0c;它像芯片的“神经中枢”一样连接着探针和电路板&#xff0c;确保信号精准传输。具体来说&#xff1a; 一、MLO是什么&#xff1f; MLO&#xff08;Multi-Layer Organic&#xff09;基板是一种多层有机基板&#xff0c;用于装载探…

作者头像 李华
网站建设 2026/4/25 15:13:14

image2csv终极使用指南:如何快速完成图像表格数据转换

image2csv终极使用指南&#xff1a;如何快速完成图像表格数据转换 【免费下载链接】image2csv Convert tables stored as images to an usable .csv file 项目地址: https://gitcode.com/gh_mirrors/im/image2csv 还在为处理图片中的表格数据而烦恼吗&#xff1f;&#…

作者头像 李华
网站建设 2026/4/19 1:54:49

MBPFan:MacBook智能散热管理完整解决方案

MBPFan&#xff1a;MacBook智能散热管理完整解决方案 【免费下载链接】mbpfan 项目地址: https://gitcode.com/gh_mirrors/mb/mbpfan 你是否曾经在专注工作时被MacBook突然增大的风扇噪音打断&#xff1f;或者在运行大型软件时感觉设备烫手到担心硬件受损&#xff1f;这…

作者头像 李华