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

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,

http://www.cnnetsun.cn/news/739645.html

相关文章:

  • OpCore Simplify:一键解决黑苹果配置难题的终极方案
  • 猫抓Cat-Catch终极指南:10大实用技巧助你高效捕获网页媒体资源
  • BiliTools智能视频总结:5倍速获取B站核心知识的革命性工具
  • OpCore Simplify:智能化黑苹果EFI配置解决方案深度解析
  • OpCore Simplify完整指南:5步快速构建完美Hackintosh系统
  • 终极指南:如何用AI文字生成专业CAD图纸
  • Python办公自动化避坑指南:Word格式处理的那些‘神操作‘
  • CreamApi游戏DLC自动化解锁工具:跨平台智能管理终极指南
  • AI视频摘要神器:5分钟掌握B站内容精华
  • IDM无限期使用终极技术指南:注册表权限锁定方案深度解析
  • Windows系统优化工具:5分钟彻底清理电脑冗余组件!
  • OpCore Simplify终极教程:如何在15分钟内完成OpenCore EFI自动化配置
  • OpCore Simplify智能更新系统:让黑苹果始终保持最新状态
  • fft npainting lama启动失败怎么办?常见问题全解析
  • Zotero PDF翻译插件:学术研究的智能化助手
  • 零配置启动Qwen3-0.6B,Ollama让大模型触手可及
  • 开箱即用的AI工具:UNet抠图镜像让工作更高效
  • OpCore Simplify完整指南:轻松构建专业级Hackintosh配置
  • MinerU提取质量评估:人工校验与自动评分方法
  • 电商搜索优化实战:Qwen3-Reranker-4B提升多语言商品匹配率
  • 猫抓资源嗅探器:网页媒体资源智能捕获与下载解决方案
  • Kubernetes 安全机制
  • OpCore Simplify:十分钟完成黑苹果EFI配置的智能解决方案
  • kotlin 延迟属性
  • 5个关键步骤:用LLM Guard打造坚不可摧的AI安全防护体系
  • 智能游戏翻译终极指南:零基础实现自动化本地化方案
  • BongoCat桌面宠物定制全攻略:从零打造专属Live2D猫咪模型
  • 语音开发者工具箱:5个必备声纹识别镜像推荐
  • OpCore Simplify黑苹果配置终极简化指南:从复杂到简单的一键解决方案
  • YOLO11开箱即用,5分钟实现图像识别应用