news 2026/4/18 8:15:06

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/4/17 16:24:37

企业级在线装修管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着互联网技术的快速发展,传统装修行业逐渐向数字化转型,企业级在线装修管理系统成为提升装修公司运营效率的重要工具。当前装修行业面临信息不对称、项目管理混乱、客户沟通效率低等问题,亟需一套高效、智能的管理系统来优化业务流程。…

作者头像 李华
网站建设 2026/4/17 15:23:10

企业级瑜伽馆管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着健康生活理念的普及,瑜伽运动逐渐成为现代人缓解压力、提升身体素质的重要方式。企业级瑜伽馆作为专业化服务场所,其管理需求日益复杂,传统的人工管理方式效率低下且容易出错。会员信息、课程安排、财务统计等核心业务亟需数字化升级…

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

OpenCV人脸关键点检测在HeyGem中的核心作用

OpenCV人脸关键点检测在HeyGem中的核心作用 在数字人技术迅猛发展的今天,虚拟主播、AI教师、智能客服等应用已悄然走入大众视野。然而,一个真正“像人”的数字人,不仅需要逼真的外貌建模,更关键的是面部动作的自然流畅——尤其是口…

作者头像 李华
网站建设 2026/4/18 3:50:39

C#程序员也能玩转HeyGem?API接口二次开发前景展望

C#程序员也能玩转HeyGem?API接口二次开发前景展望 在企业数字化转型的浪潮中,AI驱动的内容生成正悄然改变传统生产模式。以数字人视频为例,过去需要专业摄制团队、昂贵设备和后期剪辑的工作,如今通过语音输入即可自动生成口型同步…

作者头像 李华
网站建设 2026/4/18 3:49:23

LoRA微调模型让HeyGem生成特定人物风格视频

LoRA微调模型让HeyGem生成特定人物风格视频 在短视频与虚拟内容爆发的时代,个性化数字人正从“能说话”迈向“像谁在说”。教育机构希望用虚拟讲师统一输出课程内容,企业需要专属IP形象进行品牌传播,而个人创作者则渴望打造一个“会替自己出镜…

作者头像 李华