restoreSavedRegistryKeys restores all saved registry keys from their saved registry state.
()
| 477 | // restoreSavedRegistryKeys restores all saved registry keys from their saved |
| 478 | // registry state. |
| 479 | func 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:] |
no test coverage detected