news 2026/6/13 11:22:41

\_PIC.phGPIC的实现和ACPI!Method函数分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
\_PIC.phGPIC的实现和ACPI!Method函数分析


\_PIC.phGPIC的实现和ACPI!Method函数分析

第一部分:
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_List *)0x899af394)
((ACPI!_List *)0x899af394) : 0x899af394 [Type: _List *]
[+0x000] plistPrev : 0x899af2d0 [Type: _List *]
[+0x004] plistNext : 0x899af3d8 [Type: _List *]
0: kd> db 0x899af3d8
899af3d8 94 f3 9a 89 68 f0 9a 89-24 f0 9a 89 00 00 00 00 ....h...$.......
899af3e8 5f 50 49 43 30 f3 9a 89-94 f3 9a 89 00 00 08 00 _PIC0...........
899af3f8 00 00 00 00 00 00 00 00-17 00 00 00 1c f4 9a 89 ................
899af408 00 00 00 00 00 00 00 00-48 4d 45 54 24 00 00 00 ........HMET$...
899af418 00 f0 9a 89 00 00 00 00-00 00 00 00 00 00 00 00 ................
899af428 00 00 00 00 01 70 68 47-50 49 43 00 48 4f 52 47 .....phGPIC.HORG
899af438 34 00 00 00 00 f0 9a 89-39 0e ab f7 84 00 00 00 4.......9.......
899af448 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................


