news 2026/10/15 21:20:08

ACPI源代码分析ACPI!Store函数分析中的pterm->pdataArgs[0]和pterm->pdataArgs[1]

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI源代码分析ACPI!Store函数分析中的pterm->pdataArgs[0]和pterm->pdataArgs[1]

ACPI源代码分析ACPI!Store函数分析中的pterm->pdataArgs[0]和pterm->pdataArgs[1]

Method (VMPS, 1, NotSerialized)
{
Acquire (OEML, 0xFFFF)
IVOC (0x81, Arg0)
Store (\_SB.PCI0.OEMR, Local0)
Release (OEML)
Return (Local0)
}

Store (\_SB.PCI0.OEMR, Local0)

函数正好有两个参数

第一个参数是pterm->pdataArgs[0]

第2个参数是pterm->pdataArgs[1]


1: kd> kc
#
00 ACPI!Store
01 ACPI!ParseTerm
02 ACPI!RunContext
03 ACPI!DispatchCtxtQueue
04 ACPI!StartTimeSlicePassive
05 ACPI!ACPIWorker
06 nt!PspSystemThreadStartup
07 nt!KiThreadStartup
1: kd> dv
pctxt = 0x8997c000
pterm = 0x8997ddb0
pdata = 0x00000008
1: kd> dx -r1 ((ACPI!_term *)0x8997ddb0)
((ACPI!_term *)0x8997ddb0) : 0x8997ddb0 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0x899b4194 : 0x70 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0x899b41ad : 0x0 [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7439550 [Type: _amlterm *]
[+0x020] pnsObj : 0x0 [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int]
[+0x02c] pdataArgs : 0x8997c158 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c0fc [Type: _ObjData *]
1: kd> dx -r1 ((ACPI!_ObjData *)0x8997c158)
((ACPI!_ObjData *)0x8997c158) : 0x8997c158 [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 : 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 *]
1: kd> dx -r1 ((ACPI!_ObjData *)0x8997c0fc)
((ACPI!_ObjData *)0x8997c0fc) : 0x8997c0fc [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 *]


if ((rc = ValidateTarget(&pterm->pdataArgs[1], OBJTYPE_DATAOBJ,&pdata)) ==
STATUS_SUCCESS)
{
MoveObjData(pterm->pdataResult, &pterm->pdataArgs[0]);
rc = WriteObject(pctxt, pdata, pterm->pdataResult);
}


1: kd> dv pdata
pdata = 0x8997de34

1: kd> dx -r1 ((ACPI!_ObjData *)0x8997de34)
((ACPI!_ObjData *)0x8997de34) : 0x8997de34 [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 *]


MoveObjData(pterm->pdataResult, &pterm->pdataArgs[0]);

1: kd> dx -r1 ((ACPI!_ObjData *)0x8997c0fc)
((ACPI!_ObjData *)0x8997c0fc) : 0x8997c0fc [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 : 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 *]

rc = WriteObject(pctxt, pdata, pterm->pdataResult);


1: kd> dv
pctxt = 0x8997c000
pdataObj = 0x8997de34
pdataSrc = 0x8997c0fc
pafu = 0x00000008


1: kd> dv pterm
pterm = 0x8997ddb0
1: kd> dx -r1 ((ACPI!_term *)0x8997ddb0)
((ACPI!_term *)0x8997ddb0) : 0x8997ddb0 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0x899b4194 : 0x70 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0x899b41ad : 0x0 [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7439550 [Type: _amlterm *]
[+0x020] pnsObj : 0x0 [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int]
[+0x02c] pdataArgs : 0x8997c158 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c0fc [Type: _ObjData *]

1: kd> dt _ObjData 0x8997c158+14//每一个参数占0X14个字节
ACPI!_ObjData
+0x000 dwfData : 0
+0x002 dwDataType : 0x81
+0x004 dwRefCount : 0
+0x004 pdataBase : (null)
+0x008 dwDataValue : 0x8997de34
+0x008 uipDataValue : 0x8997de34
+0x008 pnsAlias : 0x8997de34 _NSObj
+0x008 pdataAlias : 0x8997de34_ObjData
+0x008 powner : 0x8997de34 Void
+0x00c dwDataLen : 0
+0x010 pbDataBuff : (null)
1: kd> ?0x8997c158+14
Evaluate expression: -1986543252 = 8997c16c
1: kd> dx -r1 ((ACPI!_ObjData *)0x8997de34)
((ACPI!_ObjData *)0x8997de34) : 0x8997de34 [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 : 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 *]

typedef enum _OBJTYPES {
OBJTYPE_UNKNOWN = 0,
OBJTYPE_INTDATA,
OBJTYPE_STRDATA,
OBJTYPE_BUFFDATA,
OBJTYPE_PKGDATA,
OBJTYPE_FIELDUNIT,
OBJTYPE_DEVICE,
OBJTYPE_EVENT,
OBJTYPE_METHOD,
OBJTYPE_MUTEX,
OBJTYPE_OPREGION,
OBJTYPE_POWERRES,
OBJTYPE_PROCESSOR,
OBJTYPE_THERMALZONE,
OBJTYPE_BUFFFIELD,
OBJTYPE_DDBHANDLE,
OBJTYPE_DEBUG,
//These are internal object types (not to be exported to the ASL code)
OBJTYPE_INTERNAL = 0x80,
OBJTYPE_OBJALIAS = 0x80,
OBJTYPE_DATAALIAS,
OBJTYPE_BANKFIELD,

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

ACPI!GetPciAddress函数调试断点搜集和3个重要数据结构

ACPI!GetPciAddress函数调试断点搜集和3个重要数据结构ACPI!PciConfigSpaceHandler ACPI!PciConfigSpaceHandlerWorker 1: kd> dt acpi!PCI_CONFIG_STATE0x000 AccessType : Uint4B0x004 OpRegion : Ptr32 _NSObj0x008 Address : Uint4B0x00c Size …

作者头像 李华
网站建设 2026/10/11 14:47:41

Windows 11系统瘦身神器:Win11Debloat让你的电脑重获新生

Windows 11系统瘦身神器:Win11Debloat让你的电脑重获新生 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化…

作者头像 李华
网站建设 2026/10/11 1:28:33

Qwen3-4B镜像免配置优势:一键部署节省90%时间

Qwen3-4B镜像免配置优势:一键部署节省90%时间 1. 为什么Qwen3-4B-Instruct-2507值得你立刻上手? 如果你正在寻找一个既能快速落地、又能稳定输出高质量文本的大模型,那阿里开源的 Qwen3-4B-Instruct-2507 绝对值得关注。它不是简单的参数堆…

作者头像 李华
网站建设 2026/10/12 2:14:04

Lark解析库完整指南:5步掌握Python语法分析核心技术

Lark解析库完整指南:5步掌握Python语法分析核心技术 【免费下载链接】lark Lark is a parsing toolkit for Python, built with a focus on ergonomics, performance and modularity. 项目地址: https://gitcode.com/gh_mirrors/la/lark Lark是一个专注于人体…

作者头像 李华
网站建设 2026/10/15 6:13:58

5分钟快速上手YimMenu:免费GTA5辅助工具完整使用指南

5分钟快速上手YimMenu:免费GTA5辅助工具完整使用指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMe…

作者头像 李华
网站建设 2026/10/12 20:41:10

OpCore Simplify:智能革命,让Hackintosh配置变得前所未有的简单

OpCore Simplify:智能革命,让Hackintosh配置变得前所未有的简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的O…

作者头像 李华