news 2026/2/9 16:01:03

ACPI!ACPIBuildProcessRunMethodPhaseCheckSta函数对_SB总线的状态的确定

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!ACPIBuildProcessRunMethodPhaseCheckSta函数对_SB总线的状态的确定

ACPI!ACPIBuildProcessRunMethodPhaseCheckSta函数对_SB总线的状态的确定
0: kd> kc
#
00 ACPI!ACPIGet
01 ACPI!ACPIBuildProcessRunMethodPhaseCheckSta
02 ACPI!ACPIBuildProcessGenericList
03 ACPI!ACPIBuildDeviceDpc
04 nt!KiRetireDpcList
05 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
06 0x0
0: kd> dv
Target = 0x899af0f0
ObjectID = 0x4154535f
Flags = 0x40040802
SimpleArgument = 0x00000000
SimpleArgumentSize = 0
CallBackRoutine = 0xf73fa5bc
CallBackContext = 0x89906e30
Buffer = 0x89906e74
BufferSize = 0x00000000
completionRoutine = 0xf7407364
status = 0n1074006018
argument = struct _ObjData
argumentPtr = 0x00000000
acpiObject = 0x899af0f0
deviceExtension = 0x89981a18
async = 0x01 ''
argumentCount = 0


0: kd> g
Breakpoint 29 hit
eax=00000000 ebx=f743b938 ecx=0001e000 edx=00000000 esi=899c6320 edi=899c6328
eip=f74078d8 esp=f789eee4 ebp=f789ef28 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!ACPIGet+0x220:
f74078d8 e83b2bffff call ACPI!ACPIAmliGetNamedChild (f73fa418)
0: kd> t
eax=00000000 ebx=f743b938 ecx=0001e000 edx=00000000 esi=899c6320 edi=899c6328
eip=f73fa418 esp=f789eee0 ebp=f789ef28 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!ACPIAmliGetNamedChild:
f73fa418 55 push ebp
0: kd> dv
AcpiObject = 0x899af0f0
ObjectId = 0x4154535f
0: kd> db 0x899af0f0
899af0f0 ac f0 9a 89 34 f1 9a 89-24 f0 9a 89 74 f4 9a 89 ....4...$...t...
899af100 5f 53 42 5f 00 00 00 00-00 00 00 00 00 00 00 00 _SB_............
899af110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899af120 18 1a 98 89 00 00 00 00-48 4e 53 4f 44 00 00 00 ........HNSOD...
899af130 00 f0 9a 89 f0 f0 9a 89-78 f1 9a 89 24 f0 9a 89 ........x...$...
899af140 00 00 00 00 5f 53 49 5f-00 00 00 00 00 00 00 00 ...._SI_........
899af150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899af160 00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f ............HNSO
0: kd> db f789eee0
f789eee0 dd 78 40 f7 f0 f0 9a 89-5f 53 54 41 18 1a 98 89 .x@....._STA....


0: kd> gu
eax=00000000 ebx=f743b938 ecx=899af0f0 edx=00000000 esi=899c6320 edi=899c6328
eip=f74078dd esp=f789eeec ebp=f789ef28 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!ACPIGet+0x225:
f74078dd 85c0 test eax,eax
eax=00000000 没有_sta方法

0: kd> t
Breakpoint 27 hit
eax=c0000034 ebx=f743b938 ecx=899c634c edx=00000000 esi=899c6320 edi=899c6328
eip=f7407932 esp=f789eedc ebp=f789ef28 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!ACPIGet+0x27a:
f7407932 ff55f8 call dword ptr [ebp-8] ss:0010:f789ef20={ACPI!ACPIGetWorkerForInteger (f7407364)}
0: kd> t
eax=c0000034 ebx=f743b938 ecx=899c634c edx=00000000 esi=899c6320 edi=899c6328
eip=f7407364 esp=f789eed8 ebp=f789ef28 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!ACPIGetWorkerForInteger:
f7407364 55 push ebp
0: kd> kc
#
00 ACPI!ACPIGetWorkerForInteger
01 ACPI!ACPIGet
02 ACPI!ACPIBuildProcessRunMethodPhaseCheckSta
03 ACPI!ACPIBuildProcessGenericList
04 ACPI!ACPIBuildDeviceDpc
05 nt!KiRetireDpcList
06 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
07 0x0
0: kd> dv
AcpiObject = 0x00000000
Status = 0n-1073741772
Result = 0x899c634c
Context = 0x899c6320
freeData = 0x00 ''


