news 2026/8/11 11:03:14

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/7/28 8:46:45

基于SpringBoot的爱心商城系统毕业设计源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的爱心商城系统,以满足现代电子商务领域对于高效、安全、易用的在线购物平台的需求。具体研究目的如下&…

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

基于SpringBoot的甘肃旅游服务平台毕业设计源码

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在构建一个基于SpringBoot框架的甘肃旅游服务平台,以实现甘肃旅游资源的数字化管理和智能化服务。具体研究目的如下:提高甘肃旅游…

作者头像 李华
网站建设 2026/8/8 6:42:00

【dz-1008】基于单片机的环境监测系统设计

摘要 随着人们对生活环境质量关注度的不断提升,对环境参数的精准监测与及时预警变得尤为重要。传统的环境监测方式多依赖人工采样和实验室分析,不仅耗时费力、响应滞后,还存在数据获取不及时、监测范围有限等问题,难以满足实时、…

作者头像 李华
网站建设 2026/8/9 18:45:07

【dz-1012】小型无士栽培自动控制系统设计与实现

摘要 在无土栽培领域,环境参数与营养液状态的精准调控对作物生长质量与产量起着决定性作用。传统无土栽培管理多依赖人工巡检和经验调节,存在参数控制滞后、营养液配比失衡、资源浪费等问题,难以满足精细化种植的严苛需求。 基于 STM32F103…

作者头像 李华
网站建设 2026/8/6 2:50:12

绿色工厂与上市公司匹配数据(2017-2023)

1729顶刊收割机!绿色工厂与上市公司匹配数据(2017-2023)数据简介2016年工业和信息化部(以下简称工信部)启动了第一批绿色制造体系示范建设项目,该项目涵盖绿色工厂、绿色产品、绿色园区、绿色供应链等多方面…

作者头像 李华
网站建设 2026/8/2 9:25:54

3 大核心 + 全产业链!小理家按摩机器人,选对的关键在这

随着亚健康问题日益普遍,智能康养需求持续攀升,按摩机器人作为替代传统人工按摩的重要品类,市场规模实现快速增长。面对市面上众多品牌,消费者与投资者该如何选择?从技术实力、商业模式、服务体系等核心维度来看&#…

作者头像 李华