備忘録

備忘録

C#でSSD/HDD等のシリアル番号を取得する方法

Ⅰ. はじめに

Windowsの場合記憶媒体SSD/HDD等)には2つのシリアル番号があります。

1つ目

以下のコマンドを実行して取得できるのシリアル番号です。

vol c:
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は A8D9-2235 です
2つ目

直接物理ドライブのS.M.A.R.Tからのシリアル番号を取得する方法です。

Ⅱ. やり方(1つ目)

サンプルプログラム
using System.Management;

class Program
{
  static void Main(string[] args)
  {
    var volumes = new ManagementClass("Win32_LogicalDisk").GetInstances();

    foreach (var volume in volumes)
    {
      Console.WriteLine(volume.Properties["VolumeSerialNumber"].Value.ToString());
    }
  }
}
実行結果

f:id:kagasu:20171009015038p:plain

Ⅲ. やり方(2つ目)

サンプルプログラム
using System.Management;

static void Main(string[] args)
{
  /*
  // 1つ目のドライブのみ取得する
  var drive = "PHYSICALDRIVE0";
  var theSearcher = new ManagementObjectSearcher($"SELECT * FROM Win32_DiskDrive WHERE DeviceID like '%{drive}'");
  foreach (ManagementObject currentObject in theSearcher.Get())
  {
    Console.WriteLine(currentObject["DeviceID"]);
    Console.WriteLine(currentObject["SerialNumber"]);
  }
  */

  var volumes = new ManagementClass("Win32_DiskDrive").GetInstances();

  foreach (var volume in volumes)
  {
    Console.WriteLine(volume["DeviceID"]);
    Console.WriteLine(volume["SerialNumber"]);
  }
}
実行結果

f:id:kagasu:20180410064634p:plain

Ⅳ. その他

Q. シリアル番号は第三者と重複する?
A.

1つ目について

かなり高い確率で重複します。
使用しているパソコンの固有番号、識別番号としての利用は不適切です。
また、シリアル番号は簡単に変更可能です。

2つ目について

私の知る限り重複しません。
また、私の知る限り変更できません。