0: kd> dt ACPI_GET_REQUEST 0x899c6320
+0x000 Flags : 0x60040802
+0x000 UFlags : __unnamed
+0x004 ObjectID : 0x4154535f
+0x008 ListEntry : _LIST_ENTRY [ 0xf743b940 - 0xf743b940 ]
+0x010 DeviceExtension : 0x89981a18 _DEVICE_EXTENSION
+0x014 AcpiObject : 0x899af0f0 _NSObj
+0x018 CallBackRoutine : 0xf73fa5bc void ACPI!ACPIBuildCompleteMustSucceed+0
+0x01c CallBackContext : 0x89906e30 Void
+0x020 Buffer : 0x89906e74 -> (null)
+0x024 BufferSize : (null)
+0x028 Status : 0n0
+0x02c ResultData : _ObjData

#define GET_CONVERT_TO_DEVICE_PRESENCE 0x00000800


} else if (request->Flags & GET_CONVERT_TO_DEVICE_PRESENCE) {

status = ACPIGetConvertToDevicePresence(
request->DeviceExtension,
Status,
Result,
request->Flags,
request->Buffer,
request->BufferSize
);


0: kd> g
Breakpoint 15 hit
eax=89906e74 ebx=c0000034 ecx=60040802 edx=00000000 esi=899c6320 edi=899c634c
eip=f7406cd6 esp=f789eea8 ebp=f789eed4 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!ACPIGetConvertToDevicePresence:
f7406cd6 55 push ebp
0: kd> kc
#
00 ACPI!ACPIGetConvertToDevicePresence
01 ACPI!ACPIGetWorkerForInteger
02 ACPI!ACPIGet
03 ACPI!ACPIBuildProcessRunMethodPhaseCheckSta
04 ACPI!ACPIBuildProcessGenericList
05 ACPI!ACPIBuildDeviceDpc
06 nt!KiRetireDpcList
07 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
08 0x0
0: kd> dv
DeviceExtension = 0x89981a18
Status = 0n-1073741772
Result = 0x899c634c
Flags = 0x60040802
Buffer = 0x89906e74
BufferSize = 0x00000000
deviceStatus = 8
0: kd> ?0n-1073741772
Evaluate expression: -1073741772 = c0000034

NTSTATUS
ACPIGetConvertToDevicePresence(
IN PDEVICE_EXTENSION DeviceExtension,
IN NTSTATUS Status,
IN POBJDATA Result,
IN ULONG Flags,
OUT PVOID *Buffer,
OUT ULONG *BufferSize
)
{
ULONG deviceStatus = STA_STATUS_DEFAULT; 设置为默认0xf


//
// Update the device status
//
ACPIInternalUpdateDeviceStatus( DeviceExtension, deviceStatus );


#define STA_STATUS_PRESENT 0x00000001
#define STA_STATUS_ENABLED 0x00000002
#define STA_STATUS_USER_INTERFACE 0x00000004
#define STA_STATUS_WORKING_OK 0x00000008
#define STA_STATUS_DEFAULT ( STA_STATUS_PRESENT | \
STA_STATUS_ENABLED | \
STA_STATUS_USER_INTERFACE | \
STA_STATUS_WORKING_OK)

0: kd> g
Breakpoint 4 hit
eax=00000000 ebx=c0000034 ecx=00000000 edx=00000000 esi=89981a18 edi=0000000f
eip=f7409910 esp=f789ee84 ebp=f789eea4 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!ACPIInternalUpdateDeviceStatus:
f7409910 55 push ebp
0: kd> kc
#
00 ACPI!ACPIInternalUpdateDeviceStatus
01 ACPI!ACPIGetConvertToDevicePresence
02 ACPI!ACPIGetWorkerForInteger
03 ACPI!ACPIGet
04 ACPI!ACPIBuildProcessRunMethodPhaseCheckSta
05 ACPI!ACPIBuildProcessGenericList
06 ACPI!ACPIBuildDeviceDpc
07 nt!KiRetireDpcList
08 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
09 0x0
0: kd> dv
DeviceExtension = 0x89981a18
DeviceStatus = 0xf
oldIrql = 0x00 ''


0: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x89981a18)
((ACPI!_DEVICE_EXTENSION *)0x89981a18) : 0x89981a18 [Type: _DEVICE_EXTENSION *]
[+0x000] Flags : 0x1e00000200010[Type: unsigned __int64]
[+0x000] UFlags [Type: __unnamed]
[+0x008] Signature : 0x5f534750 [Type: unsigned long]
[+0x00c] DebugFlags : 0x0 [Type: unsigned long]
[+0x010] DispatchTable : 0xf743826c [Type: IRP_DISPATCH_TABLE *]
[+0x014] WorkContext [Type: WORK_QUEUE_CONTEXT]
[+0x014] Fdo [Type: _FDO_DEVICE_EXTENSION]
[+0x014] Filter [Type: _FILTER_DEVICE_EXTENSION]
[+0x014] Pdo [Type: _PDO_DEVICE_EXTENSION]
[+0x058] WorkQueue [Type: EXTENSION_WORKER]
[+0x058] Button [Type: BUTTON_EXTENSION]
[+0x058] Thermal [Type: THERMAL_EXTENSION]
[+0x058] LinkNode [Type: LINK_NODE_EXTENSION]
[+0x058] Dock [Type: DOCK_EXTENSION]
[+0x058] Processor [Type: _PROCESSOR_DEVICE_EXTENSION]
[+0x088] DeviceState : Stopped (0) [Type: _ACPI_DEVICE_STATE]
[+0x08c] PreviousState : Stopped (0) [Type: _ACPI_DEVICE_STATE]
[+0x090] PowerInfo [Type: _ACPI_POWER_INFO]
[+0x10c] DeviceID : 0x899bfed0 : 0x41 [Type: unsigned char *]
[+0x10c] Address : 0x899bfed0 [Type: unsigned long]
[+0x110] InstanceID : 0x899bfeb8 : 0x30 [Type: unsigned char *]
[+0x114] ResourceList : 0x899874d0 [Type: _CM_RESOURCE_LIST *]
[+0x118] PnpResourceList : 0x0 [Type: _ObjData *]
[+0x11c] OutstandingIrpCount : 2 [Type: long]
[+0x120] ReferenceCount : 15 [Type: long]
[+0x124] HibernatePathCount : 0 [Type: long]
[+0x128] RemoveEvent : 0x0 [Type: _KEVENT *]
[+0x12c] AcpiObject : 0x899af0f0 [Type: _NSObj *]
[+0x130] DeviceObject : 0x89981b98 : Device for "\Driver\ACPI" [Type: _DEVICE_OBJECT *]
[+0x134] TargetDeviceObject : 0x899c1de0 : Device for "\Driver\ACPI_HAL" [Type: _DEVICE_OBJECT *]
[+0x138] PhysicalDeviceObject : 0x899c1de0 : Device for "\Driver\ACPI_HAL" [Type: _DEVICE_OBJECT *]
[+0x13c] ParentExtension : 0x0 [Type: _DEVICE_EXTENSION *]
[+0x140] ChildDeviceList [Type: _LIST_ENTRY]
[+0x148] SiblingDeviceList [Type: _LIST_ENTRY]
[+0x150] EjectDeviceHead [Type: _LIST_ENTRY]
[+0x158] EjectDeviceList [Type: _LIST_ENTRY]


