news 2026/6/10 0:44:44

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/6/10 0:29:02

StyleGAN生成虚拟人脸+HeyGem驱动?创新组合

StyleGAN生成虚拟人脸 HeyGem驱动:一场数字人内容生产的静默革命 在短视频日更、直播24小时不间断的今天,企业对“出镜者”的需求早已超越人力所能承载的极限。一个主播无法同时用十种语言向全球用户讲解产品,也无法在同一时间出现在百场营销…

作者头像 李华
网站建设 2026/6/9 23:22:07

HeyGem能否设置账号密码登录?当前为开放模式

HeyGem 能否设置账号密码登录?当前为开放模式 在人工智能内容创作工具快速普及的今天,越来越多开发者和企业开始部署本地化的数字人视频生成系统。HeyGem 正是这样一个基于 AI 的音视频融合平台,能够将音频输入与数字人形象自动匹配&#xff…

作者头像 李华
网站建设 2026/5/30 2:20:21

HeyGem数字人系统适合做在线教育视频批量制作吗?

HeyGem数字人系统适合做在线教育视频批量制作吗? 在知识内容加速迭代的今天,在线教育机构正面临一个现实难题:如何以更低的成本、更快的速度生产高质量的教学视频,同时保持讲解风格和品牌形象的一致性?传统的真人出镜录…

作者头像 李华
网站建设 2026/5/28 14:01:39

Maya角色动画导出后能否作为HeyGem输入?可以

Maya角色动画导出后能否作为HeyGem输入?可以 在虚拟内容创作日益普及的今天,越来越多的企业和创作者面临一个现实问题:如何让精心设计的3D角色“开口说话”,而无需投入高昂的成本去拍摄真人视频或搭建复杂的动捕系统?…

作者头像 李华
网站建设 2026/6/4 20:10:22

NVIDIA显卡驱动安装后自动启用HeyGem GPU加速

NVIDIA显卡驱动安装后自动启用HeyGem GPU加速 在数字人内容爆发式增长的今天,用户对高质量、实时生成的虚拟形象视频需求日益旺盛。无论是教育机构批量制作课程讲解视频,还是电商企业快速产出商品代言内容,传统依赖人工拍摄与后期剪辑的方式已…

作者头像 李华