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

ACPI!PciConfigSpaceHandlerWorker函数中的simpleCompletion=ACPI!RestartCtxtCallback

ACPI!PciConfigSpaceHandlerWorker函数中的simpleCompletion=ACPI!RestartCtxtCallback

ACPI!RestartCtxtCallback真是ACPI里面重要的断点函数

当然还有ACPI!RestartContext

当然还有ACPI!RunContext和ACPI!RunContext+0x142

当然还有ACPI!AsyncCallBack


NTSTATUS
EXPORT
PciConfigSpaceHandlerWorker(
IN PNSOBJ AcpiObject,
IN NTSTATUS CompletionStatus,
IN POBJDATA Result,
IN PVOID Context
)
{

PciConfigSpaceHandlerWorkerExit:

if (state->RunCompletion) {

if (state->CompletionHandlerType ==
PCISUPP_COMPLETION_HANDLER_PFNAA) {

simpleCompletion = (PFNAA)state->CompletionHandler;

simpleCompletion(state->CompletionContext);

} else {

lessSimpleCompletion = (PFNACB)state->CompletionHandler;

lessSimpleCompletion(state->PciObj,
status,
NULL,
state->CompletionContext);
}


1: kd> dt PCI_CONFIG_STATE 0x89987378
ACPI!PCI_CONFIG_STATE
+0x000 AccessType : 1
+0x004 OpRegion : 0x899b0b50 _NSObj
+0x008 Address : 0xd8
+0x00c Size : 4
+0x010 Data : 0x8997dc28 -> 0x40e98102
+0x014 Context : 0
+0x018 CompletionHandler : 0xf7420914 Void
+0x01c CompletionContext : 0x8997c0ac Void
+0x020 PciObj : 0x899affac _NSObj
+0x024 ParentObj : (null)
+0x028 CompletionHandlerType : 0 #define PCISUPP_COMPLETION_HANDLER_PFNAA 0
+0x02c Flags : 0x100
+0x030 RunCompletion : 0n1
+0x034 Slot : _PCI_SLOT_NUMBER
+0x038 Bus : 0 ''
+0x039 IsPciDeviceResult : 0 ''
1: kd> u 0xf7420914
ACPI!RestartCtxtCallback [d:\srv03rtm\base\busdrv\acpi\driver\amlinew\sched.c @ 401]:
f7420914 55 push ebp
f7420915 8bec mov ebp,esp
f7420917 56 push esi
f7420918 8b7508 mov esi,dword ptr [ebp+8]
f742091b 57 push edi
f742091c 6a01 push 1
f742091e bf603f43f7 mov edi,offset ACPI!`string' (f7433f60)
f7420923 57 push edi


#define PCISUPP_COMPLETION_HANDLER_PFNAA 0
#define PCISUPP_COMPLETION_HANDLER_PFNACB 1

参考:state->CompletionHandlerType的赋值

NTSTATUS LOCAL WriteCookAccess(PCTXT pctxt, PWRCOOKACC pwca, NTSTATUS rc)
{

rc = pwca->prsa->pfnCookAccess(RSACCESS_READ, pwca->pnsBase,
(ULONG_PTR)pwca->dwAddr,
pwca->dwSize,
&pwca->dwDataTmp,
pwca->prsa->uipCookParam,
RestartCtxtCallback,
&pctxt->CtxtData);


NTSTATUS
EXPORT
PciConfigSpaceHandler (
ULONG AccessType,
PNSOBJ OpRegion,
ULONG Address,
ULONG Size,
PULONG Data,
ULONG Context,
PFNAA CompletionHandler,
PVOID CompletionContext
)
{

state->AccessType = AccessType;
state->OpRegion = OpRegion;
state->Address = Address;
state->Size = Size;
state->Data = Data;
state->Context = Context;
state->CompletionHandler = CompletionHandler;
state->CompletionContext = CompletionContext;
state->PciObj = OpRegion->pnsParent;
state->RunCompletion = INITIAL_RUN_COMPLETION;

1: kd> kc
#
00 ACPI!AMLIAsyncEvalObject
01 ACPI!ACPIGet
02 ACPI!GetPciAddressWorker
03 ACPI!GetPciAddress
04 ACPI!PciConfigSpaceHandlerWorker
05 ACPI!PciConfigSpaceHandler
06 ACPI!InternalOpRegionHandler
07 ACPI!WriteCookAccess
08 ACPI!RunContext
09 ACPI!InsertReadyQueue
0a ACPI!RestartCtxtPassive
0b ACPI!ACPIWorker
0c nt!PspSystemThreadStartup
0d nt!KiThreadStartup

参考结束:state->CompletionHandlerType


if (state->RunCompletion) {

if (state->CompletionHandlerType ==
PCISUPP_COMPLETION_HANDLER_PFNAA) {

simpleCompletion = (PFNAA)state->CompletionHandler;

simpleCompletion(state->CompletionContext);

}

VOID EXPORT RestartCtxtCallback(PCTXTDATA pctxtdata)
{
TRACENAME("RESTARTCTXTCALLBACK")
PCTXT pctxt = CONTAINING_RECORD(pctxtdata, CTXT, CtxtData);

ENTER(2, ("RestartCtxtCallback(pctxt=%x)\n", pctxt));

ASSERT(pctxt->dwSig == SIG_CTXT);
LOGSCHEDEVENT('RSCB', (ULONG_PTR)pctxt, 0, 0);
RestartContext(pctxt,
(BOOLEAN)((pctxt->dwfCtxt & CTXTF_ASYNC_EVAL) == 0));

EXIT(2, ("RestartCtxtCallback!\n"));
} //RestartCtxtCallback

1: kd> kc
#
00 ACPI!RestartCtxtCallback
01 ACPI!PciConfigSpaceHandlerWorker
02 ACPI!GetPciAddressWorker
03 ACPI!ACPIGetWorkerForInteger
04 ACPI!AsyncCallBack
05 ACPI!RunContext
06 ACPI!DispatchCtxtQueue
07 ACPI!StartTimeSlicePassive
08 ACPI!ACPIWorker
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
1: kd> dv
pctxtdata = 0x8997c0ac

1: kd> dt CTXT 0x8997c0ac-ac
ACPI!CTXT
+0x000 dwSig : 0x54585443
+0x004 pbCtxtEnd : 0x8997e000 "TSER"
+0x008 listCtxt : _List
+0x010 listQueue : _List
+0x018 pplistCtxtQueue : (null)
+0x01c plistResources : 0x8997c198 _List
+0x020 dwfCtxt : 0x120
+0x024 pnsObj : 0x899b4938 _NSObj
+0x028 pnsScope : 0x899b40ac _NSObj
+0x02c powner : 0x8997c1ac _objowner
+0x030 pcall : 0x8997dd18 _call
+0x034 pnctxt : (null)
+0x038 dwSyncLevel : 0xf
+0x03c pbOp : 0x899b4122 ""
+0x040 Result : _ObjData
+0x054 pfnAsyncCallBack : 0xf7407364 void ACPI!ACPIGetWorkerForInteger+0
+0x058 pdataCallBack : 0x899c634c _ObjData
+0x05c pvContext : 0x899c6320 Void
+0x060 Timer : _KTIMER
+0x088 Dpc : _KDPC
+0x0a8 pheapCurrent : 0x8997c0bc _heap
+0x0ac CtxtData : _ctxtdata
+0x0bc LocalHeap : _heap
1: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_heap *)0x8997c0bc))
(*((ACPI!_heap *)0x8997c0bc)) [Type: _heap]
[+0x000] dwSig : 0x50414548 [Type: unsigned long]
[+0x004] pbHeapEnd : 0x8997dc08 : 0x57 [Type: unsigned char *]
[+0x008] pheapHead : 0x8997c0bc [Type: _heap *]
[+0x00c] pheapNext : 0x0 [Type: _heap *]
[+0x010] pbHeapTop : 0x8997c1f0 : 0x0 [Type: unsigned char *]
[+0x014] plistFreeHeap : 0x0 [Type: _List *]
[+0x018] Heap [Type: _heapobjhdr]
1: kd> db framehdr 0x8997dc08
Couldn't resolve error at 'framehdr 0x8997dc08'
1: kd> dt framehdr 0x8997dc08
ACPI!FRAMEHDR
+0x000 dwSig : 0x41435257
+0x004 dwLen : 0x30
+0x008 dwfFrame : 3
+0x00c pfnParse : 0xf7417c1d long ACPI!WriteCookAccess+0


1: kd> dt _WRCOOKACC 0x8997dc08
ACPI!_wrcookacc
+0x000 FrameHdr : _framehdr
+0x010 pnsBase : 0x899b0b50 _NSObj
+0x014 prsa : 0x89996d68 _rsaccess
+0x018 dwAddr : 0xd8
+0x01c dwSize : 4
+0x020 dwData : 0x40e98102
+0x024 dwDataMask : 0xffffffff
+0x028 dwDataTmp : 0
+0x02c fPreserve : 0 ''

1: kd> kc
#
00 ACPI!RestartContext
01 ACPI!RestartCtxtCallback
02 ACPI!PciConfigSpaceHandlerWorker

03 ACPI!GetPciAddressWorker
04 ACPI!ACPIGetWorkerForInteger
05 ACPI!AsyncCallBack
06 ACPI!RunContext
07 ACPI!DispatchCtxtQueue
08 ACPI!StartTimeSlicePassive
09 ACPI!ACPIWorker
0a nt!PspSystemThreadStartup
0b nt!KiThreadStartup
1: kd> dv
pctxt = 0x8997c000
fDelayExecute = 0x00 ''

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

相关文章:

  • WeMod专业版终极解锁指南:快速获取完整特权功能
  • 武大团队SafeGRPO:多模态AI实现安全守卫式思考训练
  • 供应链库存做不起来,不在指标不对,而在没有系统把它跑起来
  • 暗黑破坏神II角色定制工具:突破游戏限制的终极解决方案
  • 网络工程师必看:搞懂核心节点为啥总崩(附排查神技+实战套路)
  • SSM206 篮球NBA周边商城vue
  • 【大数据毕设源码分享】基于springboot的高校电子图书馆的大数据平台规划与设计(程序+文档+代码讲解+一条龙定制)
  • LaTeX模板终极指南:高效完成学术论文排版的完整解决方案
  • 3分钟学会小红书无水印下载:XHS-Downloader保姆级教程
  • 大气层系统终极指南:解锁Switch无限潜能的完整解决方案
  • 终极指南:3步快速掌握Cowabunga Lite免越狱个性化定制
  • 【AI开发者收藏】大模型训练核心技术:5种学习范式与数据处理指南
  • 大模型应用开发工程师年薪破百万!掌握RAG+Agent+微调三大核心能力,抓住2025年AI最大风口
  • AlwaysOnTop窗口置顶工具:多任务管理的智能解决方案
  • Windows平台ADB和Fastboot驱动一键安装完整指南
  • 解锁AMD Ryzen潜能:SMU调试工具全方位实战手册
  • Windows苹果驱动终极解决方案:3步搞定iPhone连接和USB网络共享
  • WeChatFerry微信机器人框架:从零到精通的完整实战手册
  • 揭秘Testsigma:开源自动化测试平台极速搭建全攻略
  • 如何快速配置Switch大气层系统:新手完整避坑指南
  • DownKyi:5个必备技巧掌握B站视频下载工具
  • Navicat无限试用终极指南:3步永久解决14天限制
  • 不是吧,寒假 30 天学个黑客技术,有那么难吗?
  • Web 渗透实战:OWASP Top 10 核心漏洞 从原理到完整防御
  • Hystrix隔离策略深度解析:从架构原理到生产实践
  • 3分钟搞定网易云音乐NCM格式解密:超简单操作指南
  • 如何构建高效的茅台预约自动化系统:从痛点分析到成功实施
  • DBeaver驱动下载失败的终极解决方案:5分钟快速修复指南
  • 如何快速部署macOS虚拟机:OneClick-macOS-Simple-KVM完整指南
  • 探索电气热耦合潮流计算程序:基于Matlab的实现之旅