news 2026/4/22 15:36:48

PciConfigSpaceHandlerWorker中的HalGetBusDataByOffset函数返回后到!IsPciBusAsyncWorker到AmlisuppCompletePassive

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PciConfigSpaceHandlerWorker中的HalGetBusDataByOffset函数返回后到!IsPciBusAsyncWorker到AmlisuppCompletePassive

从ACPI!PciConfigSpaceHandlerWorker中的HalGetBusDataByOffset函数返回后到ACPI!IsPciBusAsyncWorker到ACPI!AmlisuppCompletePassive

} else {

//
// Do config space op through HAL
//

bytes = HalGetBusDataByOffset(PCIConfiguration,
state->Bus,
state->Slot.u.AsULONG,
state->Data,
state->Address,
state->Size); 返回到这里

}

break;


1: kd> p
eax=00000040 ebx=89986f88 ecx=00000000 edx=00000000 esi=00000000 edi=00000000
eip=f740d8c7 esp=f791ab90 ebp=f791abe0 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!PciConfigSpaceHandlerWorker+0x29b:
f740d8c7 8bf0 mov esi,eax
1: kd> kc
#
00 ACPI!PciConfigSpaceHandlerWorker
01 ACPI!GetPciAddressWorker
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

#define PCISUPP_COMPLETION_HANDLER_PFNAA 0
#define PCISUPP_COMPLETION_HANDLER_PFNACB 1

1: kd> dt PCI_CONFIG_STATE 89986f88
ACPI!PCI_CONFIG_STATE
+0x000 AccessType : 0
+0x004 OpRegion : 0x89986fc4 _NSObj
+0x008 Address : 0
+0x00c Size : 0x40 大小
+0x010 Data : 0x899c5240 -> 0x77015ad PCI配置空间数据
+0x014 Context : 0
+0x018 CompletionHandler : 0xf740dab2 Void ACPI!IsPciBusAsyncWorker
+0x01c CompletionContext : 0x899c5218 Void
+0x020 PciObj : 0x8996e010 _NSObj
+0x024 ParentObj : (null)
+0x028 CompletionHandlerType : 1 #define PCISUPP_COMPLETION_HANDLER_PFNACB 1
+0x02c Flags : 0x100
+0x030 RunCompletion : 0n1
+0x034 Slot : _PCI_SLOT_NUMBER 3 0
+0x038 Bus : 0x2 '' 2
+0x039 IsPciDeviceResult : 0 ''
1: kd> db 0x8996e010
8996e010 38 dc 96 89 e8 e3 96 89-78 cd 96 89 54 e0 96 89 8.......x...T...
8996e020 53 34 46 30 30 f3 9a 89-cc df 96 89 00 00 06 00 S4F00...........
8996e030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
8996e040 88 86 96 89 00 00 00 00-48 4e 53 4f 44 00 00 00 ........HNSOD...
8996e050 00 90 96 89 a4 e3 96 89-98 e0 96 89 10 e0 96 89 ................
8996e060 00 00 00 00 5f 41 44 52-30 f3 9a 89 10 e0 96 89 ...._ADR0.......
8996e070 00 00 01 00 00 00 00 00-00 00 03 00 00 00 00 00 ................
8996e080 00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f ............HNSO


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> t
eax=00000040 ebx=89986f88 ecx=00000000 edx=00000000 esi=00000000 edi=00000000
eip=f740dab2 esp=f791ab7c ebp=f791abe0 iopl=0 nv up ei pl nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000202
ACPI!IsPciBusAsyncWorker:
f740dab2 55 push ebp
1: kd> kc
#
00 ACPI!IsPciBusAsyncWorker
01 ACPI!PciConfigSpaceHandlerWorker
02 ACPI!GetPciAddressWorker
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
AcpiObject = 0x8996e010
Status = 0n0
Result = 0x00000000
Context = 0x899c5218
status = 0n-1986244072
1: kd> dt IS_PCI_BUS_STATE 0x899c5218
ACPI!IS_PCI_BUS_STATE
+0x000 AcpiObject : 0x8996e010 _NSObj
+0x004 Flags : 0xcb
+0x008 Hid : (null)
+0x00c Cid : (null)
+0x010 Adr : 0x30000
+0x014 IsPciDevice : 0x1 ''
+0x018 RunCompletion : 0n2
+0x01c CompletionHandler : 0xf73fa3e2 void ACPI!AmlisuppCompletePassive+0
+0x020 CompletionContext : 0xf78f2cf4 Void
+0x024 Result : 0xf78f2d0b ""
+0x028 Buffer : [64] "???"

