private void FillKeys(RegistryKeySnapshot snapshot, RegistryKey key) { if (key.SubKeyCount != 0) { RegistryKeySnapshotCollection children; children = new RegistryKeySnapshotCollection(snapshot); // ReSharper disable once LoopCanBePartlyConvertedToQuery foreach (string name in key.GetSubKeyNames()) { // HACK: Although I thought key names were unique, clearly I was wrong as the scan used to crash on // HKEY_LOCAL_MACHINE\SOFTWARE\Yamaha APO which appears at least twice on my system, although RegEdit // only shows a single copy if (!children.Contains(this.GetShortName(name))) { RegistryKey subKey; subKey = this.GetSubKey(key, name); if (subKey != null) { RegistryKeySnapshot childSnapshot; childSnapshot = this.TakeSnapshot(subKey); children.Add(childSnapshot); } } } snapshot.SubKeys = children; } }
private void CompareKeys(RegistryKeySnapshotCollection lhs, RegistryKeySnapshotCollection rhs, ICollection <ChangeResult> results) { if (lhs != null && rhs != null) { this.CompareKeys(lhs, rhs, ChangeType.Insertion, results); this.CompareKeys(rhs, lhs, ChangeType.Deletion, results); } }
private void CompareKeys(RegistryKeySnapshotCollection lhs, RegistryKeySnapshotCollection rhs, ChangeType type, ICollection <ChangeResult> results) { foreach (RegistryKeySnapshot key in lhs) { string name; RegistryKeySnapshot compare; name = key.Name; if (rhs == null || !rhs.TryGetValue(name, out compare)) { results.Add(new ChangeResult(type, key.FullPath)); } else if (type == ChangeType.Insertion) { this.CompareKeys(key, compare, results); } } }