news 2026/5/1 7:05:38

ACPI!PciConfigSpaceHandler到ACPI!PciConfigSpaceHandlerWorker到ACPI!GetPciAddress

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!PciConfigSpaceHandler到ACPI!PciConfigSpaceHandlerWorker到ACPI!GetPciAddress

ACPI!PciConfigSpaceHandler到ACPI!PciConfigSpaceHandlerWorker到ACPI!GetPciAddress

ACPI!GetPciAddress函数较复杂,可以单独研究。


ACPI!PciConfigSpaceHandlerWorker+0xcf
ACPI!PciConfigSpaceHandlerWorker+0xd4


1: kd> kc
#
00 ACPI!PciConfigSpaceHandler
01 ACPI!InternalOpRegionHandler
02 ACPI!WriteCookAccess
03 ACPI!RunContext
04 ACPI!InsertReadyQueue
05 ACPI!RestartCtxtPassive
06 ACPI!ACPIWorker
07 nt!PspSystemThreadStartup
08 nt!KiThreadStartup
1: kd> dv
AccessType = 1
OpRegion = 0x899b0b50
Address = 0xd8
Size = 4
Data = 0x8997dc28
Context = 0
CompletionHandler = 0xf7420914
CompletionContext = 0x8997c0ac


1: kd> t
Breakpoint 48 hit
eax=899affac ebx=00008000 ecx=8997c0ac edx=89987378 esi=899affac edi=899873b4
eip=f740d62c esp=f791ac74 ebp=f791ac8c 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!PciConfigSpaceHandlerWorker:
f740d62c 55 push ebp
1: kd> kc
#
00 ACPI!PciConfigSpaceHandlerWorker
01 ACPI!PciConfigSpaceHandler
02 ACPI!InternalOpRegionHandler
03 ACPI!WriteCookAccess
04 ACPI!RunContext
05 ACPI!InsertReadyQueue
06 ACPI!RestartCtxtPassive
07 ACPI!ACPIWorker
08 nt!PspSystemThreadStartup
09 nt!KiThreadStartup
1: kd> dv
AcpiObject = 0x899affac
CompletionStatus = 0n0
Result = 0x00000000
Context = 0x89987378


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
+0x02c Flags : 0
+0x030 RunCompletion : 0n-1
+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
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 : 0x130
+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

