[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/04/13(Wed) 01:41
投稿者名:ごろう
Eメール:
URL :
タイトル:
PC固有の情報
よろしくお願いします。
PC固有の情報を取得したいと考えております。何が利用できるでしょうか?
現在MACアドレスを使用していますが、どうやらルータやモデムのせいで結構変わる
見たいです。
一つはハードディスクのシリアルナンバーを使用していますが、これはあまり詳しくありませんが
ハードディスクをフォーマットすると変わるのでしょうか?またこれは基本的に重複しない固
有の番号でしょうか?
他になるべく重複しないでなるべく固定している値で利用できるものは無いでしょうか?
プロセッサでIntelなんかだとかなり重複してしまうし〜。
何でもいいのでアドバイスお願いします。

投稿時間:2005/04/13(Wed) 06:54
投稿者名:Say
Eメール:
URL :
タイトル:
Re: PC固有の情報
現在のところ、一意であることが保証されている「PCの固有値」というものは存在しません。

参考までに

●MACアドレスはLANカードに固有の値です。
この値自体は一意であることが保証されていますが、PCに固有というわけではありません。
(LANカードを装着していないPCでは取得できませんし、
2枚ささっているPCは2つの値をもつことになります。
また、2台のマシンのLANカードを入れ替えれば、
PCから見たMACアドレスも入れ替わることになります。

●ハードディスクボリュームシリアルはフォーマット時に作成されるランダムな番号です。
同一値の再発行の確率は低いですが、一意である保証はありません。
当然、再フォーマットすれば非常に高い確率で前回と異なる値になります。


●以前、Intelは自社CPUに固有値を記録しようと計画したことがありますが、
社会から猛反対を受け、計画は中止されたことになっています。
勿論、特定のメーカのCPUに固有値があったとしても、「PCの固有値」としては使えませんが。

●Windowsインストール時に投入するシリアル番号は、みんながライセンス契約を守っているなら
Windowsマシンごとに固有になるはずですが、現実にどのぐらい守られているかは不明です。

●メーカによっては自社マシンに固有値をふっていますが、
値のふり方、取得の可否もメーカにより仕様が異なります。
おそらくメーカ内では一意でしょうが、メーカ間の一意性は考慮されていません。

●将来、PCにipv6が割り振られれば、PCを一意に識別することが可能になるかもしれません。


●ちなみに、現在、某MS社はMACアドレスとハードディスクボリュームシリアルの組み合わせで
PCの判別を行っているようです。
対象PCにMACアドレスがない場合や、複数ある場合どう処理しているかは不明です。
(おそらく、MACアドレスがない場合は、ないことを示す固定値を、
複数ある場合は何らかのルールで代表値を決めて利用しているのでしょうが)
MACアドレスが主キーで、ハードディスクボリュームシリアルは
MACアドレスを取得できなかったときの保険のような運用をしているのではないでしょうか?

この組み合わせならばLANカードを載せ変えないかぎり
非常に高い確率で一意性を保てそうですから、現状ではベストの選択かもしれません。

投稿時間:2005/04/13(Wed) 12:34
投稿者名:いな
Eメール:
URL :
タイトル:
Re^2: PC固有の情報
> ●Windowsインストール時に投入するシリアル番号は、みんながライセンス契約を守っているなら
> Windowsマシンごとに固有になるはずですが、現実にどのぐらい守られているかは不明です。

たとえ守られていたとしても、
DUAL OSなどというPCも存在しますしね。

投稿時間:2005/04/13(Wed) 13:19
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^2: PC固有の情報
> 現在のところ、一意であることが保証されている「PCの固有値」というものは存在しません。
ですね。汎用的な物もは無いと思います。

で、Sayさんの解説されたことに対して、若干付け加えておきます。

# 実は過去に、「MAC + ボリュームシリアル + ProductID」の組み合わせを
# キーにしようとして、はまった経験がありまして……。(^^;


> ●MACアドレスはLANカードに固有の値です。
さらにいうと、ドライバの設定で MACアドレスを変更可能な物も少なくありません。
(専用ツールで書き換えるものもあれば、デバイスマネージャの設定項目にある物も)

なので、これが一意キーとして使えるかというと、厳密に言えば No ですが、
そこまで厳密で無くても良ければ、利用しても良いでしょうね。

> (LANカードを装着していないPCでは取得できませんし、
物理的なカード以外(仮想ミニポートドライバ等)からも取得可能ですね。

そのため、WMI等で取得する場合は、LANカードが1枚しかないのに、
複数のMACアドレスが列挙される事がありますので、注意が必要です。

> ●ハードディスクボリュームシリアルはフォーマット時に作成されるランダムな番号です。
> 同一値の再発行の確率は低いですが、一意である保証はありません。
メーカー製のPCなどでは、同一機種のボリュームシリアルが、全て
同一だったという事も多いですよ。

> ●Windowsインストール時に投入するシリアル番号は、みんながライセンス契約を守っているなら
システムのプロパティなどから見えるシリアル番号は、「プロダクトID」。
PC本体やWindowsのマニュアルなどに貼られているのは「プロダクトキー」と呼ぶようです。

最近のOSだと、プロダクトキーはシステム内に書き込まれませんので、プログラムから
取得することはできないと思います。ユーザーが手入力する事になりますね。


> Windowsマシンごとに固有になるはずですが、現実にどのぐらい守られているかは不明です。
あるメーカー製のプリインストール機にて、複数台のPCを比較してみたら、
「プロダクトキーは異なるが、プロダクトIDが同じだった」というケースを
昔経験した事があります……。

> ●ちなみに、現在、某MS社はMACアドレスとハードディスクボリュームシリアルの組み合わせで
> PCの判別を行っているようです。
某MS社というのが、Microsoft社の事であれば、アクティベーションに関して、
下記のような解説がありますね。
hhttp://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/xpactiv.mspx

投稿時間:2005/04/13(Wed) 20:33
投稿者名:ごろう
Eメール:
URL :
タイトル:
Re^3: PC固有の情報
皆様有難う御座います。
色々考えて現在 MAC + ボリュームシリアルでやっていますが、MAC + ボリュームシリアル + ProductID
に変更しようと思っています。それでさらにPCのハードウェアからGetSystemInfoを使用して
リビジョンを取得し、これを追加しようと思っています。3,4パターンしかないと効果が落ちますが。
通常で10パターンくらいあるのであれば上記と組み合わせれば、色々な事が起こったときにある程度
識別できて、PCを特定するのに有効かな思うのですが、リビジョンはころころ変わっているのでしょうか?
(そちらの方が都合がいいですが)またこれは3桁の整数で表されるのでしょうか?(本を
見るとそうなっていました。)
未熟者ですが、アドバイスいただければ宜しくお願いします。

投稿時間:2005/04/15(Fri) 18:23
投稿者名:ごろう
Eメール:
URL :
タイトル:
Re^4: PC固有の情報
話が少しわかりづらかったので、少し形を変えて再度質問したいと思います。
PCを識別するのにハードウェアの情報が欲しいと思って、調べているうちに、
GetSystemInfoでプロセッサーのリビジョンが取得できる事に気づきました。
プロセッサーのリビジョンが何者か良くわかりませんが、自分所有のPC5台に
ついて調べたところ、全て違う番号でした。他のものと組み合わせれば、PCの識別に
少し使えると思いますので、お聞きしたいのですが、これはプロセッサに固有の
番号でプロセッサを取り換えない限り、同じ番号ですよね?(と思うのですが)
ハードディスクをフォーマットしたりすると変わってしまったりするのでしょうか?
MACアドレスだとモデムのドライバを再インストールしたら変わってしまったので、
プロセッサの情報も併用しようと思っています。
わかる方がいらっしゃいましたらアドバイスお願いします。
(CPUのクロック数を取得しようと思ったのですが、結構無理みたいです。
DLLもあったのですが、計測してるみたいで動作が遅く。WMIはスクリプトを利用して
いるらしくこちらも動作が少し遅かったので使えない。レジストリを探してみたら
見当たらない。という具合でした。しかし、まぁ返ってリビジョン番号のほうが
パターン数が多いみたいなのでハードを識別するのに、これを利用してもいいかなと
思っている次第です。)

投稿時間:2005/04/15(Fri) 19:11
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: PC固有の情報
> プロセッサーのリビジョンが何者か良くわかりませんが、
wProcessorRevisionですね。
   Windows9X系      : 利用不可
   WindowsNT3.5以前 : 予約
   WindowsNT3.51以降: プロセッサリビジョン
hhttp://msdn.microsoft.com/library/en-us/sysinfo/base/system_info_str.asp

……あれ?

2001年版のSDKでは、「80386/80486」「Pentium互換」「MIPS」「ALPHA」「PPC」の5種の
説明があったのに、2005年版のSDKでは、Intel系のリビジョン情報しか書かれていない……。

CE SDKには、他のCPUも載っているのですけれどね。
hhttp://msdn.microsoft.com/library/en-us/wcecoreos5/html/wce50lrfSYSTEMINFO.asp


> これはプロセッサに固有の番号で
プロセッサの種類による値ですね。

私は現在、Celeron D-325 (2.53GHz)を利用していますが、
この環境では、&H0401 という値になるようです。

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0 を見ると、
当方環境には x86 Family 15 Model 4 Stepping 1 という記述がありましのたで、
   &H04 → Model 4
   &H01 → Stepping 1
となり、確かに &H0401 となりますね。
(Family / Model / Stepping の違いに関しては、検索すれば情報が見つかるかも)

> プロセッサを取り換えない限り、同じ番号ですよね?
だと思います。逆に、取り替えても同じ番号となる場合もありますけれどね。

> (CPUのクロック数を取得しようと思ったのですが、結構無理みたいです。
> DLLもあったのですが、計測してるみたいで動作が遅く。WMIはスクリプトを利用して
> いるらしくこちらも動作が少し遅かったので使えない。レジストリを探してみたら

WMI での測定というのは、下記の事でしょうか。

Debug.Print Timer, "Start"
For Each o In GetObject("winmgmts:").InstancesOf("Win32_Processor")
    Debug.Print Timer, o.CurrentClockSpeed; "MHz"
Next
Debug.Print Timer, "Finish"

動作が遅いのは、スクリプトのせいというわけではなく、
やはり「1秒間測定した結果」だからでしょう。

投稿時間:2005/04/16(Sat) 23:59
投稿者名:ごろう
Eメール:
URL :
タイトル:
情報有難う御座います。
> > プロセッサーのリビジョンが何者か良くわかりませんが、
> wProcessorRevisionですね。
>    Windows9X系      : 利用不可
>    WindowsNT3.5以前 : 予約
>    WindowsNT3.51以降: プロセッサリビジョン
> hhttp://msdn.microsoft.com/library/en-us/sysinfo/base/system_info_str.asp
>
> ……あれ?
>
> 2001年版のSDKでは、「80386/80486」「Pentium互換」「MIPS」「ALPHA」「PPC」の5種の
> 説明があったのに、2005年版のSDKでは、Intel系のリビジョン情報しか書かれていない……。
>
> CE SDKには、他のCPUも載っているのですけれどね。
> hhttp://msdn.microsoft.com/library/en-us/wcecoreos5/html/wce50lrfSYSTEMINFO.asp

Windows9X系    : 利用不可とありますが、 wProcessorRevisionが取得できないということで
しょうか。確かにレジストリを見ると9X系には・・・・\System\CentralProcessor\0にModelや
Steppingの情報が載っていませんが、手持ちの98seとMEでは取得できました。利用不可とは
多分違う意味でしょうね。
ちなみにXPのこの場所には、CPUのクロック数も格納されているんですね。(普段は9X系を
使用しているもので)確認していませんが、恐らく2000も同様でしょうね。


> > これはプロセッサに固有の番号で
> プロセッサの種類による値ですね。
>
> 私は現在、Celeron D-325 (2.53GHz)を利用していますが、
> この環境では、&H0401 という値になるようです。
>
> HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0 を見ると、
> 当方環境には x86 Family 15 Model 4 Stepping 1 という記述がありましのたで、
>    &H04 → Model 4
>    &H01 → Stepping 1
> となり、確かに &H0401 となりますね。
> (Family / Model / Stepping の違いに関しては、検索すれば情報が見つかるかも)
アドバイス有難う御座います。
少し検索した所ちらほらありますね。

> > プロセッサを取り換えない限り、同じ番号ですよね?だと思います。
不安で聞いてみましたが、普通に考えればそうですよね。
> 逆に、取り替えても同じ番号となる場合もありますけれどね。
そうですね。それは承知していますが、ハードシリアル、OSID等と併用すれば結構
有効に利用できると思います。ので大丈夫です。まーさらに取り換えるユーザーは
数が少ないでしょうし。一般ユーザーはなかなか取り換えないでしょう。と思います。
取り換えて、番号が同じ場合は他の情報から推察することになると思います。
100%は無理ですので、高い確率で識別できれば合格点を挙げたいと思います。
CPUのリビジョンだけでも結構いけたりしてなんても思います。

> WMI での測定というのは、下記の事でしょうか。
>
> Debug.Print Timer, "Start"
> For Each o In GetObject("winmgmts:").InstancesOf("Win32_Processor")
>     Debug.Print Timer, o.CurrentClockSpeed; "MHz"
> Next
> Debug.Print Timer, "Finish"
>
> 動作が遅いのは、スクリプトのせいというわけではなく、
> やはり「1秒間測定した結果」だからでしょう。

そうです。
測定して算出しているのですね。なるほどそうだったのですか。
そういえばスクリプトでもVBの中から利用する場合は、別に起動が遅いわけでも
ないですものね。(ほとんど使ったことがありませんが。)

大変参考になりました。