news 2026/6/10 18:42:10

ACPI!PnpBiosResourcesToNtResources函数分析转移到nt!IO_RESOURCE_REQUIREMENTS_LIST和LogConf下的BasicConfigVector

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ACPI!PnpBiosResourcesToNtResources函数分析转移到nt!IO_RESOURCE_REQUIREMENTS_LIST和LogConf下的BasicConfigVector

ACPI!PnpBiosResourcesToNtResources函数分析转移到nt!IO_RESOURCE_REQUIREMENTS_LIST和LogConf下BasicConfigVector的关系相等

while (TRUE) {

//
// Determine the size of the PNP resource descriptor
//
if ( !(tagName & LARGE_RESOURCE_TAG) ) {

//
// Small Tag
//
increment = (USHORT) (tagName & SMALL_TAG_SIZE_MASK) + 1;
tagName &= SMALL_TAG_MASK;


0: kd> p
eax=00000079 ebx=00000000 ecx=80ae0dfa edx=80b18958 esi=00000088 edi=e129e553
eip=f744c579 esp=f789a170 ebp=f789a1ac 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!PnpBiosResourcesToNtResources+0x97:
f744c579 a880 test al,80h
0: kd> p
eax=00000079 ebx=00000000 ecx=80ae0dfa edx=80b18958 esi=00000088 edi=e129e553
eip=f744c580 esp=f789a170 ebp=f789a1ac 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!PnpBiosResourcesToNtResources+0x9e:
f744c580 2407 and al,7
0: kd> p
eax=00000002 ebx=00000000 ecx=80ae0dfa edx=80b18958 esi=00000088 edi=e129e553
eip=f744c587 esp=f789a170 ebp=f789a1ac 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!PnpBiosResourcesToNtResources+0xa5:
f744c587 80650bf8 and byte ptr [ebp+0Bh],0F8h ss:0010:f789a1b7=79
0: kd> p
eax=00000002 ebx=00000000 ecx=80ae0dfa edx=80b18958 esi=00000088 edi=e129e553
eip=f744c58b esp=f789a170 ebp=f789a1ac 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!PnpBiosResourcesToNtResources+0xa9:
f744c58b 0fb6750b movzx esi,byte ptr [ebp+0Bh] ss:0010:f789a1b7=78


//
// We are done if the current tag is the end tag
//
if (tagName == TAG_END) {

ACPIPrint( (
ACPI_PRINT_RESOURCES_2,
"PnpBiosResourcesToNtResources: TAG_END\n"
) );
break;
}

//
// How much many common resources are there?
//
if (Array[0] != NULL) {

size2 = Array[0]->Count; =0x11

} else {

size2 = 0;
}
0: kd> dv
Data = 0x7829e370 "--- memory read error at address 0x7829e370 ---"
Flags = 1
List = 0xf789a1e0
tagName = 0x78 'x'
ResourceCount = 0x13
buffer = 0x00000001 "--- memory read error at address 0x00000001 ---"
Array = 0xe1278800
0: kd> dx -r1 ((ACPI!_IO_RESOURCE_LIST * *)0xe1278800)
((ACPI!_IO_RESOURCE_LIST * *)0xe1278800) : 0xe1278800 [Type: _IO_RESOURCE_LIST * *]
0xe12a8008 [Type: _IO_RESOURCE_LIST *]
0: kd> dx -r1 ((ACPI!_IO_RESOURCE_LIST *)0xe12a8008)
((ACPI!_IO_RESOURCE_LIST *)0xe12a8008) : 0xe12a8008 [Type: _IO_RESOURCE_LIST *]
[<Raw View>] [Type: _IO_RESOURCE_LIST]
[0] : Bus Number Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[1] : Memory Resource: 0xa0000 - 0xbffff of length 0x20000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[2] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[3] : Memory Resource: 0xcc000 - 0xcffff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[4] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[5] : Memory Resource: 0xd0000 - 0xd3fff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[6] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[7] : Memory Resource: 0xd4000 - 0xd7fff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[8] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[9] : Memory Resource: 0xd8000 - 0xdbfff of length 0x4000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[10] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[11] : Memory Resource: 0x80000000 - 0xfebfffff of length 0x7ec00000 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[12] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[13] : Port Resource: 0x0 - 0xcf7 of length 0xcf8 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[14] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[15] : Port Resource: 0xd00 - 0xfeff of length 0xf200 and alignment 0x1 [Type: _IO_RESOURCE_DESCRIPTOR]
[16] : Private Device Resource [Type: _IO_RESOURCE_DESCRIPTOR]
0: kd> dt ACPI!_IO_RESOURCE_LIST 0xe12a8008
+0x000 Version : 1
+0x002 Revision : 1
+0x004 Count : 0x11
+0x008 Descriptors : [1] _IO_RESOURCE_DESCRIPTOR

dv
ArrayIndex = 0
ArrayAlternateIndex = 0


//
// This is to account for the case where there are no dependent resources...
// // 这是为了处理没有依赖资源的情况。..
if (ArrayAlternateIndex == 0) {

if (Array[0] == NULL || Array[0]->Count == 0) {

ACPIPrint( (
ACPI_PRINT_WARNING,
"PnpBiosResourcesToNtResources: No Resources to Report\n"
) );

PnpiClearAllocatedMemory( Array, ArraySize );
*List = NULL;

return STATUS_UNSUCCESSFUL;
}

size += ( (Array[0])->Count - 1) * sizeof(IO_RESOURCE_DESCRIPTOR) +
sizeof(IO_RESOURCE_LIST);
}


//
// Allocate the required amount of space
//
(*List) = ExAllocatePoolWithTag( PagedPool, size, ACPI_RESOURCE_POOLTAG );
ACPIPrint( (
ACPI_PRINT_RESOURCES_2,
"PnpBiosResourceToNtResources: ResourceRequirementsList = %#08lx (%#08lx)\n",
(*List), size ) );


RtlZeroMemory( (*List), size );

//
// Find the first place to store the information
//
(*List)->InterfaceType = PNPBus;
(*List)->BusNumber = 0;
(*List)->ListSize = size;
buffer = (PUCHAR) &( (*List)->List[0]);


0: kd> dt IO_RESOURCE_REQUIREMENTS_LIST e129c898
nt!IO_RESOURCE_REQUIREMENTS_LIST
+0x000 ListSize : 0
+0x004 InterfaceType : 0 ( Internal )
+0x008 BusNumber : 0
+0x00c SlotNumber : 0
+0x010 Reserved : [3] 0
+0x01c AlternativeLists : 0
+0x020 List : [1] _IO_RESOURCE_LIST


0: kd> dt IO_RESOURCE_REQUIREMENTS_LIST e129c898
nt!IO_RESOURCE_REQUIREMENTS_LIST
+0x000 ListSize : 0x248
+0x004 InterfaceType : f ( PNPBus )
+0x008 BusNumber : 0
+0x00c SlotNumber : 0
+0x010 Reserved : [3] 0
+0x01c AlternativeLists : 0
+0x020 List : [1] _IO_RESOURCE_LIST
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_LIST (*)[1])0xe129c8b8))
(*((ntkrnlmp!_IO_RESOURCE_LIST (*)[1])0xe129c8b8)) [Type: _IO_RESOURCE_LIST [1]]
[0] [Type: _IO_RESOURCE_LIST]
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_LIST *)0xe129c8b8))
(*((ntkrnlmp!_IO_RESOURCE_LIST *)0xe129c8b8)) [Type: _IO_RESOURCE_LIST]
[<Raw View>] [Type: _IO_RESOURCE_LIST]
0: kd> dx -id 0,0,899a2278 -r1 -nv (*((ntkrnlmp!_IO_RESOURCE_LIST *)0xe129c8b8))
(*((ntkrnlmp!_IO_RESOURCE_LIST *)0xe129c8b8)) [Type: _IO_RESOURCE_LIST]
[+0x000] Version : 0x0 [Type: unsigned short]
[+0x002] Revision : 0x0 [Type: unsigned short]
[+0x004] Count : 0x0 [Type: unsigned long]
[+0x008] Descriptors [Type: _IO_RESOURCE_DESCRIPTOR [1]]


