\_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

相关推荐
高耳机High-Earphone1 年前
不只是请求和响应:使用Fiddler抓包URL和Method全指南(中)
网络协议·测试工具·http·fiddler·method·url·get/post
旷野历程2 年前
Java 中 Method 和 MethodSignature 区别
method·methodsignature
丁总学Java2 年前
项目实战:中央控制器实现(3)-优化Controller,处理普通的请求参数
java·method·parameter·getparameters·gettype·getname·parseint
丁总学Java2 年前
微头条项目实战:新增RequestHeader注解
java·method·parameter·annotation
丁总学Java2 年前
项目实战:中央控制器实现(1)-基本功能实现-调用Controller中的方法
java·method·servletcontext·setattribute·getattribute·getmethod·tolowercase
丁总学Java2 年前
项目实战:组件扫描(4)-筛选带有RequestMapping注解的bean实例
java·stream·filter·method·getclass
BruceGerGer2 年前
flutter开发实战-MethodChannel实现flutter与iOS双向通信
flutter·ios·cocoa·相互通信·method·channel·flutterplugin