从注册表读取REG_RESOURCE_LIST值

本文关键字:RESOURCE LIST REG 注册表 读取 | 更新日期: 2023-09-27 18:11:07

我正试图从注册表中读取REG_RESOURCE_LIST类型的值,但没有成功。
我试图读取的具体值是HKEY_LOCAL_MACHINE'SYSTEM'CurrentControlSet'Enum'PCI'{YourNetworkInterface}'{GUID}'Control'AllocConfig
您可以通过转到HKEY_LOCAL_MACHINE'SYSTEM'CurrentControlSet'Enum'PCI,并搜索其子键(路径中的{GUID}部分)的值为Class且值为Net的键来找到此值。或者你可以直接搜索。

奇怪的是,当我通过代码打开Control键,并调用GetValueNames()时,我得到AllocConfig值名称,但是当调用GetValue("AllocConfig")时,我得到null(现实中不是null)。
此外,在ProccessMonitor中,我看到调用GetValue("AllocConfig")时,结果是Buffer Overflow
任何帮助将不胜感激,谢谢。

从注册表读取REG_RESOURCE_LIST值

要获得REG_RESOURCE_LIST,您需要使用RegQueryValueEx()。在lpType out参数中,您应该期望的值是8(见这里)。在lpData out参数中返回的数据是一个CM_RESOURCE_LIST

首先调用RegQueryValueEx来获取列表的大小,分配该大小的缓冲区,调用ReqQueryValueEx来填充缓冲区,并将缓冲区指针强制转换为PCM_RESOURCE_LIST。上面链接的CM_RESOURCE_LIST文档告诉您如何遍历列表并提取内容。

http://blogs.microsoft.co.il/ischen/2007/12/04/querying-device-hardware-resources-from-the-windows-registry-using-c/

c#项目正确地从注册表中解码REG_RESOURCE_LIST数据结构,注册表基于CM_RESOURCE_LIST结构,CM_RESOURCE_LIST是一个包含许多cm_full_resource_descriptor的列表。
相关文章: