private Dictionary <string, MachineIdentitifier> ConfigureIdentities() { Dictionary <string, MachineIdentitifier> identifiersDict = new Dictionary <string, MachineIdentitifier>(StringComparer.OrdinalIgnoreCase) { { "MachineName", new MachineIdentitifier(lazyMachineStore, "MachineName", MachineIdentitifier.IdType.Secondary, () => MachineName) }, { "DNSDomain", new MachineIdentitifier(lazyMachineStore, "DNSDomain", MachineIdentitifier.IdType.Secondary, () => DNSDomain) }, { "SelectedMACAddress", new MachineIdentitifier(lazyMachineStore, "SelectedMACAddress", MachineIdentitifier.IdType.Secondary, () => SelectedMACAddress) }, { "BiosUUID", new MachineIdentitifier(lazyMachineStore, "BiosUUID", MachineIdentitifier.IdType.PrimaryImmutableId, () => FormatPropertyValue(BiosUUID)) }, { "BiosSerialNumber", new MachineIdentitifier(lazyMachineStore, "BiosSerialNumber", MachineIdentitifier.IdType.PrimaryImmutableId, () => BiosSerialNumber) }, { "ConfigVersion", new MachineIdentitifier(lazyMachineStore, "ConfigVersion", MachineIdentitifier.IdType.Informational, () => ConfigVersion, (string persistedConfigVersion) => string.CompareOrdinal(persistedConfigVersion, ConfigVersion) >= 0) }, { "PersistedSelectedMACAddress", new MachinePrimaryIdentitifier(lazyMachineStore, "PersistedSelectedMACAddress", () => SelectedMACAddress, (string persistedSelectedMACAddress) => !InvalidateOnPrimaryIdChange, MACAddressStillExists) } }; identifiersDict.Add("PersistedSelectedInterface", new MachineIdentitifier(lazyMachineStore, "PersistedSelectedInterface", MachineIdentitifier.IdType.Informational, () => SelectedNetworkInterfaceDescription, (string persistedInterface) => identifiersDict["PersistedSelectedMACAddress"].IsLastPersistedValueValid || object.Equals(persistedInterface, SelectedNetworkInterfaceDescription), null, NetworkInterfaceStillExists)); identifiersDict.Add("HardwareId", new MachineComboIdentitifier(lazyMachineStore, "HardwareId", () => GetHardwareIdWithInvalidation(), () => HardwareIdValues.Select((string idName) => identifiersDict[idName]))); return(identifiersDict); }
private string GetHardwareIdWithInvalidation() { string text = HardwareIdNotObtained; try { text = MachineIdentifiers["HardwareId"].LastPersistedValue; if (!PersistedIdWasInvalidated && string.IsNullOrWhiteSpace(text)) { PersistedIdWasInvalidated = true; PersistedIdInvalidationReason = HardwareIdNotPeristed; } if (!PersistedIdWasInvalidated) { foreach (MachineIdentitifier item2 in from name in HardwareIdValues select MachineIdentifiers[name] into id where id.Type == MachineIdentitifier.IdType.PrimaryImmutableId select id) { if (!PersistedIdWasInvalidated && !item2.IsLastPersistedValueValid) { PersistedIdWasInvalidated = true; PersistedIdInvalidationReason = string.Format(string.IsNullOrWhiteSpace(item2.LastPersistedValue) ? "Persisted identity '{0}' was not found." : "{0} change requires invalidation of persisted ID.", item2.Name); } } } MachineIdentitifier machineIdentitifier = MachineIdentifiers["ConfigVersion"]; if (!PersistedIdWasInvalidated && string.Compare(machineIdentitifier.LastPersistedValue, MinValidConfigVersion, StringComparison.OrdinalIgnoreCase) < 0) { PersistedIdWasInvalidated = true; PersistedIdInvalidationReason = $"Persisted config version '{machineIdentitifier.LastPersistedValue}' is less than MinValidConfigVersion '{MinValidConfigVersion}'"; } if (!PersistedIdWasInvalidated && InvalidateOnPrimaryIdChange) { foreach (MachineIdentitifier item3 in from name in HardwareIdValues select MachineIdentifiers[name] into id where id.Type == MachineIdentitifier.IdType.PrimaryId && !PersistedIdWasInvalidated && !id.IsLastPersistedValueValid select id) { PersistedIdWasInvalidated = true; PersistedIdInvalidationReason = string.Format(string.IsNullOrWhiteSpace(item3.LastPersistedValue) ? "Persisted identity '{0}' was not found." : "PrimaryId '{0}' value no longer found on machine.", item3.Name); } } if (PersistedIdWasInvalidated) { text = JoinIdentifiers(HardwareIdValues.Select((string idName) => MachineIdentifiers[idName]), (MachineIdentitifier id) => id.CurrentSystemValue); lazyMachineStore.Value.SetProperty(StoredPropertyNamesToInts["HardwareIdDate"], DateTime.UtcNow.ToString("o")); lazyMachineStore.Value.SetProperty(StoredPropertyNamesToInts["ConfigVersion"], ConfigVersion); string[] hardwareIdValues = HardwareIdValues; foreach (string key in hardwareIdValues) { MachineIdentifiers[key].StoreValidValue(); } } lazyMachineStore.Value.Persist(); return(text); } catch (Exception item) { ExceptionsEncounteredObtainingHardwareId.Add(item); return(text); } }