//
// This check is required because we might just have a common list, with
// no dependent resources...
//
if (ArrayAlternateIndex == 0) {

ASSERT( size2 != 0 );

size = (size2 - 1) * sizeof(IO_RESOURCE_DESCRIPTOR) + sizeof(IO_RESOURCE_LIST);
RtlCopyMemory(buffer,Array[0],size);
(*List)->AlternativeLists += 1;
}


0: kd> dx -id 0,0,899a2278 -r1 -nv (*((ntkrnlmp!_IO_RESOURCE_LIST *)0xe129c8b8))
(*((ntkrnlmp!_IO_RESOURCE_LIST *)0xe129c8b8)) [Type: _IO_RESOURCE_LIST]
[+0x000] Version : 0x1 [Type: unsigned short]
[+0x002] Revision : 0x1 [Type: unsigned short]
[+0x004] Count : 0x11 [Type: unsigned long]
[+0x008] Descriptors [Type: _IO_RESOURCE_DESCRIPTOR [1]]
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_DESCRIPTOR (*)[1])0xe129c8c0))
(*((ntkrnlmp!_IO_RESOURCE_DESCRIPTOR (*)[1])0xe129c8c0)) [Type: _IO_RESOURCE_DESCRIPTOR [1]]
[0] : Bus Number Resource [Type: _IO_RESOURCE_DESCRIPTOR]
0: kd> dx -id 0,0,899a2278 -r1 (*((ntkrnlmp!_IO_RESOURCE_DESCRIPTOR *)0xe129c8c0))
(*((ntkrnlmp!_IO_RESOURCE_DESCRIPTOR *)0xe129c8c0)) : Bus Number Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[<Raw View>] [Type: _IO_RESOURCE_DESCRIPTOR]
Type : 0x6 [Type: unsigned char]
Flags : 0x0
0: kd> dx -id 0,0,899a2278 -r1 -nv (*((ntkrnlmp!_IO_RESOURCE_DESCRIPTOR *)0xe129c8c0))
(*((ntkrnlmp!_IO_RESOURCE_DESCRIPTOR *)0xe129c8c0)) : Bus Number Resource [Type: _IO_RESOURCE_DESCRIPTOR]
[+0x000] Option : 0x0 [Type: unsigned char]
[+0x001] Type : 0x6 [Type: unsigned char]
[+0x002] ShareDisposition : 0x3 [Type: unsigned char]
[+0x003] Spare1 : 0x0 [Type: unsigned char]
[+0x004] Flags : 0x0 [Type: unsigned short]
[+0x006] Spare2 : 0x0 [Type: unsigned short]
[+0x008] u [Type: __unnamed]