0: kd> dt _nsobj 0x899af3d8
ACPI!_NSObj
+0x000 list : _List
+0x008 pnsParent : 0x899af024 _NSObj
+0x00c pnsFirstChild : (null)
+0x010 dwNameSeg : 0x4349505f
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : 0x899af394 _NSObj
+0x01c ObjData : _ObjData
+0x030 Context : (null)
+0x034 dwRefCount : 0
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899af3f4))
(*((ACPI!_ObjData *)0x899af3f4)) [Type: _ObjData]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x8 [Type: unsigned short] OBJTYPE_METHOD=0x8
[+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 : 0x17 [Type: unsigned long]
[+0x010] pbDataBuff : 0x899af41c : 0x0 [Type: unsigned char *]
0: kd> db 0x899af3d8
899af3d8 94 f3 9a 89 68 f0 9a 89-24 f0 9a 89 00 00 00 00 ....h...$.......
899af3e8 5f 50 49 43 30 f3 9a 89-94 f3 9a 89 00 00 08 00 _PIC0...........
899af3f8 00 00 00 00 00 00 00 00-17 00 00 00 1c f4 9a 89 ................
899af408 00 00 00 00 00 00 00 00-48 4d 45 54 24 00 00 00 ........HMET$...
899af418 00 f0 9a 89 00 00 00 00-00 00 00 00 00 00 00 00 ................
899af428 00 00 00 00 01 70 68 47-50 49 43 00 48 4f 52 47 .....phGPIC.HORG
899af438 34 00 00 00 00 f0 9a 89-39 0e ab f7 84 00 00 00 4.......9.......
899af448 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................


0: kd> dt _methodobj 0x899af41c
ACPI!_MethodObj
+0x000 Mutex : _MutexObj
+0x010 bMethodFlags : 0x1 ''
+0x011 abCodeBuff : [1] "p"
0: kd> db 0x899af41c
899af41c 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899af42c 01 70 68 47 50 49 43
00-48 4f 52 47 34 00 00 00 .phGPIC.HORG4...


第二部分:
0: kd> t
eax=f742162e ebx=89dee000 ecx=00000001 edx=00000001 esi=89defed8 edi=00000001
eip=f742162e esp=f789a118 ebp=f789a130 iopl=0 nv up ei ng nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000286
ACPI!Method:
f742162e 55 push ebp
0: kd> kc
#
00 ACPI!Method
01 ACPI!ParseTerm
02 ACPI!RunContext
03 ACPI!InsertReadyQueue
04 ACPI!RestartContext
05 ACPI!SyncLoadDDB
06 ACPI!AMLILoadDDB
07 ACPI!ACPIInitializeDDB
08 ACPI!ACPIInitializeDDBs
09 ACPI!ACPIInitialize
0a ACPI!ACPIInitStartACPI
0b ACPI!ACPIRootIrpStartDevice
0c ACPI!ACPIDispatchIrp
0d nt!IofCallDriver
0e nt!IopSynchronousCall
0f nt!IopStartDevice
10 nt!PipProcessStartPhase1
11 nt!PipProcessDevNodeTree
12 nt!PipDeviceActionWorker
13 nt!PipRequestDeviceAction
14 nt!IopInitializeBootDrivers
15 nt!IoInitSystem
16 nt!Phase1Initialization
17 nt!PspSystemThreadStartup
18 nt!KiThreadStartup

if ((rc = CreateNameSpaceObject(pctxt->pheapCurrent,
(PSZ)pterm->pdataArgs[0].pbDataBuff,
pctxt->pnsScope, pctxt->powner,
&pterm->pnsObj, 0)) == STATUS_SUCCESS)
{

0: kd> t
Breakpoint 47 hit
eax=89da334c ebx=89dee000 ecx=00000001 edx=00000001 esi=89defed8 edi=89defef8
eip=f741dc18 esp=f789a0e0 ebp=f789a114 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
ACPI!CreateNameSpaceObject:
f741dc18 55 push ebp
0: kd> dv
pheap = 0x89da3000
pszName = 0x89da3380 "\_PIC" 名字
pnsScope = 0x89da3024 目录路径
powner = 0x89da3330 所有者
ppns = 0x89defef8
dwfNS = 0
pns = 0x00000008
rc = 0n-146678760
pnsParent = 0x89da3380
iLen = 0n-1982189532

else
{
PMETHODOBJ pm = (PMETHODOBJ)pterm->pnsObj->ObjData.pbDataBuff;

#ifdef DEBUGGER
AddObjSymbol(pm->abCodeBuff, pterm->pnsObj);
#endif
MEMZERO(pterm->pnsObj->ObjData.pbDataBuff,
pterm->pnsObj->ObjData.dwDataLen);
pm->bMethodFlags = *(pctxt->pbOp - 1);
MEMCPY(&pm->abCodeBuff, pctxt->pbOp, pterm->pbOpEnd - pctxt->pbOp);
pctxt->pbOp = pterm->pbOpEnd;
}


第三部分:

NTSTATUS LOCAL Method(PCTXT pctxt, PTERM pterm)
{
TRACENAME("METHOD")
NTSTATUS rc = STATUS_SUCCESS;

ENTER(2, ("Method(pctxt=%x,pbOp=%x,pterm=%x)\n",
pctxt, pctxt->pbOp, pterm));

if ((rc = CreateNameSpaceObject(pctxt->pheapCurrent,
(PSZ)pterm->pdataArgs[0].pbDataBuff,
pctxt->pnsScope, pctxt->powner,
&pterm->pnsObj, 0)) == STATUS_SUCCESS)
{
pterm->pnsObj->ObjData.dwDataType = OBJTYPE_METHOD;
pterm->pnsObj->ObjData.dwDataLen = (ULONG)(FIELD_OFFSET(METHODOBJ,
abCodeBuff) +
pterm->pbOpEnd -
pctxt->pbOp);

if ((pterm->pnsObj->ObjData.pbDataBuff =
NEWMEOBJ(pctxt->pheapCurrent, pterm->pnsObj->ObjData.dwDataLen))
== NULL)
{
rc = AMLI_LOGERR(AMLIERR_OUT_OF_MEM,
("Method: failed to allocate method buffer"));
}
else
{
PMETHODOBJ pm = (PMETHODOBJ)pterm->pnsObj->ObjData.pbDataBuff;

#ifdef DEBUGGER
AddObjSymbol(pm->abCodeBuff, pterm->pnsObj);
#endif
MEMZERO(pterm->pnsObj->ObjData.pbDataBuff,
pterm->pnsObj->ObjData.dwDataLen);
pm->bMethodFlags = *(pctxt->pbOp - 1);
MEMCPY(&pm->abCodeBuff, pctxt->pbOp, pterm->pbOpEnd - pctxt->pbOp);
pctxt->pbOp = pterm->pbOpEnd;
}
}

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

0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_List *)0x899af2d0)
((ACPI!_List *)0x899af2d0) : 0x899af2d0 [Type: _List *]
[+0x000] plistPrev : 0x899af268 [Type: _List *]
[+0x004] plistNext : 0x899af394 [Type: _List *]
0: kd> db 0x899af394
899af394 d0 f2 9a 89 d8 f3 9a 89-24 f0 9a 89 00 00 00 00 ........$.......
899af3a4 47 50 49 43 30 f3 9a 89-00 00 00 00 00 00 01 00 GPIC0...........
899af3b4 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899af3c4 00 00 00 00 00 00 00 00-48 4e 53 4f 44 00 00 00 ........HNSOD...
899af3d4 00 f0 9a 89 94 f3 9a 89-68 f0 9a 89 24 f0 9a 89 ........h...$...
899af3e4 00 00 00 00 5f 50 49 43-30 f3 9a 89 94 f3 9a 89 ...._PIC0.......
899af3f4 00 00 08 00 00 00 00 00-00 00 00 00 17 00 00 00 ................
899af404 1c f4 9a 89 00 00 00 00-00 00 00 00 48 4d 45 54 ............HMET
0: kd> dt _nsobj 0x899af394
ACPI!_NSObj
+0x000 list : _List
+0x008 pnsParent : 0x899af024 _NSObj
+0x00c pnsFirstChild : (null)
+0x010 dwNameSeg : 0x43495047
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : (null)
+0x01c ObjData : _ObjData
+0x030 Context : (null)
+0x034 dwRefCount : 0

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

为什么顶尖团队都在用C#拦截器?揭秘企业级项目的架构设计精髓

第一章:为什么顶尖团队都在用C#拦截器?在现代软件架构中,横切关注点(如日志记录、异常处理、性能监控)的管理成为提升系统可维护性的关键。C#拦截器通过在方法调用前后注入逻辑,使开发者无需修改核心业务代…

作者头像 李华
网站建设 2026/6/12 0:49:59

为什么你的C#批量插入总是失败?DBA不会告诉你的6大避坑原则

第一章:为什么你的C#批量插入总是失败?DBA不会告诉你的6大避坑原则在高并发或大数据量场景下,C#中执行批量数据插入操作时,开发者常遭遇性能骤降、事务超时甚至数据库连接崩溃等问题。这些问题背后往往隐藏着被忽视的关键设计缺陷…

作者头像 李华
网站建设 2026/6/4 3:36:59

PyCharm激活码永久免费?与HeyGem软件本身无关

HeyGem数字人视频生成系统:从技术实现到工程落地的全解析 在AI内容创作日益普及的今天,如何快速、安全地生成高质量“会说话”的数字人视频,已成为教育、电商、媒体等行业关注的核心问题。传统的视频制作方式依赖人工剪辑与口型对齐&#xff…

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

三极管相关知识汇总

摘要: 三极管(BJT)是一种双极型半导体器件,具有电流放大和开关功能,是电子电路的基础元件。其核心结构由NPN或PNP型三层半导体构成,包含基极、集电极和发射极三个电极。工作原理基于发射结正偏、集电结反偏条件下,通过基极电流控制集电极电流。三极管有三种工作区域(放…

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

基于豆包、Claude识别的中国 A 股人工智能领域企业数据 2010-2024

2030基于豆包、Claude识别的中国 A 股人工智能领域企业数据 2010-2024数据简介在智能技术快速发展的浪潮中,通过企业的经营范围文本精准识别中国 A 股市场中属于人工智能领域的企业,是深入探究该领域发展规律、评估产业发展潜力的关键前提。其重要性不仅…

作者头像 李华
网站建设 2026/6/12 12:26:04

FFmpeg是否集成?HeyGem很可能内置用于格式转码

FFmpeg是否集成?HeyGem很可能内置用于格式转码 在数字人技术迅速落地的今天,越来越多的企业开始采用AI驱动的口型同步系统来生成宣传视频、教学内容或虚拟客服。这类工具的核心价值在于“易用性”与“自动化”——用户只需上传一段音频或视频&#xff0…

作者头像 李华