news 2026/9/9 5:38:35

ACPI!ParseTerm函数里的ACPI!Name函数分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!ParseTerm函数里的ACPI!Name函数分析

ACPI!ParseTerm函数里的ACPI!Name函数分析
0: kd> g
Breakpoint 5 hit
eax=899afff0 ebx=8997de40 ecx=899aff0c edx=00000000 esi=8997de20 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> kc
#
00 ACPI!CreateNameSpaceObject
01 ACPI!Name
02 ACPI!ParseTerm

03 ACPI!RunContext
04 ACPI!InsertReadyQueue
05 ACPI!RestartContext
06 ACPI!SyncLoadDDB
07 ACPI!AMLILoadDDB
08 ACPI!ACPIInitializeDDB
09 ACPI!ACPIInitializeDDBs
0a ACPI!ACPIInitialize
0b ACPI!ACPIInitStartACPI
0c ACPI!ACPIRootIrpStartDevice
0d ACPI!ACPIDispatchIrp
0e nt!IofCallDriver
0f nt!IopSynchronousCall
10 nt!IopStartDevice
11 nt!PipProcessStartPhase1
12 nt!PipProcessDevNodeTree
13 nt!PipDeviceActionWorker
14 nt!PipRequestDeviceAction
15 nt!IopInitializeBootDrivers
16 nt!IoInitSystem
17 nt!Phase1Initialization
18 nt!PspSystemThreadStartup
19 nt!KiThreadStartup
0: kd> dv
pheap = 0x899af000
pszName = 0x899af540 "_HID" 对象名字
pnsScope = 0x899affac 对象的父对象

powner = 0x899af330
ppns = 0x8997de40
dwfNS = 0
pns = 0x00000008
rc = 0n-146678759
pnsParent = 0x899af540
iLen = 0n-1986330708

