news 2026/6/20 11:05:37

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/11 14:59:59

‌模糊测试增强:遗传算法驱动的API边界用例生成工具‌

边界测试的痛点与遗传算法的革新 API测试中&#xff0c;边界值输入校验的缺失常导致接口崩溃或安全漏洞&#xff0c;传统手动编写用例效率低下&#xff08;耗时占比超40%&#xff09;。遗传算法&#xff08;Genetic Algorithm, GA&#xff09;结合模糊测试&#xff08;Fuzzing…

作者头像 李华
网站建设 2026/6/15 15:46:42

百考通一句话需求,一键生成专业问卷,让调研智能高效

百考通&#xff08;https://www.baikaotong.ai.com&#xff09;深刻理解这一痛点&#xff0c;凭借前沿的AI技术&#xff0c;隆重推出“智能问卷设计”功能&#xff0c;旨在将繁琐的问卷制作过程简化为一句描述&#xff0c;让专业调研触手可及。 一、告别繁琐&#xff1a;一句话…

作者头像 李华
网站建设 2026/6/13 6:40:53

HoRain云--CentOS7路由追踪安装与使用全攻略

&#x1f3ac; HoRain 云小助手&#xff1a;个人主页 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站&#xff0c;性价比超高&#xff0c;大内存超划算&#xff01;忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …

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

uni-app—— uni-app 小程序页面返回后数据刷新的 5 种方案对比

问题现象 在一个审批小程序中&#xff0c;用户操作流程如下&#xff1a; 进入审批列表&#xff0c;看到一条"草稿"状态的申请点击进入详情页点击"继续编辑"进入编辑页编辑完成后点击"重新提交申请"返回列表页 问题&#xff1a;返回列表后&…

作者头像 李华
网站建设 2026/5/28 14:56:07

用过才敢说! 降AIGC网站 千笔·专业降AIGC智能体 VS 学术猹,MBA专属更高效

在AI技术迅速发展的背景下&#xff0c;越来越多的学生和研究人员开始借助AI工具提升论文写作效率。然而&#xff0c;随着学术审查标准的不断升级&#xff0c;AI生成内容的痕迹和重复率问题日益凸显&#xff0c;成为影响论文通过率的关键障碍。许多学生在使用各类降AI率和降重复…

作者头像 李华