从注册表读取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,您需要使用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的列表。