Igor Kulman

How to uniquely identify a Windows 8 device

· Igor Kulman

When developing a Windows 8 app you may need to uniquely identify the device the app runs on. One reason may be the implementation of in-app purchases.

The Windows.System.Profile namespace contains HardwareToken that you can get by calling HardwareIdentification.GetPackageSpecificToken(null)

var packageSpecificToken = Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null);

This class contains a bunch of interesting fields

var hardwareId = packageSpecificToken.Id;
var signature = packageSpecificToken.Signature;
var certificate = packageSpecificToken.Certificate;

All of these fields are of type Windows.Storage.Stream.Ibuffer, therefore COM calls. To use a value useable with .NET you have to use the DataReader, I get the unique device identifier from the hardwareId

var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
var array = new byte[hardwareId.Length];dataReader.ReadBytes(array)

The resulting byte array can be converted to an UTF8 string

string uuid = System.Text.Encoding.UTF8.GetString(array, 0, array.Length); 

I prefer concatenating the bytes to a string

StringBuilder sb = new StringBuilder();
for (var i = 0; i < array.Length; i++)
{        
    sb.Append(array[i].ToString());
} 
string uuid = sb.ToString();

Update: The hardware token of a device can change with hardware changes. Even small hardware changes like disabling Bluetooth can change the hardware token. You should generate it just once and save it.

Enjoyed this article? Support my work by buying me a coffee! ☕️

Buy Me a Coffee

See also