//
// Update the extensions flags bassed on wether or not STA_STATUS_PRESENT is
// set
//
originalFlags = ACPIInternalUpdateFlags(
&(DeviceExtension->Flags),
DEV_TYPE_NOT_PRESENT,
(BOOLEAN) (DeviceStatus & STA_STATUS_PRESENT)
);

(DeviceStatus & STA_STATUS_PRESENT)=1
清零0x2

0: kd> gu
eax=00000000 ebx=c0000034 ecx=0041e000 edx=00000000 esi=899c6320 edi=899c634c
eip=f74073d9 esp=f789eec4 ebp=f789eed4 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!ACPIGetWorkerForInteger+0x75:
f74073d9 ebe6 jmp ACPI!ACPIGetWorkerForInteger+0x5d (f74073c1)
0: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x89981a18)
((ACPI!_DEVICE_EXTENSION *)0x89981a18) : 0x89981a18 [Type: _DEVICE_EXTENSION *]
[+0x000] Flags : 0x41e00000200010[Type: unsigned __int64]
[+0x000] UFlags [Type: __unnamed]
[+0x008] Signature : 0x5f534750 [Type: unsigned long]
[+0x00c] DebugFlags : 0x0 [Type: unsigned long]
[+0x010] DispatchTable : 0xf743826c [Type: IRP_DISPATCH_TABLE *]
[+0x014] WorkContext [Type: WORK_QUEUE_CONTEXT]
[+0x014] Fdo [Type: _FDO_DEVICE_EXTENSION]
[+0x014] Filter [Type: _FILTER_DEVICE_EXTENSION]
[+0x014] Pdo [Type: _PDO_DEVICE_EXTENSION]
[+0x058] WorkQueue [Type: EXTENSION_WORKER]
[+0x058] Button [Type: BUTTON_EXTENSION]
[+0x058] Thermal [Type: THERMAL_EXTENSION]
[+0x058] LinkNode [Type: LINK_NODE_EXTENSION]
[+0x058] Dock [Type: DOCK_EXTENSION]
[+0x058] Processor [Type: _PROCESSOR_DEVICE_EXTENSION]
[+0x088] DeviceState : Stopped (0) [Type: _ACPI_DEVICE_STATE]
[+0x08c] PreviousState : Stopped (0) [Type: _ACPI_DEVICE_STATE]
[+0x090] PowerInfo [Type: _ACPI_POWER_INFO]
[+0x10c] DeviceID : 0x899bfed0 : 0x41 [Type: unsigned char *]
[+0x10c] Address : 0x899bfed0 [Type: unsigned long]
[+0x110] InstanceID : 0x899bfeb8 : 0x30 [Type: unsigned char *]
[+0x114] ResourceList : 0x899874d0 [Type: _CM_RESOURCE_LIST *]
[+0x118] PnpResourceList : 0x0 [Type: _ObjData *]
[+0x11c] OutstandingIrpCount : 2 [Type: long]
[+0x120] ReferenceCount : 15 [Type: long]
[+0x124] HibernatePathCount : 0 [Type: long]
[+0x128] RemoveEvent : 0x0 [Type: _KEVENT *]
[+0x12c] AcpiObject : 0x899af0f0 [Type: _NSObj *]
[+0x130] DeviceObject : 0x89981b98 : Device for "\Driver\ACPI" [Type: _DEVICE_OBJECT *]
[+0x134] TargetDeviceObject : 0x899c1de0 : Device for "\Driver\ACPI_HAL" [Type: _DEVICE_OBJECT *]
[+0x138] PhysicalDeviceObject : 0x899c1de0 : Device for "\Driver\ACPI_HAL" [Type: _DEVICE_OBJECT *]
[+0x13c] ParentExtension : 0x0 [Type: _DEVICE_EXTENSION *]
[+0x140] ChildDeviceList [Type: _LIST_ENTRY]
[+0x148] SiblingDeviceList [Type: _LIST_ENTRY]
[+0x150] EjectDeviceHead [Type: _LIST_ENTRY]
[+0x158] EjectDeviceList [Type: _LIST_ENTRY]

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