0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0
+0x000 Option : 0 ''
+0x001 Type : 0x6 ''
+0x002 ShareDisposition : 0x3 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*1
+0x000 Option : 0 ''
+0x001 Type : 0x3 ''
+0x002 ShareDisposition : 0x3 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x20
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*2
+0x000 Option : 0 ''
+0x001 Type : 0x81 ''
+0x002 ShareDisposition : 0 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x6000
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*3
+0x000 Option : 0 ''
+0x001 Type : 0x3 ''
+0x002 ShareDisposition : 0x3 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x20
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*4
+0x000 Option : 0 ''
+0x001 Type : 0x81 ''
+0x002 ShareDisposition : 0 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x6000
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*5
+0x000 Option : 0 ''
+0x001 Type : 0x3 ''
+0x002 ShareDisposition : 0x3 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x20
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*6
+0x000 Option : 0 ''
+0x001 Type : 0x81 ''
+0x002 ShareDisposition : 0 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x6000
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*7
+0x000 Option : 0 ''
+0x001 Type : 0x3 ''
+0x002 ShareDisposition : 0x3 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x20
+0x006 Spare2 : 0
+0x008 u : __unnamed
0: kd> dt ntkrnlmp!_IO_RESOURCE_DESCRIPTOR 0xe129c8c0+20*8
+0x000 Option : 0 ''
+0x001 Type : 0x81 ''
+0x002 ShareDisposition : 0 ''
+0x003 Spare1 : 0 ''
+0x004 Flags : 0x6000
+0x006 Spare2 : 0
+0x008 u : __unnamed

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ACPI\PNP0A03\2&daba3ff&2\LogConf]
"BasicConfigVector"=hex(a):08,03,00,00,0f,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,01,00,01,00,17,00,00,00,00,06,\0x17=0n25个
03,00,00,00,00,00,80,00,00,00,00,00,00,00,7f,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,81,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00
,00,03,03,00,20,00,00,00,00,00,02,00,01,\
00,00,00,00,00,0a,00,00,00,00,00,ff,ff,0b,00,00,00,00,00,
00,81,00,00,00,60,\
00,00,03,00,00,00,00,00,0a,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,
00,81,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00
,00,03,03,00,20,00,00,00,00,40,00,00,01,00,00,00,00,\
00,0d,00,00,00,00,00,ff,3f,0d,00,00,00,00,00
,00,81,00,00,00,60,00,00,03,00,\
00,00,00,00,0d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,81,00,\
00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,03,03,00,20,00,00,00,00,40,00,00,01,00,00,00,00,40,0d,00,00,\
00,00,00,ff,7f,0d,00,00,00,00,00,00,81,00,00,00,60,00,00,03,00,00,00,00,40,\
0d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,81,00,00,01,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,03,03,00,20,00,00,00,00,40,00,00,01,00,00,00,00,80,0d,00,00,00,00,00,ff,\
bf,0d,00,00,00,00,00,00,81,00,00,00,60,00,00,03,00,00,00,00,80,0d,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,81,00,00,01,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,03,00,\
20,00,00,00,00,00,c0,3e,01,00,00,00,00,00,00,c0,00,00,00,00,ff,ff,bf,fe,00,\
00,00,00,00,81,00,00,00,60,00,00,03,00,00,00,00,00,00,c0,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,81,00,00,01,00,00,00,00,00,00,00,00,00,00,\ 25个
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,03,00,20,00,00,00,\
f8,0c,00,00,01,00,00,00,00,00,00,00,00,00,00,00,f7,0c,00,00,00,00,00,00,00,\
81,00,00,00,60,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,81,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,03,00,20,00,00,00,00,f2,00,00,\
01,00,00,00,00,0d,00,00,00,00,00,00,ff,fe,00,00,00,00,00,00,00,81,00,00,00,\
60,00,00,01,00,00,00,00,0d,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,81,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
00,00,00,00,00,00,00,00,00

