SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CPUIDチュートリアル

ハードディスク情報の抽出 1:ハードディスクの種類の判別

Setup API 関数とWMIを用いたハードディスク情報の抽出


  • X ポスト
  • このエントリーをはてなブックマークに追加

WMIによる抽出方法

 WMI(Windows Management Instrumentation)は、Windowsを効率的に管理するための統合システムです。Windows 2000から標準で組み込まれていますが、別途、WMIを入手しインストールすることでWindows 9x系でも使用できます。WMIはWSHや.NET環境から簡単に使用することができます(C/C++でも使用可能ですが、使用するまでの前処理が複雑ですのであまりお勧めしません)。

 今回は物理ディスクドライブを抽出するWMIクラスである「Win32_DiskDrive」を使用します。

  • InterfaceType
    接続しているインターフェイスの型が返却されます(例:「IDE」「SCSI」「USB」「1394」など)。
  • Model
    ハードディスクの型番が返却されます(例:「ST3250823A」)。

WSHによる実装

 「物理ディスクプロパティの列挙」を参考にして改造しました。

WMIによる物理ドライブの収集(disk.vbs)
'物理ドライブの収集 by WMI
Set objWMIService = GetObject( _
    "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colDiskDrives = _
    objWMIService.ExecQuery("Select * from Win32_DiskDrive")
For each objDiskDrive in colDiskDrives
    Wscript.Echo "[" & objDiskDrive.InterfaceType & _
        "] " & objDiskDrive.Model
Next

 上記のソースをテキストエディタで「disk.vbs」という名前で保存し、コマンドプロンプトで「cscript disk.vbs」と入力して実行しました。

cscript disk.vbsの実行結果
[IDE] ST3250823A
[1394] Apple Computer_ Inc. iPod IEEE 1394 SBP2 Device
[SCSI] Maxtor 6 L250S0 SCSI Disk Device
[USB] HTS54802 0M9AT00 USB Device
[USB] IC25N040 ATMR04-0 USB Device

 WMIを使用することでデバイスマネージャの情報を取得できます。

C#による実装

 WMI Code Creator(参考:「Utility Spotlight: WMI Code Creator」)でWin32_DiskDriveのサンプルコードを吐かせて改造しました。このツールは使い勝手が良く便利です。

C#による実装例
using System;
using System.Collections.Generic;
using System.Text;
using System.Management;

namespace disk
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                ManagementObjectSearcher searcher =  
                    new ManagementObjectSearcher("root\\CIMV2",
                    "SELECT * FROM Win32_DiskDrive");
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("[{0}] {1}",
                        queryObj["InterfaceType"], queryObj["Model"]);
                }
            }
            catch (ManagementException e)
            {
                Console.WriteLine(
                    "An error occurred while querying for WMI data: "
                    + e.Message);
            }
        }
    }
}

次のページ
SetupAPI関数による抽出方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
CPUIDチュートリアル連載記事一覧

もっと読む

この記事の著者

Mc.N(エムシイエヌ)

SyncHack 管理人。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/351 2008/08/21 21:10

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング