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

我需要在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,这是build议作为一个确定的事情,但得到不同的结果2个应用程序在同一台PC上:

 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(我曾经听说过批量的中国networking适配器具有相同的地址),或者有一个没有networking的设备(例如,使用没有networking适配器的PC,并且连接使用USBencryption狗到互联网)。

所以问题是:

  1. 我做的一切正确吗?或者我犯了一个错误,导致我的例子返回错误的UDID?

  2. 我是否有权假定MAC地址是唯一可行的方式来获得一个真正独特的每设备标识符? 我可能一直没有注意到,错过了一些显而易见的方式。

  3. 我是否错误地假设了MAC地址识别的不安全感,就像我之前描述的那样?


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