news 2026/4/23 11:34:54

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/18 19:36:24

基于SpringBoot的水产养殖系统毕业设计

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的水产养殖系统,以提升水产养殖行业的智能化管理水平。具体研究目的如下:提高水产养殖生产效…

作者头像 李华
网站建设 2026/4/23 11:28:29

基于SpringBoot的玩具租赁系统毕设源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的玩具租赁系统,以满足现代家庭对于儿童玩具租赁的需求。具体研究目的如下:构建一个功能完善…

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

Springboot小树立社工服务中心管理信息系统9mpe3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:案主,社工,服务信息,服务类型,招聘信息,招聘类型,服务订单,分配信息,服务内容,评价打分,退单信息,工资信息,活动支出,外界捐助,考勤信息开题报告内容一、研究背景与意义随着社会治理体系的不断完善,公众对社区服务的需求呈现多…

作者头像 李华
网站建设 2026/4/10 8:23:24

【dz-1015】基于STM32单片机智能鱼缸

摘要 在观赏鱼养殖领域,水质状态、水温稳定性及饲喂合理性对鱼类生存质量与健康状况起着决定性作用。传统鱼缸管理多依赖人工换水、经验控温及定时投喂,存在水质恶化预警滞后、水温波动大、饲喂不规律等问题,难以满足精细化养殖的严苛需求。…

作者头像 李华
网站建设 2026/4/17 22:11:21

SenseVoice多语言识别实战:3步搞定50种语言测试

SenseVoice多语言识别实战:3步搞定50种语言测试 你是不是也遇到过这样的问题?作为跨境电商的小老板,每天收到大量来自不同国家客户的语音留言、客服录音、产品反馈,但语言五花八门——英语、西班牙语、日语、阿拉伯语……靠人工翻…

作者头像 李华