func RegistryKeyUint32(rootKey *RegistryKey, subKeyPath, valueName string) (value uint32, err error) { var hKey win.HKEY if win.RegOpenKeyEx( rootKey.hKey, syscall.StringToUTF16Ptr(subKeyPath), 0, win.KEY_READ, &hKey) != win.ERROR_SUCCESS { return 0, newError("RegistryKeyUint32: Failed to open subkey.") } defer win.RegCloseKey(hKey) bufSize := uint32(4) if win.ERROR_SUCCESS != win.RegQueryValueEx( hKey, syscall.StringToUTF16Ptr(valueName), nil, nil, (*byte)(unsafe.Pointer(&value)), &bufSize) { return 0, newError("RegQueryValueEx") } return }
func RegistryKeyString(rootKey *RegistryKey, subKeyPath, valueName string) (value string, err error) { var hKey win.HKEY if win.RegOpenKeyEx( rootKey.hKey, syscall.StringToUTF16Ptr(subKeyPath), 0, win.KEY_READ, &hKey) != win.ERROR_SUCCESS { return "", newError("RegistryKeyString: Failed to open subkey.") } defer win.RegCloseKey(hKey) var typ uint32 var data []uint16 var bufSize uint32 if win.ERROR_SUCCESS != win.RegQueryValueEx( hKey, syscall.StringToUTF16Ptr(valueName), nil, &typ, nil, &bufSize) { return "", newError("RegQueryValueEx #1") } data = make([]uint16, bufSize/2+1) if win.ERROR_SUCCESS != win.RegQueryValueEx( hKey, syscall.StringToUTF16Ptr(valueName), nil, &typ, (*byte)(unsafe.Pointer(&data[0])), &bufSize) { return "", newError("RegQueryValueEx #2") } return syscall.UTF16ToString(data), nil }