当前位置: 首页 > news >正文

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 *]

http://www.jsqmd.com/news/192181/

相关文章:

  • 2025年西南西北售后完善、性价比高的移民专业公司推荐 - 工业推荐榜
  • MATLAB超详细下载安装教程(附安装包)2025最新版(MATLAB R2024b)
  • 医疗知识蒸馏用DistilBERT轻量化部署
  • Stable Diffusion生成静态图+HeyGem做动态化处理
  • [特殊字符]论文人破防时刻?虎贲等考 AI 让查重 AIGC 检测双标红退散!
  • 内网穿透实现外网访问HeyGem系统的方法汇总
  • 【SAE出版、EI检索】第六届智慧城市工程与公共交通国际学术会议(SCEPT 2026)
  • HeyGem支持MP4、AVI、MOV等主流视频格式上传合成
  • 2026 商标转让平台渠道实力榜单:真实标源、过户效率全维对比 - 老周说教育
  • 【必学收藏】思维链(CoT)完全指南:提升大模型推理能力的核心技术
  • ctf.show-CTF部分-SafePassword
  • 企业AI落地实战:从0到1的方法论与踩坑经验|Moments AI落地实战派
  • HeyGem系统占用多少磁盘空间?初始安装约15GB
  • GitHub Actions能否调用HeyGem API?CI/CD集成探索
  • 电商带货视频批量生成神器:HeyGem实战案例
  • 企业级瑜伽馆管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • ​2025“李宁-泸州银行杯”全国匹克球冠军邀请赛在泸州圆满落幕 - 博客万
  • 【潮流计算】考虑分布式电源、发电机和负荷随机波动的概率潮流计算附Matlab代码
  • 宝塔面板部署HeyGem?可视化运维更简单
  • 简单理解:I2C中u32 device_addr 、 u32 WriteAddr和u32 reg_addr的核心区别
  • WebSocket实现实时进度推送?HeyGem前端通信机制
  • 2026年 广东酒店拆除工程权威推荐榜:专业酒店宾馆旅馆拆除回收与室内装饰装修拆除服务深度解析 - 品牌企业推荐师(官方)
  • HeyGem系统能否处理方言音频?部分支持需测试
  • Dify平台能否集成HeyGem实现AI Agent数字人播报?
  • 2026年哪个降AI率工具性价比最高?实测20个降AI软件后推荐AIGCleaner! - 还在做实验的师兄
  • 【C#高性能编程秘籍】:利用集合表达式重构数组逻辑,性能提升3倍
  • 推荐小程序专业服务商:聚焦核心能力的选择指南 - 品牌2026
  • HeyGem数字人系统适合做在线教育视频批量制作吗?
  • LUT调色包下载后如何用于HeyGem生成视频后期处理?
  • 微PE官网启动盘安装系统后部署HeyGem全流程