Skip to content

Instantly share code, notes, and snippets.

@nitrix
Created January 27, 2021 23:36
Show Gist options
  • Save nitrix/c805624b2e06cb7bb9735d5eb5d4c05c to your computer and use it in GitHub Desktop.
Save nitrix/c805624b2e06cb7bb9735d5eb5d4c05c to your computer and use it in GitHub Desktop.
Deleting registry keys recursively on windows.
package main
import (
"golang.org/x/sys/windows/registry"
"io"
"log"
)
func main() {
key, err := registry.OpenKey(registry.CURRENT_USER, "Test", registry.ALL_ACCESS)
if err != nil {
log.Fatalln(err)
}
err = deleteRegistryKey(key)
if err != nil {
log.Fatalln(err)
}
}
func deleteRegistryKey(key registry.Key) error {
// Find all the value names inside the key and delete them.
valueNames, err := key.ReadValueNames(1000)
if err != nil && err != io.EOF {
return err
}
for _, valueName := range valueNames {
err = key.DeleteValue(valueName)
if err != nil && err != io.EOF {
return err
}
}
// Find the subkeys and delete those recursively.
subkeyNames, err := key.ReadSubKeyNames(1000)
if err != nil && err != io.EOF {
return err
}
for _, subkeyName := range subkeyNames {
subKey, err := registry.OpenKey(key, subkeyName, registry.ALL_ACCESS)
if err != nil {
return err
}
err = deleteRegistryKey(subKey)
if err != nil {
return err
}
}
// Then delete itself.
return registry.DeleteKey(key, "")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment