我正在尝试从注册表中读取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
任何帮助都会得到满足,谢谢。
答案 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)
c#项目从注册表中正确解码了REG_RESOURCE_LIST数据结构,该数据结构基于CM_RESOURCE_LIST结构,该结构是一个包含许多CM_FULL_RESOURCE_DESCRIPTOR的列表。