//
// If Status isn't success, then one of the worker
// functions we called puked. Bail.
//
if (!NT_SUCCESS(status)) {
*state->Result = FALSE;
goto IsPciBusAsyncExit;
}


if (state->IsPciDevice) {


#define PCISUPP_CHECKED_ADR 8
#define PCISUPP_CHECKED_PCI_BRIDGE 0x40

pciData = (PPCI_COMMON_CONFIG)state->Buffer;

if ((PCI_CONFIGURATION_TYPE(pciData) == PCI_BRIDGE_TYPE) ||
(PCI_CONFIGURATION_TYPE(pciData) == PCI_CARDBUS_BRIDGE_TYPE)) {

*state->Result = TRUE;

} else {

*state->Result = FALSE;
}

#define PCI_CONFIGURATION_TYPE(PciData) \
(((PPCI_COMMON_CONFIG)(PciData))->HeaderType & ~PCI_MULTIFUNCTION)


//
// Bit encodings for PCI_COMMON_CONFIG.HeaderType
//

#define PCI_MULTIFUNCTION 0x80
#define PCI_DEVICE_TYPE 0x00
#define PCI_BRIDGE_TYPE 0x01
#define PCI_CARDBUS_BRIDGE_TYPE 0x02


1: kd> dt IS_PCI_BUS_STATE 0x899c5218
ACPI!IS_PCI_BUS_STATE
+0x000 AcpiObject : 0x8996e010 _NSObj
+0x004 Flags : 0xcb
+0x008 Hid : (null)
+0x00c Cid : (null)
+0x010 Adr : 0x30000
+0x014 IsPciDevice : 0x1 ''
+0x018 RunCompletion : 0n3
+0x01c CompletionHandler : 0xf73fa3e2 void ACPI!AmlisuppCompletePassive+0
+0x020 CompletionContext : 0xf78f2cf4 Void
+0x024 Result : 0xf78f2d0b ""
+0x028 Buffer : [64] "???"
1: kd> dx -id 0,0,899a2278 -r1 ((ACPI!unsigned char *)0xf78f2d0b)
((ACPI!unsigned char *)0xf78f2d0b) : 0xf78f2d0b : 0x0 [Type: unsigned char *]
0x0 [Type: unsigned char]


if (state->RunCompletion) {

state->CompletionHandler(state->AcpiObject,
status,
NULL,
state->CompletionContext);
}

1: kd> t
Breakpoint 11 hit
eax=f78f2d0b ebx=00000000 ecx=8996e010 edx=00000000 esi=899c5218 edi=00000103
eip=f73fa3e2 esp=f791ab58 ebp=f791ab78 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!AmlisuppCompletePassive:
f73fa3e2 55 push ebp
1: kd> kc
#
00 ACPI!AmlisuppCompletePassive
01 ACPI!IsPciBusAsyncWorker
02 ACPI!PciConfigSpaceHandlerWorker
03 ACPI!GetPciAddressWorker
04 ACPI!GetPciAddressWorker
05 ACPI!ACPIGetWorkerForInteger
06 ACPI!AsyncCallBack
07 ACPI!RunContext
08 ACPI!DispatchCtxtQueue
09 ACPI!StartTimeSlicePassive
0a ACPI!ACPIWorker
0b nt!PspSystemThreadStartup
0c nt!KiThreadStartup
1: kd> dv
AcpiObject = 0x8996e010
Status = 0n0
Result = 0x00000000
Context = 0xf78f2cf4
1: kd> dt AMLISUPP_CONTEXT_PASSIVE 0xf78f2cf4
ACPI!AMLISUPP_CONTEXT_PASSIVE
+0x000 Event : _KEVENT
+0x010 Status : 0n-1073741275
1: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_KEVENT *)0xf78f2cf4))
(*((ACPI!_KEVENT *)0xf78f2cf4)) [Type: _KEVENT]
[+0x000] Header [Type: _DISPATCHER_HEADER]
1: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_DISPATCHER_HEADER *)0xf78f2cf4))
(*((ACPI!_DISPATCHER_HEADER *)0xf78f2cf4)) [Type: _DISPATCHER_HEADER]
[+0x000] Type : 0x1 [Type: unsigned char]
[+0x001] Absolute : 0x56 [Type: unsigned char]
[+0x002] Size : 0x4 [Type: unsigned char]
[+0x003] Inserted : 0x89 [Type: unsigned char]
[+0x003] DebugActive : 0x89 [Type: unsigned char]
[+0x000] Lock : -1996204543 [Type: long]
[+0x004] SignalState : 0 [Type: long]
[+0x008] WaitListHead [Type: _LIST_ENTRY]
1: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_LIST_ENTRY *)0xf78f2cfc))
(*((ACPI!_LIST_ENTRY *)0xf78f2cfc)) [Type: _LIST_ENTRY]
[+0x000]Flink : 0x8999ce40[Type: _LIST_ENTRY *]
[+0x004] Blink : 0x8999ce40 [Type: _LIST_ENTRY *]
1: kd> !thread 0x8999ce40-a0
THREAD 8999cda0 Cid 0004.0050 Teb: 00000000 Win32Thread: 00000000 WAIT: (Executive) KernelMode Non-Alertable
f78f2cf4 SynchronizationEvent
Not impersonating
DeviceMap e10003d8
Owning Process 899a2278 Image: System
Attached Process N/A Image: N/A
Wait Start TickCount 274647699 Ticks: 285 (0:00:00:04.453)
Context Switch Count 64 IdealProcessor: 1
UserTime 00:00:00.000
KernelTime 00:00:00.078
Stack Init f78f3000 Current f78f2c4c Base f78f3000 Limit f78f0000 Call 00000000
Priority 12 BasePriority 12 PriorityDecrement 0 IoPriority 0 PagePriority 0
ChildEBP RetAddr Args to Child
f78f2c64 80a440eb 8999ce40 8999cda0 f78f2cf4 nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4]) [d:\srv03rtm\base\ntos\ke\i386\ctxswap.asm @ 139]
f78f2c9c 80a35ea9 00000000 804edc6c 00000000 nt!KiSwapThread+0x627 (FPO: [Non-Fpo]) (CONV: fastcall) [d:\srv03rtm\base\ntos\ke\thredsup.c @ 2000]
f78f2cd0 f74486af f78f2cf4 00000000 00000000nt!KeWaitForSingleObject+0x2d7 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ke\wait.c @ 1161]
f78f2d0c f744882d 8996e010 02000000 89968ea0ACPI!IsNsobjPciBus+0x7f(FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\pciopregion.c @ 1987]
f78f2d48 f74413bd 8996cd78 00000001 8999cda0 ACPI!EnableDisableRegions+0xbd (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\pciopregion.c @ 2227]
f78f2d80 80af2bb9 895d8900 00000000 8999cda0 ACPI!ACPIFilterIrpStartDeviceWorker+0x163 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\busdrv\acpi\driver\nt\filter.c @ 1696]
f78f2dac 80d391f0 89968eb4 00000000 00000000 nt!ExpWorkerThread+0x10f (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ex\worker.c @ 1153]
f78f2ddc 80b00d52 80af2aaa 00000001 00000000 nt!PspSystemThreadStartup+0x2e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\ntos\ps\create.c @ 2213]
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 [d:\srv03rtm\base\ntos\ke\i386\threadbg.asm @ 81]