30岁程序员必看!掌握大模型技术,突破职业天花板,收藏这篇就够了_大龄程序员如何转行(非常详细)

文章探讨了30岁程序员面临的职业困境与转型需求,分析了转行趋势和方向,指出学习大模型技术是突破职业瓶颈的关键。大模型相关岗位薪资高、需求大,掌握该技术可提升就业竞争力,为创业提供基础。文章提供了系统学习方案和实战资料&a…

作者头像 李华
网站建设 2026/2/6 4:25:02

2026年1月哪些房产中介管理系统客户管理功能完善

在房产经纪行业数字化转型加速的2026年,客户资源已成为中介企业核心竞争力的关键。一套客户管理功能完善的房产中介管理系统,不仅能帮助经纪人精准把握客户需求、提升跟进效率,更能助力企业实现客户资源的规范化沉淀与高效转化。不少中介从业…

作者头像 李华
网站建设 2026/2/9 7:17:17

基于 MATLAB 的机械故障诊断技术

1.基于 MATLAB 的机械故障诊断技术案例教程(包含 第1章 认识MATLAB 1.1 MATLAB简介 1.1.1 MATLAB概述 1.1.2 MATLAB的功能特点 1.2 MATLAB的用户界面 1.3 MATLAB矩阵运算 1.3.1 MATLAB中的变量 1.3.2 基本矩阵的操作 1.3.3 稀疏矩阵 1.3.4 矩阵的运算 1.4 MATLAB的编…

作者头像 李华
网站建设 2026/2/9 10:06:20

前后端分离植物健康系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着现代农业技术的发展,植物健康监测系统的需求日益增长。传统的农业管理方式依赖人工观察和经验判断,效率低下且难以应对大规模种植场景。气候变化和病虫害的频发进一步加剧了农业生产的不稳定性,亟需一种智能化、实时化的解决方案。…

作者头像 李华
网站建设 2026/2/6 16:00:18

基于django的超市进销存管理系统 供应商

目录供应商管理模块摘要关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!供应商管理模块摘要 Django框架下的超市进销存管理系统中,供应商管理是核心模块之一&#xff0c…

作者头像 李华