私が取り組んでいるプログラムは、Windows RPC API 呼び出し UuidCreateSequential() によって生成された UUID に、プライマリ イーサネット アダプターの MAC アドレスが含まれていることを前提としています。この仮定は正しいですか、それとも別の方法を使用して MAC アドレスを取得する必要がありますか?
4 に答える
私はこれに頼りません - UuidCreateSequential が MAC アドレスを持つ唯一の理由は、UUID がネットワーク全体で一意であることを保証しようとしているからです。さらに、なぜ MAC アドレスを取得するために、このような奇妙な方法を使用するのでしょうか? WMI を使用して、UUID 作成機能の副作用ではなく、実際に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 アドレスを取得しようとしている場合は、はるかに優れた方法があります。