0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899affac)
((ACPI!_NSObj *)0x899affac) : 0x899affac [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x899af0f0 [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x899b0024 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x30494350 [Type: unsigned long]
[+0x014] hOwner : 0x899af330 [Type: void *]
[+0x018] pnsOwnedNext : 0x899aff4c [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x899c0d58 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
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.......


kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899af0f0)
((ACPI!_NSObj *)0x899af0f0) : 0x899af0f0 [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x899af024 [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x899af474 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x5f42535f [Type: unsigned long]
[+0x014] hOwner : 0x0 [Type: void *]
[+0x018] pnsOwnedNext : 0x0 [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x0 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
0: kd> db 0x899af0f0
899af0f0 ac f0 9a 89 34 f1 9a 89-24 f0 9a 89 74 f4 9a 89 ....4...$...t...
899af100 5f 53 42 5f 00 00 00 00-00 00 00 00 00 00 00 00 _SB_............

kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899af024)
((ACPI!_NSObj *)0x899af024) : 0x899af024 [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x0 [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x899af068 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x5f5f5f5c [Type: unsigned long]
[+0x014] hOwner : 0x0 [Type: void *]
[+0x018] pnsOwnedNext : 0x0 [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x0 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
0: kd> db 0x899af024
899af024 00 00 00 00 00 00 00 00-00 00 00 00 68 f0 9a 89 ............h...
899af034 5c 5f 5f 5f 00 00 00 00-00 00 00 00 00 00 00 00 \___............


\___
_SB_
PCI0


0: kd> gu
eax=00000000 ebx=8997de40 ecx=899b0024 edx=00000000 esi=8997de20 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 = 0x8997de20
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997de20)
((ACPI!_term *)0x8997de20) : 0x8997de20 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0xf74c77ff : 0x8 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0xf74c92a2 : 0x14 [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7438cf0 [Type: _amlterm *]
[+0x020] pnsObj : 0x899b0024 [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int]
[+0x02c] pdataArgs : 0x899afff0 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c040 [Type: _ObjData *]
0: kd> dt _ObjData 0x899afff0
ACPI!_ObjData
+0x000 dwfData : 0
+0x002 dwDataType : 2
+0x004 dwRefCount : 0
+0x004 pdataBase : (null)
+0x008 dwDataValue : 0
+0x008 uipDataValue : 0
+0x008 pnsAlias : (null)
+0x008 pdataAlias : (null)
+0x008 powner : (null)
+0x00c dwDataLen : 5
+0x010 pbDataBuff : 0x899af540 "_HID"
0: kd> dt _ObjData 0x899afff0+14
ACPI!_ObjData
+0x000 dwfData : 0
+0x002 dwDataType : 1
+0x004 dwRefCount : 0
+0x004 pdataBase : (null)
+0x008 dwDataValue : 0x30ad041
+0x008 uipDataValue : 0x30ad041
+0x008 pnsAlias : 0x030ad041 _NSObj
+0x008 pdataAlias : 0x030ad041 _ObjData
+0x008 powner : 0x030ad041 Void
+0x00c dwDataLen : 0
+0x010 pbDataBuff : (null)


//dwDataType values
typedef enum _OBJTYPES {
OBJTYPE_UNKNOWN = 0,
OBJTYPE_INTDATA,
OBJTYPE_STRDATA,

[+0x020] pnsObj : 0x899b0024 [Type: _NSObj *]


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 24 00 9b 89 24 00 9b 89-ac ff 9a 89 00 00 00 00 $...$...........
899b0034 5f 48 49 44 30 f3 9a 89-ac ff 9a 89 00 00 00 00 _HID0...........
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899b0040))
(*((ACPI!_ObjData *)0x899b0040)) [Type: _ObjData]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x0 [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 *]

\___ 根对象
_SB_ 第一级对象
PCI0 第二级对象
_HID 第三级对象

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]);
}

EXIT(2, ("Name=%x (pnsObj=%x)\n", rc, pterm->pnsObj));
return rc;
} //Name

0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997de20
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997de20)
((ACPI!_term *)0x8997de20) : 0x8997de20 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0xf74c77ff : 0x8 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0xf74c92a2 : 0x14 [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7438cf0 [Type: _amlterm *]
[+0x020] pnsObj : 0x899b0024 [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int]
[+0x02c] pdataArgs : 0x899afff0 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c040 [Type: _ObjData *]
0: kd> dt _ObjData 0x899afff0+14
ACPI!_ObjData
+0x000 dwfData : 0
+0x002 dwDataType : 1
+0x004 dwRefCount : 0
+0x004 pdataBase : (null)
+0x008 dwDataValue : 0x30ad041
+0x008 uipDataValue : 0x30ad041
+0x008 pnsAlias : 0x030ad041 _NSObj
+0x008 pdataAlias : 0x030ad041 _ObjData
+0x008 powner : 0x030ad041 Void
+0x00c dwDataLen : 0
+0x010 pbDataBuff : (null)


MoveObjData(&pterm->pnsObj->ObjData, &pterm->pdataArgs[1]);

0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899b0040))
(*((ACPI!_ObjData *)0x899b0040)) [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 : 0x30ad041 [Type: unsigned long]
[+0x008] uipDataValue : 0x30ad041 [Type: unsigned long]
[+0x008] pnsAlias : 0x30ad041 [Type: _NSObj *]
[+0x008] pdataAlias : 0x30ad041 [Type: _ObjData *]
[+0x008] powner : 0x30ad041 [Type: void *]
[+0x00c] dwDataLen : 0x0 [Type: unsigned long]
[+0x010] pbDataBuff : 0x0 [Type: unsigned char *]

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

程序员必藏:大模型退潮,AI Agent崛起:把握AI未来发展趋势

大模型退潮,AI Agent崛起 在当今的AI叙事中,大语言模型(LLM)和聊天机器人占据了绝大部分流量。我们惊叹于它们写代码、写作和答疑的能力,但这仅仅是冰山一角。 当前,AI正在经历一场从“中心化大脑”向“分布…

作者头像 李华
网站建设 2026/9/3 0:27:16

结合阿里云TTS生成HeyGem所需音频文件流程

结合阿里云TTS生成HeyGem所需音频文件流程 在企业内容生产迈向自动化的今天,一个常见的挑战是:如何用最低成本、最快速度生成大量口型同步的数字人视频?传统方式依赖真人出镜拍摄与后期剪辑,不仅耗时费力,还难以实现标…

作者头像 李华
网站建设 2026/9/3 0:18:51

FastStone Capture注册码哪里找?配合HeyGem录屏教程

FastStone Capture 与 HeyGem 数字人视频生成:构建高效 AI 内容生产闭环 在智能内容创作的浪潮中,一个越来越普遍的需求浮出水面:如何以最低成本、最高效率地批量生成高质量视频?尤其在教育、企业培训、产品演示等场景下&#xff…

作者头像 李华
网站建设 2026/9/3 19:26:10

收藏!大语言模型基础架构全解析(从Transformer到Agent)

大语言模型(LLM)作为当前AI领域的核心技术方向,早已成为程序员和技术学习者的重点关注领域。而支撑起所有主流大模型的技术基石,正是2017年论文《Attention is All You Need》中提出的Transformer架构。对于刚入门大模型的小白来说…

作者头像 李华
网站建设 2026/9/9 2:35:28

Maven HTTP 仓库被阻止问题解决总结

问题现象[ERROR] Could not transfer metadata com.cisdi.info.support:support-tagclient-api:1.0.0-SNAPSHOT/maven-metadata.xml from/to maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories: [cisdi-cloud (http://nexus.....cn/...)]问题根源…

作者头像 李华
网站建设 2026/9/3 0:18:57

WebSocket实现实时进度推送?HeyGem前端通信机制

WebSocket实现实时进度推送?HeyGem前端通信机制 在AI视频生成系统中,用户点击“开始合成”后最怕什么?不是等待时间长,而是不知道到底还要等多久。屏幕一片静止,按钮灰着,用户只能反复刷新、怀疑程序卡死&a…

作者头像 李华