news 2026/4/16 10:58:56

ACPI!ACPIBuildProcessDevicePhaseSta函数对ISA的处理ACPI!ACPIDetectDuplicateHID

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!ACPIBuildProcessDevicePhaseSta函数对ISA的处理ACPI!ACPIDetectDuplicateHID

ACPI!ACPIBuildProcessDevicePhaseSta函数对ISA的处理ACPI!ACPIDetectDuplicateHID

1: kd> t
Breakpoint 5 hit
eax=00000008 ebx=00000008 ecx=89984198 edx=00000001 esi=89984188 edi=80b019f4
eip=f73fb911 esp=f78aef68 ebp=f78aef84 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!ACPIBuildProcessGenericList+0x4d:
f73fb911 ff55f4 call dword ptr [ebp-0Ch] ss:0010:f78aef78={ACPI!ACPIBuildProcessDevicePhaseSta (f73fb72e)}


1: kd> t
eax=00000008 ebx=00000008 ecx=89984198 edx=00000001 esi=89984188 edi=80b019f4
eip=f73fb72e esp=f78aef64 ebp=f78aef84 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!ACPIBuildProcessDevicePhaseSta:
f73fb72e 55 push ebp
1: kd> kc
#
00 ACPI!ACPIBuildProcessDevicePhaseSta
01 ACPI!ACPIBuildProcessGenericList
02 ACPI!ACPIBuildDeviceDpc
03 nt!KiRetireDpcList
04 nt!KiDispatchInterrupt
WARNING: Frame IP not in any known module. Following frames may be wrong.
05 0x0
1: kd> dv
BuildRequest = 0x89984188


#define WORK_DONE_EJD WORK_DONE_STEP_6

//
// The next stage is to start running the _EJD
//
BuildRequest->NextWorkDone = WORK_DONE_EJD;


//
// See if the device conforms to the ACPI specification for HIDs and UIDs
// We do this at this point because we now know wether or not the device
// is present or not and that is an important test because the OEM is
// allowed to have 2 devices with the same HID/UID as long as both aren't
// present at the same time.
//检查设备是否符合HIDs和UIDs的ACPI规范。我们在此处进行此项测试,因为我们现在已知设备是否存在,这是一项重要测试,
//因为OEM可以有两台设备具有相同的HID/UID,只要它们不同时存在即可
ACPIDetectDuplicateHID(
deviceExtension
);


This routine looks at all the sibling devices of the specified
device and determines if there are devices with duplicate HIDs and
UIDs

此例程会查看指定设备的所有同级设备,并判断是否存在具有重复硬件标识符(HID)和唯一标识符(UID)的设备


