news 2026/5/1 6:48:59

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/5/1 4:46:06

如何将HeyGem部署到云服务器供团队共享使用?

如何将HeyGem部署到云服务器供团队共享使用? 在企业内容创作日益依赖AI技术的今天,数字人视频正迅速成为品牌宣传、在线教学和客户服务的新标配。相比传统真人出镜拍摄动辄数小时的制作周期,AI驱动的口型同步技术能在几分钟内生成高质量讲解…

作者头像 李华
网站建设 2026/5/1 6:07:03

HeyGem系统播放预览功能体验:实时查看音画同步效果

HeyGem系统播放预览功能体验:实时查看音画同步效果 在AI驱动内容创作的今天,数字人视频已不再是科幻电影中的专属特效,而是逐步渗透进在线教育、企业宣传、电商营销等日常场景。然而,一个长期困扰用户的痛点始终存在:生…

作者头像 李华
网站建设 2026/5/1 5:50:28

[特殊字符]一键打包下载按钮作用详解:节省导出时间

一键打包下载:让批量视频导出不再“卡手” 在数字人技术飞速落地的今天,越来越多企业开始用AI批量生成培训视频、客服应答片段或电商商品介绍。想象这样一个场景:某教育机构需要为100门课程自动生成讲师讲解视频——任务跑完了,结…

作者头像 李华
网站建设 2026/4/30 21:28:25

HTML+CSS修改HeyGem界面样式?自定义主题可行性分析

HTMLCSS修改HeyGem界面样式?自定义主题可行性分析 在AI数字人视频生成工具逐渐普及的今天,HeyGem 作为一款支持本地部署、基于 Gradio 构建的音频驱动口型同步系统,正被越来越多企业用于内容生产、教育培训和品牌宣传。其优势在于开箱即用、…

作者头像 李华