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

时间:2014-09-18 11:34:58

标签: windows winapi windows-8 windows-8.1

我需要在Windows 8应用程序中获取唯一的设备标识符。我有很少的应用程序,我需要确定安装了一个或多个应用程序的设备ID(例如,在该系列中安装其他游戏的游戏玩家的奖金)。使用以下方法为我提供了每个应用程序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,这是一个肯定的建议,但在同一台PC上的2个应用程序得到了不同的结果:

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加密狗连接到互联网。)

所以问题是:

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

  2. 我是否正确地假设MAC地址是唯一可行的方法来获得一个独特的每设备标识符?我可能会不专心,错过了一些明显的方式。

  3. 我对MAC地址识别不安全性的假设是错误的,如上所述?


  4. UPD:我也想知道WP8的正确方法,而我们正在研究它。

0 个答案:

没有答案