1: kd> kc
#
00 ACPI!ACPIDetectDuplicateHID
01 ACPI!ACPIBuildProcessDevicePhaseSta
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
1: kd> dv
DeviceExtension = 0x899c0a88
eled = struct EXTENSIONLIST_ENUMDATA
1: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x899c0a88)
((ACPI!_DEVICE_EXTENSION *)0x899c0a88) : 0x899c0a88 [Type: _DEVICE_EXTENSION *]
[+0x000] Flags : 0x40100000000008 [Type: unsigned __int64]
[+0x000] UFlags [Type: __unnamed]
[+0x008] Signature : 0x5f534750 [Type: unsigned long]
[+0x00c] DebugFlags : 0x0 [Type: unsigned long]
[+0x010] DispatchTable : 0x0 [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 : 0x70000 : Unable to read memory at Address 0x70000 [Type: unsigned char *]
[+0x10c] Address : 0x70000 [Type: unsigned long]
[+0x110] InstanceID : 0x0 [Type: unsigned char *]
[+0x114] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x118] PnpResourceList : 0x0 [Type: _ObjData *]
[+0x11c] OutstandingIrpCount : 1 [Type: long]
[+0x120] ReferenceCount : 52 [Type: long]
[+0x124] HibernatePathCount : 0 [Type: long]
[+0x128] RemoveEvent : 0x0 [Type: _KEVENT *]
[+0x12c] AcpiObject : 0x899b2278 [Type: _NSObj *]
[+0x130] DeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x134] TargetDeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x138] PhysicalDeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x13c] ParentExtension : 0x899c0d58 [Type: _DEVICE_EXTENSION *]
[+0x140] ChildDeviceList [Type: _LIST_ENTRY]
[+0x148] SiblingDeviceList [Type: _LIST_ENTRY]
[+0x150] EjectDeviceHead [Type: _LIST_ENTRY]
[+0x158] EjectDeviceList [Type: _LIST_ENTRY]
1: kd> db 0x899b2278
899b2278 bc 21 9b 89 68 3c 9b 89-ac ff 9a 89 bc 22 9b 89 .!..h<......."..
899b2288 49 53 41 5f 30 f3 9a 89-34 22 9b 89 00 00 06 00 ISA_0...4"......
899b2298 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b22a8 88 0a 9c 89 00 00 00 00-48 4e 53 4f 44 00 00 00 ........HNSOD...
899b22b8 00 f0 9a 89 0c e5 9b 89-00 23 9b 89 78 22 9b 89 .........#..x"..
899b22c8 00 00 00 00 5f 41 44 52-30 f3 9a 89 78 22 9b 89 ...._ADR0...x"..
899b22d8 00 00 01 00 00 00 00 00-00 00 07 00 00 00 00 00 ................
899b22e8 00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f ............HNSO
1: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x899c0d58)
((ACPI!_DEVICE_EXTENSION *)0x899c0d58) : 0x899c0d58 [Type: _DEVICE_EXTENSION *]
[+0x000] Flags : 0x40200002000008 [Type: unsigned __int64]
[+0x000] UFlags [Type: __unnamed]
[+0x008] Signature : 0x5f534750 [Type: unsigned long]
[+0x00c] DebugFlags : 0x0 [Type: unsigned long]
[+0x010] DispatchTable : 0x0 [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 : 0x899c1148 : 0x41 [Type: unsigned char *]
[+0x10c] Address : 0x899c1148 [Type: unsigned long]
[+0x110] InstanceID : 0x0 [Type: unsigned char *]
[+0x114] ResourceList : 0x0 [Type: _CM_RESOURCE_LIST *]
[+0x118] PnpResourceList : 0x0 [Type: _ObjData *]
[+0x11c] OutstandingIrpCount : 1 [Type: long]
[+0x120] ReferenceCount : 82 [Type: long]
[+0x124] HibernatePathCount : 0 [Type: long]
[+0x128] RemoveEvent : 0x0 [Type: _KEVENT *]
[+0x12c] AcpiObject : 0x899affac [Type: _NSObj *]
[+0x130] DeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x134] TargetDeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x138] PhysicalDeviceObject : 0x0 [Type: _DEVICE_OBJECT *]
[+0x13c] ParentExtension : 0x89981a18 [Type: _DEVICE_EXTENSION *]
[+0x140] ChildDeviceList [Type: _LIST_ENTRY]
[+0x148] SiblingDeviceList [Type: _LIST_ENTRY]
[+0x150] EjectDeviceHead [Type: _LIST_ENTRY]
[+0x158] EjectDeviceList [Type: _LIST_ENTRY]
1: kd> db 0x899affac
899affac 4c ff 9a 89 ac 40 9b 89-f0 f0 9a 89 24 00 9b 89 L....@......$...
899affbc 50 43 49 30 30 f3 9a 89-4c ff 9a 89 00 00 06 00 PCI00...L.......
899affcc 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899affdc 58 0d 9c 89 00 00 00 00-48 4f 52 47 34 00 00 00 X.......HORG4...
899affec 00 f0 9a 89 50 00 00 00-30 00 00 00 02 00 00 00 ....P...0.......
899afffc 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b000c 00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f ............HNSO
899b001c 44 00 00 00 00 f0 9a 89-64 a0 91 89 68 00 9b 89 D.......d...h...
1: kd> db 0x899c1148
899c1148 41 43 50 49 5c 50 4e 50-30 41 30 33 00 00 00 00 ACPI\PNP0A03....

PDEVICE_EXTENSION parentExtension = DeviceExtension->ParentExtension; ebx=899c0d58

//
// Is this the root of the device tree?
//
if (parentExtension == NULL) {

return;

}

1: kd> p
eax=00000000 ebx=899c0d58 ecx=80ae0dfa edx=80b18958 esi=89984188 edi=899c0a88
eip=f73ffa75 esp=f78aef2c ebp=f78aef4c iopl=0 nv up ei ng nz na po nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000282
ACPI!ACPIDetectDuplicateHID+0x11:
f73ffa75 85db test ebx,ebx


