Подтвердить что ты не робот

Могу ли я однозначно идентифицировать устройство в Windows 10/Windows 8/WinRT

Есть ли какой-либо механизм для идентификации устройства однозначно (даже если он анонимный)?

Чтобы быть понятным, под "устройством" я подразумеваю компьютер/сланец/pc.

Windows 8.x

http://codepaste.net/ybt893

string HardwareId()
{
    var token = Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null);
    var hardwareId = token.Id;
    var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
    var bytes = new byte[hardwareId.Length];
    dataReader.ReadBytes(bytes);
    return BitConverter.ToString(bytes);
}

Windows 10

Вы должны добавить SDK для мобильного и/или рабочего стола.

string HardwareId()
{
    var token = HardwareIdentification.GetPackageSpecificToken(null);
    var hardwareId = token.Id;
    var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(hardwareId);
    var bytes = new byte[hardwareId.Length];
    dataReader.ReadBytes(bytes);
    return BitConverter.ToString(bytes);
}
4b9b3361

Ответ 1

Такая способность только что была добавлена ​​в RTM Windows 8:

Windows.System.Profile.HardwareIdentification.GetPackageSpecificToken(null)

Ответ 2

Как правило, для приложений Metro Style в Windows 8 не существует удобного способа получения уникального идентификатора системы, такого как Windows Phone 7 с его Microsoft.Phone.Info.DeviceExtendedProperties.GetValue( "DeviceUniqueId" )

Лучшим решением, которое я нашел до сих пор, является просто генерация нового руководства в локальное хранилище приложений и используйте этот идентификатор для идентификации компьютера для текущих и будущих запусков вашего приложения.

var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
Object value = localSettings.Values["uniqueDeviceId"];
if (!value)
{
    value = Guid.NewGuid();
    localSettings.Values["uniqueDeviceId"] = value;
}

Имейте в виду, что пользователь может удалить локальное хранилище и заставить ваше приложение забыть и восстановить это значение (или, возможно, даже изменить/подделать значение), поэтому не зависеть от него для каких-либо критических целей безопасности. Поскольку я использую этот метод только для приблизительной статистики и отчетов об использовании, это подходит для моих нужд.

Ответ 3

Может ли это использоваться как согласованный идентификатор для зарегистрированного пользователя?

http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.exchangeactivesyncprovisioning.easclientdeviceinformation.id.aspx

EasClientDeviceInformation.Id | id

Возвращает идентификатор локального компьютера. Свойство Id представляет DeviceId, используя GUID, усеченный из первых 16 байт хэш SHA256 MachineID, SID пользователя и идентификатор приложения, где MachineID использует SID локальной группы пользователей. Каждый компонент GUID возвращается в сетевом порядке байтов.