gpt4 book ai didi

windows - 在 Go (Golang) 中枚举注册表值

转载 作者:IT王子 更新时间:2023-10-29 01:14:41 28 4
gpt4 key购买 nike

我正在尝试使用 Go 枚举 Windows 注册表中的值列表,但我遇到了一些麻烦。我尝试了两种方法:使用 Go 提供的 syscall 库调用 RegEnumValue,以及 using a Windows API wrapper by lxn .在这两种情况下,我都遇到了同样的问题。这是我正在使用的代码(目前正在使用 lxn 的 win 库):

var root win.HKEY
rootpath, _ := syscall.UTF16PtrFromString("HARDWARE\\DEVICEMAP\\SERIALCOMM")
fmt.Println(win.RegOpenKeyEx(win.HKEY_LOCAL_MACHINE, rootpath, 0, win.KEY_READ, &root))

var name_length uint32 = 72
var name *uint16
var key_type uint32
var lpData *byte
var lpDataLength uint32 = 72
var zero_uint uint32 = 0
fmt.Println(win.RegEnumValue(root, zero_uint, name, &name_length, nil, &key_type, lpData, &lpDataLength))

win.RegCloseKey(root)

在这种情况下,RegEnumValue 始终返回代码 87,即 MSDN's only explanation是“参数不正确。”

有没有人有任何想法可以为我指明正确的方向?

最佳答案

Golang sub-reddit 的一名成员指出,我实际上并没有为传递给 RegEnumValue 的缓冲区分配任何内存。因此,我已将上面的示例更正为以下内容:

var name_length uint32 = 72
var key_type uint32
var lpDataLength uint32 = 72
var zero_uint uint32 = 0
name := make([]uint16, 72)
lpData := make([]byte, 72)

win.RegEnumValue(root, zero_uint, &name[0], &name_length, nil, &key_type, &lpData[0], &lpDataLength)

很明显,72 这个“魔数(Magic Number)”应该换成别的东西。还有另一种称为 RegQueryInfoKey 的方法可以检索有关注册表项的信息,以便为项中的最大名称和值分配正确的字节数。

关于windows - 在 Go (Golang) 中枚举注册表值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18425465/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com