news 2026/6/17 16:12:30

ACPI!ACPIDetectPdoDevices函数下半部分搜集关联信息

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!ACPIDetectPdoDevices函数下半部分搜集关联信息

ACPI!ACPIDetectPdoDevices函数下半部分搜集关联信息

0: kd> dv newRelationSize
newRelationSize = 5

PCI0
ACAD
CP00
CP01
ACPI\FixedButton


//
// Determine the size of the new relations. Use index as a
// scratch buffer
//
index = sizeof(DEVICE_RELATIONS) +
( sizeof(PDEVICE_OBJECT) * (newRelationSize - 1) );

//
// Allocate the new device relation buffer. Use nonpaged pool since we
// are at dispatch
//
newRelations = ExAllocatePoolWithTag(
NonPagedPool,
index,
ACPI_DEVICE_POOLTAG
);
if (newRelations == NULL) {

//
// Return failure
//
return STATUS_INSUFFICIENT_RESOURCES;

}

//
// Initialize DeviceRelations data structure
//
RtlZeroMemory( newRelations, index );


#define DEV_TYPE_NEVER_PRESENT 0x0000000000000001
#define DEV_TYPE_NOT_PRESENT 0x0000000000000002
#define DEV_TYPE_REMOVED 0x0000000000000004
#define DEV_TYPE_NOT_FOUND 0x0000000000000008
#define DEV_TYPE_FDO 0x0000000000000010
#define DEV_TYPE_PDO 0x0000000000000020
#define DEV_TYPE_FILTER 0x0000000000000040
#define DEV_TYPE_SURPRISE_REMOVED 0x0000000000000080
#define DEV_TYPE_NOT_ENUMERATED 0x0000000000000100

#define DEV_TYPE_PDO 0x0000000000000020
#define DEV_TYPE_NOT_PRESENT 0x0000000000000002
//
// Loop until we get back to the parent
//
while (deviceExtension != NULL) {

//
// The only objects that we care about are those that are marked as
// PDOs and have a phsyical object associated with them
//
if (deviceExtension->Flags & DEV_TYPE_PDO &&
deviceExtension->DeviceObject != NULL &&
!(deviceExtension->Flags & DEV_MASK_NOT_PRESENT) ) {

//
// We don't ObReferenceO here because we are still at
// dispatch level (and for efficiency's sake, we don't
// want to drop down)
//
newRelations->Objects[index] =
deviceExtension->DeviceObject;


0: kd> dt DEVICE_RELATIONS 899875a0
nt!DEVICE_RELATIONS
+0x000 Count : 0
+0x004 Objects : [1] 0x899050e8 _DEVICE_OBJECT
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_DEVICE_OBJECT * (*)[1])0x899875a4))
(*((ntkrnlmp!_DEVICE_OBJECT * (*)[1])0x899875a4)) [Type: _DEVICE_OBJECT * [1]]
[0] : 0x899050e8 : Device for "\Driver\ACPI" [Type: _DEVICE_OBJECT *]
0: kd> dd 899875a0
899875a0 00000000 899050e8 00000000 00000000
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> r
eax=02010020 ebx=f743b620 ecx=00402000 edx=00402000 esi=899c0d58 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000001


//
// Check to see if we have found all the objects that we care
// about. As in, don't mess the system by walking past the end
// of the device relations
//
if (newRelationSize == index) { //下断点

//
// Done
//
break;

}


0: kd> bp f7400533
0: kd> g
Breakpoint 87 hit
eax=00000000 ebx=f743b620 ecx=2000010a edx=00000000 esi=899ae008 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000001
0: kd> dd 899875a0
899875a0 00000000 899050e8 00000000 00000000
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00000000 ebx=f743b620 ecx=2000010a edx=00000000 esi=899aee58 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000001
0: kd> dd 899875a0
899875a0 00000000 899050e8 00000000 00000000
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00000020 ebx=f743b620 ecx=00406000 edx=00406000 esi=899aec58 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000002
0: kd> dd 899875a0
899875a0 00000000 899050e8 89906690 00000000
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00000000 ebx=f743b620 ecx=2037010a edx=00000000 esi=899aea40 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000002
0: kd> dd 899875a0
899875a0 00000000 899050e8 89906690 00000000
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00300020 ebx=f743b620 ecx=8051e010 edx=8051e010 esi=899ab690 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000003
0: kd> dd 899875a0
899875a0 00000000 899050e8 89906690 8952a6c8
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00000000 ebx=f743b620 ecx=2037010a edx=00000000 esi=8990eaf0 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000003
0: kd> dd 899875a0
899875a0 00000000 899050e8 89906690 8952a6c8
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00000000 ebx=f743b620 ecx=6030010a edx=00000000 esi=8990e8d8 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000003
0: kd> dd 899875a0
899875a0 00000000 899050e8 89906690 8952a6c8
899875b0 00000000 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00300020 ebx=f743b620 ecx=8051e010 edx=8051e010 esi=89906008 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000004
0: kd> dd 899875a0
899875a0 00000000 899050e8 89906690 8952a6c8
899875b0 8952a858 00000000 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268
0: kd> g
Breakpoint 87 hit
eax=00360020 ebx=f743b620 ecx=0058a000 edx=0058a000 esi=89906ea0 edi=899875a0
eip=f7400533 esp=f789a220 ebp=f789a250 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!ACPIDetectPdoDevices+0x355:
f7400533 8b45f4 mov eax,dword ptr [ebp-0Ch] ss:0010:f789a244=00000005
0: kd> dd 899875a0
899875a0 00000000 899050e8 89906690 8952a6c8
899875b0 8952a858 8952a9e8 02050004 46706341
899875c0 89987568 8997706c 00000000 00000001
899875d0 00000001 f740d62c 89907c70 899771c4
899875e0 00180005 46706341 80bf6229 80bf6229
899875f0 020b0002 50706341 8957e130 89900280
89987600 8993eb28 8993eb28 5f534750 8993ea28
89987610 02120006 46706341 898a8188 89961268

