Windows 在Win8应用程序中获取唯一设备ID

Windows 在Win8应用程序中获取唯一设备ID,windows,winapi,windows-8,windows-8.1,Windows,Winapi,Windows 8,Windows 8.1,我需要在Windows 8应用程序中获取唯一的设备标识符。我没有几个应用程序,我需要确定安装了一个或多个应用程序的设备ID(例如,玩家安装系列中其他游戏的奖金)。使用以下方法可以为我提供每个应用程序的ID,但不会告诉我该设备已安装其他应用程序 我尝试了三种不同的方法,但它们都在同一台PC上返回不同的UDID 1) 这是以前使用过的,因为我需要每个应用程序的唯一id,现在我需要UDID,所以可以预见它对我不起作用: GUID g; std::string ret; CoCreateGuid(&am

我需要在Windows 8应用程序中获取唯一的设备标识符。我没有几个应用程序,我需要确定安装了一个或多个应用程序的设备ID(例如,玩家安装系列中其他游戏的奖金)。使用以下方法可以为我提供每个应用程序的ID,但不会告诉我该设备已安装其他应用程序

我尝试了三种不同的方法,但它们都在同一台PC上返回不同的UDID

1) 这是以前使用过的,因为我需要每个应用程序的唯一id,现在我需要UDID,所以可以预见它对我不起作用:

GUID g;
std::string ret;
CoCreateGuid(&g);
Platform::Guid pg(g);
std::string udid = WStringToUTF8(pg.ToString()->Data());
2) 我尝试过EasClienDeviceInformation,这被认为是一件肯定的事情,但在同一台电脑上的两个应用程序得到了不同的结果:

EasClientDeviceInformation^ info = ref new EasClientDeviceInformation;
ret = WStringToUTF8(info->Id.ToString()->Data());
3) 我尝试了常用的方法来获得ASHWID,但没有任何希望,它显然显示了不同的UDID:

auto token = Windows::System::Profile::HardwareIdentification::GetPackageSpecificToken(nullptr);
ret = WStringToUTF8(Windows::Security::Cryptography::CryptographicBuffer::EncodeToBase64String(token->Id)->Data());
_RPT1(_CRT_WARN, "TOKEN UDID IS %s \n", ret.c_str());
我只知道一个选项,那就是使用MAC地址,但我不确定它是否有效。用户可以拥有一台可以更改或复制MAC地址的PC(我听说有成批的中文网络适配器具有相同的地址),或者拥有一台没有任何网络的设备(例如,使用一台没有网络适配器的PC,并使用USB加密狗连接到互联网)

因此,问题是:

  • 我做的每件事都是对的,还是我犯了一个错误,导致我的示例返回错误的UDID

  • 我认为MAC地址是获得真正唯一的每个设备标识符的唯一可行方法,对吗?我本可以疏忽大意,错过一些显而易见的方法

  • 我对MAC地址识别不安全性的假设是错误的吗



  • UPD:我也想知道WP8的正确方法,因为我们正在使用它。

    您是否试图唯一地标识每个已安装的系统?我不太清楚你想识别什么以及为什么。你能提供更多的上下文吗?@rrirower我没有几个应用程序,我需要确定安装了一个或多个应用程序的设备ID(例如,玩家安装系列中其他游戏的奖金)。(更新说明)您是否研究过使用Windows Management Instrumentation?它包含许多“管理”信息,这些信息应该提供唯一的标识符。@rrirower不,我没有。我将对此进行调查,谢谢。@rrirower目前没有从Windows应用商店应用程序到WMI的接口。Metro应用程序无法访问此信息: