そのため、Windows 8 デバイスの一意の識別子を取得することについて、このようなさまざまな投稿があります。ただし、さまざまなシステムコンポーネントが変更されると、識別子が変更されることも認識されています。ドキュメントから:
ハードウェア ドリフトは、アプリが ASHWID バイト ストリームをそのまま消費してはならない理由です。いくつかのハードウェア コンポーネントが変更されたりオフになったりすると、API は別の ASHWID を返します。このアプリは、同じデバイスを新しいデバイスとして誤って識別する可能性があるというリスクを冒しています。ハードウェアのドリフトを引き起こす可能性があるいくつかのもっともらしいシナリオを次に示します。
- 一日の終わりに向かって、ユーザーは帰宅するまでバッテリーを長持ちさせたいと考えているため、Bluetooth と Wi-Fi をオフにし、クラウドとの接続のために 3G/4G をオンのままにします。
- ユーザーが USB 3G データ カードを接続します。
- 基盤となる OS/システム オン チップの電源管理により、特定のコアがオフになる場合があります。
これはかなり残念な状態です。ドキュメントでは、ASHWID (アプリ固有のハードウェア ID) を確認し、変更される可能性が低いさまざまなコンポーネントに重みを付け、ドックが存在するかどうかなど、変数を無視 (重み 0 を与える) することをお勧めします。ただし、コンポーネントを識別する方法に関するドキュメントはありません。返される識別子は、単なる数字のリストです。
安定した一意のデバイス ID を取得するより良い方法はありますか (デバイス/パッケージの組み合わせごとに一意である限り、パッケージ固有であれば問題ありません)。または、によって生成されたトークン内のコンポーネントを識別する方法に関するドキュメントを教えてもらえますHardwareIdentification.GetPackageSpecificToken
か?
アップデート:
コンポーネント部分を加工しました。しかし、安定したIDを取得するためのより良い方法にまだ興味があります.
バイト ストリームは、4 バイトの複数のグループで構成されます。最初の 2 バイトにはコンポーネントのタイプが含まれ、次の 2 バイトには値が含まれます。次の表を使用して、各コンポーネントのタイプを識別します。