//
// Update the size of the relations by the number of matches that we
// successfully made
//
newRelations->Count = index;
newRelationSize = index;


0: kd> dd 899875a0
899875a0 00000005 899050e8 89906690 8952a6c8
899875b0 8952a858 8952a9e8 02050004 46706341
0: kd> dt DEVICE_RELATIONS 899875a0
nt!DEVICE_RELATIONS
+0x000 Count : 5
+0x004 Objects : [1] 0x899050e8 _DEVICE_OBJECT


//
// We have to reference all of the objects that we added
//
index = (currentRelations != NULL ? currentRelations->Count : 0);
for (; index < newRelationSize; index++) {

//
// Attempt to reference the object
//
status = ObReferenceObjectByPointer(
newRelations->Objects[index],
0,
NULL,
KernelMode
);

//
// Update the device relation pointer
//
*DeviceRelations = newRelations;

//
// Done
//
return STATUS_SUCCESS;
}


0: kd> dv DeviceRelations
DeviceRelations = 0xf789a2a4
0: kd> dx -r1 ((ACPI!_DEVICE_RELATIONS * *)0xf789a2a4)
((ACPI!_DEVICE_RELATIONS * *)0xf789a2a4) : 0xf789a2a4 [Type: _DEVICE_RELATIONS * *]
0x899875a0 [Type: _DEVICE_RELATIONS *]
0: kd> dx -r1 ((ACPI!_DEVICE_RELATIONS *)0x899875a0)
((ACPI!_DEVICE_RELATIONS *)0x899875a0) : 0x899875a0 [Type: _DEVICE_RELATIONS *]
[+0x000] Count : 0x5 [Type: unsigned long]
[+0x004] Objects [Type: _DEVICE_OBJECT * [1]]

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

十大调味拉篮品牌推荐,小空间收纳利器盘点

在厨房装修中&#xff0c;调味拉篮虽小&#xff0c;却关乎日常下厨的便捷与效率。一款设计合理、质量上乘的拉篮&#xff0c;能有效解决调料瓶罐杂乱、取用不便的痛点&#xff0c;让厨房空间井井有条。本文将为您推荐十款市场上备受关注的调味拉篮品牌&#xff0c;并从设计、功…

作者头像 李华
网站建设 2026/6/10 15:08:07

XFCN兴飞 PZ254V-11-04P 2.54m 排针

注释: 电压额定值:250V交流/直流电流额定值:3.0A交流/直流 介电耐压:500伏交流/分钟 接触电压:最大20M2绝缘电压:最小1000兆伏 工作温度:-40C至105C 绝缘材料:聚酯。UL94V-0 接触材料:黄铜 接触镀层:整体镍基AuorSn镀层

作者头像 李华
网站建设 2026/6/15 17:19:26

关系数据库替换用金仓:从 Oracle 到 KingbaseES 的迁移实战

我写这篇不是“产品介绍”&#xff0c;而是一份替换项目的开发者笔记&#xff1a;哪些地方能省心&#xff0c;哪些地方最好提前踩刹车。文里所有 SQL/PLSQL 片段我都按“复制到 ksql 就能跑”来准备&#xff0c;把 Oracle 迁移里最常见的一些改造点&#xff0c;尽量用一条能执行…

作者头像 李华
网站建设 2026/6/16 9:53:28

智能门禁(有完整资料)

资料查找方式&#xff1a; 特纳斯电子&#xff08;电子校园网&#xff09;&#xff1a;搜索下面编号即可 编号&#xff1a; HJJ-32-2021-015 设计简介&#xff1a; 本设计是基于单片机的智能门禁系统&#xff0c;主要实现以下功能&#xff1a; 拨动开关设置家中是否有人家中…

作者头像 李华
网站建设 2026/6/15 15:55:33

CSS伪元素选择器:::before与::after深度解析

CSS伪元素选择器&#xff1a;::before与::after深度解析 在CSS的样式体系中&#xff0c;伪元素选择器&#xff08;如::before和::after&#xff09;是构建复杂视觉效果的核心工具。它们通过虚拟插入内容的方式&#xff0c;在不修改HTML结构的前提下实现装饰性元素、图形效果和…

作者头像 李华
网站建设 2026/6/10 11:29:09

企业级Eplan许可证监控系统

企业级Eplan许可证监控系统&#xff1a;让软件授权管理更高效、更安心在当今企业运营中&#xff0c;软件的合规性已经成为一个不容忽视的问题。特别是像Eplan这样的专业工程设计软件&#xff0c;广泛应用于电气设计、机械工程、工业自动化等领域&#xff0c;其许可证的有效性直…

作者头像 李华