質問
私が取り組んでいるプログラムは、Windows RPC API呼び出しUuidCreateSequential()によって生成されたUUIDにプライマリイーサネットアダプターのMACアドレスが含まれていることを前提としています。この仮定は正しいですか、またはMACアドレスを取得するために別の方法を使用する必要がありますか?
解決
これに依存しません-UuidCreateSequentialがMACアドレスを持っている唯一の理由は、UUIDがネットワーク全体で一意であることを保証しようとしていることです。さらに、なぜこのような奇妙な方法でMACアドレスを取得するのでしょうか? UUID作成関数の副作用の代わりに、WMIを使用し、実際に にMACアドレスを要求します。
他のヒント
これは有効な仮定のようです。 MSDN のドキュメントには、具体的にはこれにイーサネットのアドレスが含まれると書かれています。マシン上のカード。マルチカードのシナリオについては何も言及していませんが、プライマリカードを選択することは論理的な飛躍のようです。
マネージコードを記述している場合、 NetworkInterface
クラスを呼び出し、 GetAllNetworkInterfaces()
を呼び出します。または、C ++コードから、 GetAdaptersInfo
。これはマネージ実装で使用されます。
UuidCreateSequential
がこれで機能する場合でも、情報を取得するのはかなりあいまいな方法であり、コンピューターに複数のアダプターがあるような潜在的な問題を隠します。
バージョン1 UUIDのみにMACアドレスが含まれ、元のジェネレーターが最初からMACアドレスにアクセスできた場合のみ。元のジェネレーターがMACアドレスにアクセスできなかった場合、RFC 4122のセクション4.5にあるように、暗号で保護された乱数ジェネレーターから供給された6つのランダムバイトを使用していました。このため、MACアドレスUUIDで指定されるのは実際にはMACアドレスです。
ほとんどの場合、UUIDからMACアドレスを解析する必要がある唯一の理由は、法医学的な目的のためです。たとえば、MelissaウイルスのWordドキュメントペイロードに埋め込まれたUUIDを参照してください。調査員はこれらのIDからMACアドレスを抽出し、容疑者のプライマリネットワークアダプターのMACアドレスと照合しました。
自分のコンピューターのMACアドレスを取得しようとしている場合、これを実行するはるかに良い方法があります。