🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
WMI

WMIは、Windowsのシステムを管理する共通インターフェース。OSやコンピュータに関するインベントリ情報を取得し、設定・管理することが可能です。監視情報のデータ構造をCIMで標準化し、監視対象に関係なく共通のインターフェースを利用できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

2039閲覧

システムディスク(Cドライブ)の一意なシリアル番号取得は WMI と GetVolumeInformation どちらが適切でしょうか?

Nakashige

総合スコア15

WMI

WMIは、Windowsのシステムを管理する共通インターフェース。OSやコンピュータに関するインベントリ情報を取得し、設定・管理することが可能です。監視情報のデータ構造をCIMで標準化し、監視対象に関係なく共通のインターフェースを利用できます。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2019/09/26 11:07

システムドライブ(Cドライブ)の一意なシリアル番号を取得しようとしています。
※論理IDではありません

方法を探していたところ、少なくとも取得方法が2種類あることがわかりました。
1.WMI
2.GetVolumeInformation

どちらを利用しても、一意と思えるようなシリアル番号が取得できました。
目的は「一意なシリアル番号」を取得することなのですが、どちらを利用すべきか、ご存じの方がいたら教えていただけますでしょうか?
参考サイトの貼り付け等でもかまいませんので、情報をいただけると嬉しいです。

足りない情報等あればご指摘ください。
追記させていただきます。

以上、よろしくお願いいたします。

■備考
・GetVolumeInformation関数を利用した取得方法の参考サイト
https://blog.goo.ne.jp/masaki_goo_2006/e/8915ddad6778f0768255456b5dd60e16

・WMIを利用した取得方法の参考サイト
https://codeday.me/jp/qa/20190728/1318805.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/09/26 11:08

どっちもできるならどっちでもいいのでは?
Nakashige

2019/10/02 02:46

コメントありがとうございます。 2つの違いを理解した上でシステムを構築したいなと考えていたので質問させていただきました。 まだ検討中ではありますが、「どちらも使う」という選択肢も含めて検討していきます。
guest

回答1

0

ベストアンサー

GetVolumeInformation はドライブのボリュームエリアに書かれているシリアル番号を返しますが、これはあとから任意の値に書き換え可能です
WMIの方法でも結局同じ番号を返しているようなので、どちらも一緒ですね

投稿2019/09/26 11:25

y_waiwai

総合スコア88040

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nakashige

2019/09/30 00:21

回答いただきありがとうございます。 2点確認させてください。 1.あとから任意の値に書き換え可能 これは「書き換える関数が存在する」という解釈でよろしいでしょうか? 単純に、SetVolumeInformation等の関数がなかったため、変更不可な値と思っていました。 2.WMIの方法でも結局同じ番号を返している いくつか周りのPCで試しましたが、両者ではそれぞれ異なる値が取得できました。 取得できる値は違うが、「あとから任意の値に書き換え可能」という意味で「どちらも一緒」ということでしょうか? ちなみに、下記は、私の環境で取得した値を少し改変したものです。 ・GetVolumeInformation → 1234567890   ※数値のみ ・WMI → AB1234E56789CD   ※アルファベットと数値が混在する(メーカーにより形式は様々) お手数をおかけしますが、ご返信いただけると嬉しいです。 よろしくお願いいたします。
y_waiwai

2019/09/30 00:27

該当するドライブのボリュームエリアの特定な場所にその数値は書き込まれてます。 フォーマットする場合にその番号は書き込まれます。 当然ながら、同じ場所に違うデータを書き込めば書き込めてしまいます。 それを一意のデータとして使うことも可能でしょうけど、上記のことは考慮しておく必要がありますね
Nakashige

2019/09/30 00:35

迅速な回答ありがとうございます! 重ねての確認になり申し訳ないのですが、「フォーマットする場合」とは、Windowsで言うところの「ディスクの管理」からフォーマットした場合や、「OSインストール時」のフォーマットという解釈でよろしいでしょうか?
KOZ6.0

2019/09/30 01:43

PCを一括入れ替えするとき等、必須ソフトを入れ込んだマスターディスクを作って他の PC のディスクにコピーしたりしますが、そんな場合は GetVolumeInformation って被る可能性があるのでは。
y_waiwai

2019/09/30 01:50

イメージコピーするとかするともとの番号がコピーされるかもしれませんね たとえば、社内管理でボリューム番号で各ドライブを管理するってのであれば一意の値として使うのはありかと思いますが、 販売するアプリでのコピー防止のプロテクトのためにボリューム番号を使うというのはまずいというはなしになりますね
Nakashige

2019/10/02 02:43

回答が遅くなりすみません。 WMI も GetVolumeInformation も、どちらも「一意な値ではない」ということですね。 ご指摘どおり、プロテクト関係の構築を考えていたのですが、シリアル番号だけでは区別できないことを理解しました。 最終的には、HDD/SSDのシリアル番号だけでなく、PCの他の構成要素も含め、複合キーとして区別しようと思います。 いろいろとありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問