0: kd> ?0x0308
Evaluate expression: 776 = 00000308
0: kd> ?0x0308/19
Evaluate expression: 31 = 0000001f 共31行,正确。

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

分布式训练十年演进

分布式训练&#xff08;Distributed Training&#xff09; 的十年&#xff08;2015–2025&#xff09;&#xff0c;是从“多机多卡互联”向“巨型算力集群协同”&#xff0c;再到“跨地域、端云协同与内核级自动化调度”的演进史。 这十年中&#xff0c;分布式训练完成了从基础…

作者头像 李华
网站建设 2026/6/10 20:55:56

comsol亚波长超声聚焦 仿真 生物超声、高强度聚焦换能器 超声换能器 超声传感器 MEMS...

comsol亚波长超声聚焦 仿真 生物超声、高强度聚焦换能器 超声换能器 超声传感器 MEMS PMUT PVDF压电能量收集器 1-3复合压电陶瓷 1-2复合压电陶瓷设计 超声匹配层研究 等等 最近在折腾超声换能器的COMSOL仿真时发现&#xff0c;亚波长级别的声场操控简直像在玩微观世界的乐高。…

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

仿脑人工神经元:用离子忆阻器突破AI硬件极限

科学家成功创造出能够再现真实脑细胞复杂电化学行为的人工神经元。这一发表在《自然电子学》上的发现&#xff0c;标志着神经形态计算领域的重大里程碑。该领域旨在设计模仿人脑的硬件。这一进步有望将芯片尺寸缩小数个数量级&#xff0c;大幅降低能耗&#xff0c;并推动人工智…

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

jwt是什么

JWT 由三部分组成&#xff0c;用点号&#xff08; . &#xff09;分隔&#xff1a; JWT&#xff08;JSON Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在网络应用环境间安全地传输信息。它是一种紧凑、自包含的方式&#xff0c;用于…

作者头像 李华
网站建设 2026/6/10 5:34:36

其它用户信息有必要使用cookie吗

这是一个关于会话管理策略的设计问题。是否需要将其他用户信息存入 Cookie&#xff0c;取决于信息敏感度、使用频率和性能考量。一般原则&#xff1a;Token 最小化表格复制存储内容建议位置原因用户 ID / Token✅ Cookie (HttpOnly)身份认证必需&#xff0c;防 XSS用户名、头像…

作者头像 李华