从注册表中读取REG_RESOURCE_LIST值

时间:2013-04-28 06:38:42

标签: c# .net registry

我正在尝试从注册表中读取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 任何帮助都会得到满足,谢谢。

2 个答案:

答案 0 :(得分:3)

要获取REG_RESOURCE_LIST,您需要使用RegQueryValueEx()。 lpType out参数中您应该期望的值是8(see here)。您在lpData out参数中返回的数据是CM_RESOURCE_LIST

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

答案 1 :(得分:0)

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_FULL_RESOURCE_DESCRIPTOR的列表。