//
// Do we fail to eject a PDO for this device? Or does this device not have
// an _HID? 这个设备没有HID!!!
//
if ( (DeviceExtension->Flags & DEV_TYPE_NEVER_PRESENT) ||
(DeviceExtension->Flags & DEV_MASK_NOT_PRESENT) ||
!(DeviceExtension->Flags & DEV_MASK_HID) ) {

return; //直接返回了。

}

#define DEV_TYPE_NEVER_PRESENT 0x0000000000000001
#define DEV_TYPE_NOT_PRESENT 0x0000000000000002
#define DEV_PROP_FAILED_INIT 0x00020000 00000000

#define DEV_MASK_NOT_PRESENT (DEV_TYPE_NOT_PRESENT | DEV_PROP_FAILED_INIT)


#define DEV_MASK_HID (DEV_PROP_HID | DEV_PROP_FIXED_HID)
#define DEV_PROP_HID 0x00002000 00000000
#define DEV_PROP_FIXED_HID 0x00008000 00000000


Device (ISA)
{
Name (_ADR, 0x00070000) // _ADR: Address
Device (MBRD)
{

Device (ISA)对应的:
1: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x899c0a88)
((ACPI!_DEVICE_EXTENSION *)0x899c0a88) : 0x899c0a88 [Type: _DEVICE_EXTENSION *]
[+0x000] Flags : 0x401000 00000008 [Type: unsigned __int64]


Device (PCI0)
{
Name (_HID, EisaId ("PNP0A03")) // _HID: Hardware ID
Name (_CID, EisaId ("PNP0A08")) // _CID: Compatible ID
Name (_BBN, 0x00) // _BBN: BIOS Bus Number
Name (_ADR, 0x00) // _ADR: Address

Device (PCI0)对应的:
1: kd> dx -r1 ((ACPI!_DEVICE_EXTENSION *)0x899c0d58)
((ACPI!_DEVICE_EXTENSION *)0x899c0d58) : 0x899c0d58 [Type: _DEVICE_EXTENSION *]
[+0x000] Flags : 0x402000 02000008 [Type: unsigned __int64]

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

震惊全球!内存市场史上最大逆转,DDR4一年暴涨18倍碾压DDR5

大家好&#xff0c;今天要和大家聊一个堪称2026年开年最大炸弹的话题——内存价格的疯狂飙升&#xff01; 如果你最近有打算组装电脑、升级笔记本&#xff0c;或者单纯关注硬件市场&#xff0c;肯定已经被各种涨价消息刷屏了。 DDR5作为新一代内存&#xff0c;本该是市场宠儿&…

作者头像 李华
网站建设 2026/4/16 0:41:07

从InfluxDB到金仓数据库:时序数据迁移与跨地域同步实践指南

从InfluxDB到金仓数据库&#xff1a;时序数据迁移与跨地域同步实践指南 大家好&#xff0c;我是【数巨小码人】&#xff0c;一位专注数据库架构设计与系统迁移落地的技术实践者&#xff0c;拥有5年一线数据库运维与优化经验&#xff0c;主导完成30余个企业级数据平台迁移项目。…

作者头像 李华
网站建设 2026/4/14 4:28:49

2000-2025年地级市创新型产业集群试点

数据简介 本数据聚焦中国各城市创新型产业集群试点设立情况。该试点由科技部批准&#xff0c;是推动创新驱动、经济高质量发展的重要举措&#xff0c;通过资源汇聚等为产业升级提供政策支持。其实施可视为准自然实验&#xff0c;通过“以点带面”优化产业布局等。评估政策效果…

作者头像 李华
网站建设 2026/4/8 0:36:05

Java springboot基于微信小程序的毕业生就业管理系统学生招聘(源码+文档+运行视频+讲解视频)

文章目录 系列文章目录目的前言一、详细视频演示二、项目部分实现截图三、技术栈 后端框架springboot前端框架vue持久层框架MyBaitsPlus微信小程序介绍系统测试 四、代码参考 源码获取 目的 基于微信小程序的毕业生就业管理系统&#xff0c;采用Spring Boot框架构建后端服务&…

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

不会后端也能做后台?XinServer 教程来了

不会后端也能做后台&#xff1f;XinServer 教程来了 兄弟们&#xff0c;不知道你们有没有遇到过这种情况&#xff1a;产品经理或者老板突然跑过来&#xff0c;说“咱们这个App/小程序/管理后台&#xff0c;需要一个用户管理功能&#xff0c;再加个数据统计&#xff0c;最好下周…

作者头像 李华