パソコンの識別情報を得る
ソフトにプロテクトをかけたい、特定のパソコンだけで使えるようにしたい、というときには、まずはパソコンの識別情報をゲットする必要がある。
普通のWindowsアプリでは、どうするか。素人考えだと以下のようなデータが思い浮かぶ。
あと、BIOSのシリアル番号は、メーカーごと?型番ごと?に振っているだろうから、(可能性は低いが)2台のパソコンで番号が同じということもあるかもしれない。
ということで、どれもいまいちなのだけど、情報をゲットするクラスを作ってみた。
まずはusing。DLLを参照設定に追加するのも必要。
クラスは以下の通り。複数個ゲットできた情報は文字列で連結している。このままでは識別情報として使うのは難しいね、確かに。
*
ユニバーサルアプリなら「ASHWID」というデータが使えるらしい。
アプリが実行されている端末を識別するには?
アプリが実行されている端末を識別するには?
普通のWindowsアプリでは、どうするか。素人考えだと以下のようなデータが思い浮かぶ。
- ハードディスクのボリュームシリアル番号
- MACアドレス
- BIOSのシリアル番号
しかし、ボリュームシリアル番号もMACアドレスも割と簡単に変更できるらしいので、プロテクトに使うのは問題ありそう。そもそも、MACアドレスは、パソコンに複数個あったりするので(有線と無線とか、仮想アダプターも)どれを使えばよいのか。
ということで、どれもいまいちなのだけど、情報をゲットするクラスを作ってみた。
まずはusing。DLLを参照設定に追加するのも必要。
- using System.Management;
- using System.Net.NetworkInformation;
クラスは以下の通り。複数個ゲットできた情報は文字列で連結している。このままでは識別情報として使うのは難しいね、確かに。
- /// <summary>
- /// パソコンの識別情報を得る
- /// </summary>
- class deviceInfo
- {
- /// <summary>
- /// Cドライブのボリュームシリアル番号を得る
- /// </summary>
- /// <returns></returns>
- static public string getVolumeNo()
- {
- System.Management.ManagementObject mo = new System.Management.ManagementObject("Win32_LogicalDisk=\"C:\"");
- return (string)mo.Properties["VolumeSerialNumber"].Value;
- }
- /// <summary>
- /// BIOSのシリアル番号を得る
- /// </summary>
- /// <returns></returns>
- static public string getBiosNo()
- {
- ManagementScope scope = new ManagementScope("root\\cimv2");
- scope.Connect();
- System.Management.ObjectQuery q = new System.Management.ObjectQuery("select SerialNumber from Win32_BIOS");
- ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, q);
- ManagementObjectCollection co = searcher.Get();
- var lst = co.Cast<ManagementObject>().Select(o => o.GetPropertyValue("SerialNumber").ToString());
- return string.Join("-", lst.ToArray());
- }
- /// <summary>
- /// MACアドレスを得る(複数個)
- /// </summary>
- /// <returns></returns>
- static public string getMacAddr()
- {
- var ifs = NetworkInterface.GetAllNetworkInterfaces();
- var lst = ifs.Select(nif => nif.GetPhysicalAddress().ToString());
- return string.Join("-", lst.ToArray());
- }
- }
*
コメント
コメントを投稿