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,

相关推荐
sitelist11 天前
ACPI!Store函数和hal!HalSetBusDataByOffset的关系----非常重要
store·halsetbusdata
molly cheung2 个月前
Vue3:watch与watchEffect的异同
vue.js·watch·store·watcheffect
G皮T7 个月前
【Elasticsearch】映射:详解 _source & store 字段
大数据·elasticsearch·搜索引擎·映射·store·mappings·_source
Little_Code1 年前
uniapp 如何使用vuex store (亲测)
uni-app·vuex·store
学前端的小朱1 年前
Redux的简介及其在React中的应用
前端·javascript·react.js·redux·store
左直拳2 年前
项目应用多级缓存示例
redis·store·多级缓存·前端缓存
儒雅的烤地瓜2 年前
【小程序 - 加强】自定义组件、使用npm包、全局数据共享、分包_05
小程序·npm·mobx·promise·store·小程序分包·behavior