1: kd> p
Breakpoint 12 hit
eax=00000000 ebx=00000000 ecx=8996e010 edx=00000000 esi=f78f2cf4 edi=00000103
eip=80a34206 esp=f791ab40 ebp=f791ab54 iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
nt!KeSetEvent:
80a34206 55 push ebp
1: kd> gu
Breakpoint 10 hit
eax=00000000 ebx=00000000 ecx=00000000 edx=80010031 esi=804edc6c edi=00000000
eip=f74486af esp=f78f2cec ebp=f78f2d0c iopl=0 nv up ei ng nz na pe cy
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000287
ACPI!IsNsobjPciBus+0x7f:
f74486af 8a45ff mov al,byte ptr [ebp-1] ss:0010:f78f2d0b=00
1: kd> kc
#
00 ACPI!IsNsobjPciBus
01 ACPI!EnableDisableRegions

02 ACPI!ACPIFilterIrpStartDeviceWorker
03 nt!ExpWorkerThread
04 nt!PspSystemThreadStartup
05 nt!KiThreadStartup


status =IsPciBusAsync( Device,
AmlisuppCompletePassive,
(PVOID)&getDataContext,
&result );

if (status == STATUS_PENDING) {

KeWaitForSingleObject(&getDataContext.Event,
Executive,
KernelMode,
FALSE,
NULL);

status = getDataContext.Status;
}

