news 2026/9/17 12:39:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 ''

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 13:06:55

WeMod专业版终极解锁指南:快速获取完整特权功能

WeMod专业版终极解锁指南:快速获取完整特权功能 【免费下载链接】Wemod-Patcher WeMod patcher allows you to get some WeMod Pro features absolutely free 项目地址: https://gitcode.com/gh_mirrors/we/Wemod-Patcher 想要完全免费体验WeMod专业版的所有…

作者头像 李华
网站建设 2026/9/14 11:22:00

武大团队SafeGRPO:多模态AI实现安全守卫式思考训练

在人工智能飞速发展的今天,多模态大语言模型就像是能够同时看懂图片和理解文字的智能助手,正在改变着我们的生活。然而,就像一个聪明但缺乏常识的孩子,这些AI系统在面对复杂的图文组合时,经常会产生一些令人担忧的安全…

作者头像 李华
网站建设 2026/9/17 12:39:21

供应链库存做不起来,不在指标不对,而在没有系统把它跑起来

你可能也遇到过这样的情况: 库存报表、指标看得明明白白,可到关键时刻,库存还是不准。有的原材料堆积成山,有的关键零件缺货。问题明明在数据里,但总是发现得太晚。很多人第一反应是指标选错了,或者分析不够…

作者头像 李华
网站建设 2026/9/14 10:48:02

暗黑破坏神II角色定制工具:突破游戏限制的终极解决方案

暗黑破坏神II角色定制工具:突破游戏限制的终极解决方案 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 在暗黑破坏神II的冒险旅程中,每个玩家都渴望打造独一无二的英雄形象…

作者头像 李华
网站建设 2026/9/16 8:34:10

SSM206 篮球NBA周边商城vue

目录SSM206 篮球NBA周边商城Vue摘要开发技术源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!SSM206 篮球NBA周边商城Vue摘要 该系统基于SSM(SpringSpringMVCMyBatis)框架与Vue.js前端技术开发,专为篮…

作者头像 李华