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

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

http://www.jsqmd.com/news/192049/

相关文章:

  • 2025售后完善的海关数据公司TOP5权威推荐:有名的海关数据品牌企业甄选指南 - 工业品网
  • 从零搭建企业级权限中心:基于C#的微服务权限统一管控方案
  • 长尾关键词覆盖:如‘chromedriver下载地址’增加曝光机会
  • 2026必备!自考论文难题TOP10 AI论文网站测评
  • 超越准确率:以稳定性为锚,深入解析特征选择算法的工程实践
  • 电加热隧道炉/高温隧道炉/红外线隧道炉哪家强? - 工业品牌热点
  • 国家安全考量:系统遵守中国法律法规禁止违规应用
  • 进度条+状态信息双重提示:掌握HeyGem当前处理进度
  • 别再手动配置权限了!C#跨平台继承机制自动化实现全攻略
  • AI大模型原理与API使用
  • 2025重庆本土茶叶推荐特色茶馆排名,6大靠谱本土茶品牌精选指南 - 工业推荐榜
  • 【.NET开发者必看】7大C#拦截器应用场景,提升系统扩展性的秘密武器
  • C#网络通信中数据序列化性能优化:9种方法提升传输效率80%以上
  • 数据加密传输实战,C#网络通信安全从入门到精通
  • SSD固态硬盘强烈推荐:加快HeyGem读写视频文件速度
  • 不会写提示词?难怪你的AI总在胡说八道!
  • 2025年安徽靠谱烘焙培训学校排行榜:烘焙培训学校哪家收费合理? - mypinpai
  • Raspberry Pi树莓派不行:算力不足以支撑HeyGem运行
  • Python 开发 Windows 客户端:Web 技术做界面的 5 款核心工具
  • 2026年房产中介管理系统哪家好用?
  • C语言之鹊桥相会
  • 内联数组访问慢?可能是你没用对——高并发场景下的调优实战
  • 微PE官网不相关:系统维护工具与AI视频生成无交集
  • C# Span高性能编程实践(内存安全与零复制深度解析)
  • 同步寄存器的Tsu和Thold
  • 用户权限失控频发?C#中细粒度访问控制的5种实现方案
  • C#批量操作性能提升10倍的秘密:你不知道的5个关键优化点
  • 搜索引擎排名提升:标题包含‘huggingface镜像网站’等热点
  • 内存不足怎么办?建议至少16GB RAM配合RTX 3090起步
  • STM32F407 OLED显示屏驱动开发实战指南