return result;
}


1: kd> dv
Device = 0x8996e010
result = 0x00 ''
getDataContext = struct AMLISUPP_CONTEXT_PASSIVE
1: kd> dx -r1 (*((ACPI!AMLISUPP_CONTEXT_PASSIVE *)0xf78f2cf4))
(*((ACPI!AMLISUPP_CONTEXT_PASSIVE *)0xf78f2cf4)) [Type: AMLISUPP_CONTEXT_PASSIVE]
[+0x000] Event [Type: _KEVENT]
[+0x010] Status : 0 [Type: long]

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

姿态估计模型压缩指南:云端GPU快速验证,节省80%算力

姿态估计模型压缩指南:云端GPU快速验证,节省80%算力 引言:为什么需要模型压缩? 当你准备把姿态估计模型部署到树莓派、Jetson Nano等边缘设备时,会发现原版模型就像一头大象——体积庞大、行动迟缓。我在实际项目中测…

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

JDBC还能异步?揭秘阿里、腾讯都在用的数据库异步化黑科技

第一章:JDBC还能异步?揭秘阿里、腾讯都在用的数据库异步化黑科技传统JDBC操作是典型的阻塞式调用,每次数据库请求都会占用一个线程,导致高并发场景下线程资源迅速耗尽。然而,阿里、腾讯等头部企业在实际生产中早已突破…

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

Z-Image-ComfyUI保姆级教程:Mac用户也能玩,云端GPU免烦恼

Z-Image-ComfyUI保姆级教程:Mac用户也能玩,云端GPU免烦恼 引言:Mac用户的AI创作困境与解决方案 作为一名Mac用户,当你被Z-Image-ComfyUI惊艳的AI创作效果吸引,却发现自己心爱的MacBook Pro无法运行官方教程中那些为W…

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

为什么你的云函数响应慢?:可能是没用上虚拟线程的这3个特性

第一章:云函数性能瓶颈的根源剖析云函数作为无服务器架构的核心组件,其性能表现直接影响应用的响应速度与用户体验。尽管具备弹性伸缩和按需计费的优势,但在实际使用中常出现延迟高、冷启动频繁、资源利用率低等问题。这些问题的背后&#xf…

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

小白也能懂:Windows下PostgreSQL图文安装教程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向Windows初学者的PostgreSQL安装指南,要求:1.从官网下载开始的分步截图 2.每个安装选项的通俗解释 3.安装后验证的SQL示例 4.常见错误解决方法(…

作者头像 李华
网站建设 2026/4/22 1:22:48

BUCK电路在无人机电源系统中的应用实例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 设计一个无人机电源管理系统,包含3路BUCK电路:1) 12V转5V2A(主控供电)2) 12V转3.3V1A(传感器供电)3) 12V转9…

作者头像 李华