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,