Search code examples
c#windows-runtimewindows-10win-universal-app

How do I get a Unique Identifier for a Device within Windows 10 Universal?


This is my old implementation to get a Unique DeviceID for Windows Universal 8.1 but the type HardwareIdentification does not exist anymore.

    private static string GetId()
    {
        var token = HardwareIdentification.GetPackageSpecificToken(null);
        var hardwareId = token.Id;
        var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);

        byte[] bytes = new byte[hardwareId.Length];
        dataReader.ReadBytes(bytes);

        return BitConverter.ToString(bytes).Replace("-", "");
    }

Solution

  • That is the complete solution for Windows Desktop:

    • Add the Extension reference "Windows Desktop Extensions for the UWP" like Peter Torr - MSFT mentioned.

    Use this Code to get the HardwareId:

    using System;
    using Windows.Security.ExchangeActiveSyncProvisioning;
    using Windows.System.Profile;
    
    namespace Tobit.Software.Device
    {
        public sealed class DeviceInfo
        {
            private static DeviceInfo _Instance;
            public static DeviceInfo Instance
            {
                get {
                    if (_Instance == null)
                        _Instance = new DeviceInfo();
                    return _Instance; }
    
            }
    
            public string Id { get; private set; }
            public string Model { get; private set; }
            public string Manufracturer { get; private set; }
            public string Name { get; private set; }
            public static string OSName { get; set; }
    
            private DeviceInfo()
            {
                Id = GetId();
                var deviceInformation = new EasClientDeviceInformation();
                Model = deviceInformation.SystemProductName;
                Manufracturer = deviceInformation.SystemManufacturer;
                Name = deviceInformation.FriendlyName;
                OSName = deviceInformation.OperatingSystem;
            }
    
            private static string GetId()
            {
                if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.System.Profile.HardwareIdentification"))
                {
                    var token = HardwareIdentification.GetPackageSpecificToken(null);
                    var hardwareId = token.Id;
                    var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
    
                    byte[] bytes = new byte[hardwareId.Length];
                    dataReader.ReadBytes(bytes);
    
                    return BitConverter.ToString(bytes).Replace("-", "");
                }
    
                throw new Exception("NO API FOR DEVICE ID PRESENT!");
            }
        }
    }