我可以在Windows 10 / Windows 8 / WinRT中唯一标识设备

时间:2012-05-10 00:13:42

标签: windows-8 windows-runtime

是否有任何机制可以唯一地识别设备(即使它是匿名的)?

要清楚,“设备”是指计算机/平板电脑。

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);
}

3 个答案:

答案 0 :(得分:19)

这种能力刚刚在Windows 8 RTM中添加:

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

答案 1 :(得分:6)

Windows 8中的Metro风格应用程序似乎没有一种方便的方法来获取系统维护的唯一标识符,例如随其Microsoft.Phone.Info.DeviceExtendedProperties.GetValue( "DeviceUniqueId" )提供的Windows Phone 7

到目前为止,我发现的最佳解决方案是在new guid中生成application local storage并使用该标识符来识别您的应用当前和未来发布的计算机。

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

请记住,用户可能会删除本地存储并导致您的应用忘记并重新生成该值(甚至可能修改/欺骗该值),因此出于任何关键安全目的,请不要依赖它。由于我只是将这种技术用于粗略的统计和使用报告,这对我的需求来说很好。

答案 2 :(得分:5)

这可以用作登录用户的一致ID吗?

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

EasClientDeviceInformation.Id | id属性

返回本地计算机的标识符。 Id属性表示使用从MachineID,用户SID和App ID的SHA256哈希的前16个字节截断的GUID的DeviceId,其中MachineID使用本地用户组的SID。 GUID的每个组件都以网络字节顺序返回。