if (!state->OpRegion->Context) { 不符合条件


state->PciObj = (PNSOBJ)state->OpRegion->Context;

pciDeviceFilter = (PDEVICE_EXTENSION)state->PciObj->Context;

if (pciDeviceFilter == NULL) { 不符合条件 eax=899c0d58

1: kd> p
eax=899c0d58 ebx=89987378 ecx=899873a8 edx=899b0b50 esi=00000103 edi=899b0b80
eip=f740d6a1 esp=f791ac20 ebp=f791ac70 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!PciConfigSpaceHandlerWorker+0x75:
f740d6a1 85c0 test eax,eax

//
// If interface is non-zero, we have enumerated this PCI
// device. So use the PCI driver to do config ops.
// If it is zero, make some attempt to figure out what
// device this request is for. The result will be
// used in calls to the HAL.
//如果接口非零,则表示我们已经枚举了此PCI设备。因此,使用PCI驱动程序进行配置操作。
//
如果值为零,请尝试确定此请求针对的是哪个设备。该结果将用于对HAL的调用。
if (!interface) {

if (!(state->Flags & PCISUPP_GOT_SLOT_INFO)) {

state->Flags |= PCISUPP_GOT_SLOT_INFO;

status = GetPciAddress(state->PciObj,
PciConfigSpaceHandlerWorker,
(PVOID)state,
&state->Bus,
&state->Slot);


1: kd> p
eax=899873b0 ebx=89987378 ecx=00000100 edx=899b0b50 esi=00000103 edi=00000000
eip=f740d6fb esp=f791ac0c ebp=f791ac70 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
ACPI!PciConfigSpaceHandlerWorker+0xcf:
f740d6fb e838fcffff call ACPI!GetPciAddress (f740d338)
1: kd> bp f740d6fb

49 e Disable Clear f740d6fb 0001 (0001) ACPI!PciConfigSpaceHandlerWorker+0xcf

这个断点下面会用到好多次
ACPI!PciConfigSpaceHandlerWorker+0xcf


1: kd> t
eax=899873b0 ebx=89987378 ecx=00000100 edx=899b0b50 esi=00000103 edi=00000000
eip=f740d338 esp=f791ac08 ebp=f791ac70 iopl=0 nv up ei pl nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000206
ACPI!GetPciAddress:
f740d338 55 push ebp
1: kd> kc
#
00 ACPI!GetPciAddress
01 ACPI!PciConfigSpaceHandlerWorker
02 ACPI!PciConfigSpaceHandler
03 ACPI!InternalOpRegionHandler
04 ACPI!WriteCookAccess
05 ACPI!RunContext
06 ACPI!InsertReadyQueue
07 ACPI!RestartCtxtPassive
08 ACPI!ACPIWorker
09 nt!PspSystemThreadStartup
0a nt!KiThreadStartup
1: kd> dv
PciObj = 0x899affac
CompletionRoutine = 0xf740d62c
Context = 0x89987378
Bus = 0x899873b0 ""
Slot = 0x899873ac
1: kd> kv
# ChildEBP RetAddr Args to Child
00 f791ac04 f740d700 899affac f740d62c 89987378 ACPI!GetPciAddress (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\pciopregion.c @ 951]
01 f791ac70 f740d9dd 899affac 00000000 00000000 ACPI!PciConfigSpaceHandlerWorker+0xd4 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\srv03rtm\base\busdrv\acpi\driver\nt\pciopregion.c @ 654]
02 f791ac8c f742813d 00000001 899b0b50 000000d8 ACPI!PciConfigSpaceHandler+0x6d (FPO: [Non-Fpo]) (CONV: cdecl) [d:\srv03rtm\base\busdrv\acpi\driver\nt\pciopregion.c @ 424]
03 f791acbc f7417e5f 00000001 899b0b50 000000d8 ACPI!InternalOpRegionHandler+0x67 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\srv03rtm\base\busdrv\acpi\driver\shared\acpioprg.c @ 160]
04 f791acf4 f741d832 8997c000 8997dc08 00000000 ACPI!WriteCookAccess+0x242 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\srv03rtm\base\busdrv\acpi\driver\amlinew\object.c @ 1437]
05 f791ad1c f7420671 00000000 4556414c 8997c000 ACPI!RunContext+0x122 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\srv03rtm\base\busdrv\acpi\driver\amlinew\ctxt.c @ 588]
06 f791ad44 f742079a 8997c000 00000000 f743a948 ACPI!InsertReadyQueue+0x155 (FPO: [Non-Fpo]) (CONV: cdecl) [d:\srv03rtm\base\busdrv\acpi\driver\amlinew\sched.c @ 275]
07 f791ad64 f74133c5 899050e8 00000000 89981ca0 ACPI!RestartCtxtPassive+0x54 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\amlinew\sched.c @ 384]
08 f791adac 80d391f0 00000000 00000000 00000000 ACPI!ACPIWorker+0xbf (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\worker.c @ 302]
09 f791addc 80b00d52 f7413306 00000000 00000000 nt!PspSystemThreadStartup+0x2e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ps\create.c @ 2213]
0a 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 [d:\srv03rtm\base\ntos\ke\i386\threadbg.asm @ 81]
1: kd> bp f740d700
返回地址加上断点:
50 e Disable Clear f740d700 0001 (0001) ACPI!PciConfigSpaceHandlerWorker+0xd4

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

SpringMVC深度解析从基础架构到实战应用的全方位指南

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 持续学习,不断…

作者头像 李华
网站建设 2026/4/18 10:51:39

双组分精准快检,汽修年检利器:MEXA-324M汽车尾气测量仪项目实战全解

双组分精准快检,汽修年检利器:MEXA-324M汽车尾气测量仪项目实战全解在汽车维修保养与年检行业对尾气检测效率和精准度要求日益提升的背景下,快速、可靠、易用的CO/HC双组分尾气测量已成为汽修厂故障诊断、排放合规性检测与日常维护的核心工具…

作者头像 李华
网站建设 2026/4/26 22:47:47

为什么高并发普遍用Java不用C++,C#,Rust或go?

2025~2026年的现实情况是:互联网真正“超大规模、高并发、长生命周期、赚钱养家”的核心业务系统,仍然以 Java 占绝对统治地位(尤其是中国互联网大厂和全球很多中大型公司),而 Go、Rust、C、C# 虽然在某些细分场景非常…

作者头像 李华
网站建设 2026/4/18 8:34:56

拒稿率暴跌 90%!虎贲等考 AI:期刊论文从选题到见刊的智能加速器

据《自然》期刊统计,全球 78% 的学术论文因写作问题被拒稿,其中结构性缺陷和学术规范失误占比超 80%。对科研人来说,一篇期刊论文从构思到见刊,往往要经历选题碰壁、文献堆砌、格式错乱、查重超标等多重考验。而虎贲等考 AI 智能写…

作者头像 李华
网站建设 2026/4/18 3:29:14

没CUDA也能玩Live Avatar?云端方案解救配置恐惧症

没CUDA也能玩Live Avatar?云端方案解救配置恐惧症 你是不是也曾经因为想用AI工具,却被“安装CUDA驱动”“配置cuDNN”“PyTorch版本不匹配”这些术语劝退过?尤其是像Live Avatar这种实时数字人直播技术,听起来酷炫,但…

作者头像 李华