MCPcopy
hub / github.com/hardentools/hardentools / restoreSavedRegistryKeys

Function restoreSavedRegistryKeys

registry_utils.go:479–626  ·  view source on GitHub ↗

restoreSavedRegistryKeys restores all saved registry keys from their saved registry state.

()

Source from the content-addressed store, hash-verified

477// restoreSavedRegistryKeys restores all saved registry keys from their saved
478// registry state.
479func restoreSavedRegistryKeys() error {
480 // Open hardentools root key.
481 hardentoolsKey, err := registry.OpenKey(registry.CURRENT_USER, hardentoolsKeyPath, registry.QUERY_VALUE)
482 if err != nil {
483 return err
484 }
485 defer hardentoolsKey.Close()
486
487 params, err := hardentoolsKey.ReadValueNames(0)
488 if err != nil {
489 Info.Printf("Can't ReadSubKeyNames %s %#v", hardentoolsKeyPath, err)
490 return err
491 }
492
493 //// handle DWORD and new states
494 settings := make(map[string]uint64)
495 for _, param := range params {
496 val, _, err := hardentoolsKey.GetIntegerValue(param)
497 if err == nil {
498 settings[param] = val
499 }
500 }
501
502 for regKey, regValue := range settings {
503 if strings.HasPrefix(regKey, "SavedState_") {
504 // TODO: this section can be removed in future versions
505 regKey = strings.TrimPrefix(regKey, "SavedState_")
506 rootKeyName := strings.Split(regKey, "\\")[0]
507 regKey = strings.TrimPrefix(regKey, rootKeyName)
508 regKey = strings.TrimPrefix(regKey, "\\")
509 valueName := regKey[strings.LastIndex(regKey, "_")+1:]
510 regKey = strings.TrimSuffix(regKey, "_"+valueName)
511 Trace.Printf("to be restored: %s\\%s\\%s = %d\n", rootKeyName,
512 regKey, valueName, regValue)
513
514 rootKey, err := getRootKeyFromName(rootKeyName)
515 if err == nil {
516 key, err := registry.OpenKey(rootKey, regKey, registry.ALL_ACCESS)
517 if err != nil {
518 Info.Println("Could not open registry key " + regKey + " due to error: " + err.Error())
519 } else {
520 defer key.Close()
521
522 Info.Printf("restoreSavedRegistryKeys: Restoring registry value %s\\%s = %d",
523 regKey, valueName, regValue)
524 err = key.SetDWordValue(valueName, uint32(regValue))
525 if err != nil {
526 Info.Printf("Could not restore registry value %s\\%s = %d due to error: %s\n",
527 regKey, valueName, regValue, err.Error())
528 }
529 }
530 }
531 } else if strings.HasPrefix(regKey, "SavedStateNew_") {
532 regKey = strings.TrimPrefix(regKey, "SavedStateNew_")
533 rootKeyName := strings.Split(regKey, "\\")[0]
534 regKey = strings.TrimPrefix(regKey, rootKeyName)
535 regKey = strings.TrimPrefix(regKey, "\\")
536 valueName := regKey[strings.LastIndex(regKey, "____")+4:]

Callers 3

cmdHardenRestoreFunction · 0.85
restoreAllFunction · 0.85
hardenDefaultsAgainFunction · 0.85

Calls 1

getRootKeyFromNameFunction · 0.85

Tested by

no test coverage detected