WMIを利用してWindowsOSの情報を取得する [C#]

Windowsのシステム構成要素についての情報を取得できるWMI(Windows Management Infrastructure)を利用してOS(オペレーティング システム)の情報を取得する方法を紹介します。
本記事では、WMIのオブジェクトの利用にC#を使用します。

WindowsOSの情報を取得する

WindowsOSの情報を取得するには、System.Management名前空間にあるManagementClassクラスを使用します。
ManagementClassクラスのコンストラクタの引数に「Win32_OperatingSystem」を指定してインスタンスを生成することで、WindowsOSの情報を取得することができます。

情報を取得する手順

Win32_OperatingSystemを利用する際には、以下の手順でオブジェクトを生成します。

  1. System.Management.ManagementClassクラスのパラメーターに”Win32_OperatingSystem”を渡してWMIのWin32_OperatingSystemクラスのオブジェクトを取得します。
  2. 取得したクラスオブジェクトのGetメソッドを呼び出して、WMIクラス情報を管理オブジェクトにバインドします。
  3. クラスオブジェクトのScopeプロパティのOptionsプロパティのEnablePrivilegesプロパティにtrueを指定し、接続操作のためにユーザー特権を有効にして利用可能にします。
  4. クラスオブジェクトのGetInstancesメソッドを呼び出して、ManagementObjectのコレクションを取得します。
  5. 取得したコレクションからManagementObjectのインスタンスを取得します。
  6. 取得したインスタンスのプロパティから必要な情報を取得します。

System.Management.dllの参照

プログラムを記述する前にSystem.Management.dllへの参照をプロジェクトに追加します。

Visual StudioでC#のプロジェクトを作成します。
プロジェクトが作成できたら、ソリューションエクスプローラーの「参照」を右クリックし、表示されるコンテキストメニューから「参照の追加」をクリックします。

C#プロジェクトのソリューションエクスプローラーで参照の追加

「参照マネージャー」ダイアログボックスが表示されますので、左ペインの「アセンブリ」をクリックします。
右ペインに表示されるアセンブリの一覧から「System.Management」を選択して「OK」ボタンをクリックします。

C#プロジェクト参照マネージャーダイアログボックス

サンプルコード

System.Management.dllへの参照が追加できたら、コードエディターを開きます。
System.Management名前空間へのusingを追加し、OS情報を取得するコードを記述します。
以下のサンプルでは、コンソールアプリケーションのプロジェクトを作成して、OSの主な情報を取得しています。

WMIのWin32_OperatingSystemクラスで取得できる情報

WMIのWin32_OperatingSystemクラスでは上記のOS情報以外にも、Windowsのシステムに関する様々な情報が取得できます。

Win32_OperatingSystemクラスのプロパティ
  • BootDevice

    OSが起動するディスクドライブの名前です。

  • BuildNumber

    OSのビルド番号です。

  • BuildType

    OSで使用されるビルドの種類です。

  • Caption

    OSの簡単な説明文です。この情報にはバージョンを含みます。

  • CodeSet

    OSで使用されるコードページの値です。日本語 シフトJISは932になります。

  • CountryCode

    OSで使用される国/地域コードです。日本は81になります。

  • CreationClassName

    インスタンスの作成で使用されるクラス名です。

  • CSCreationClassName

    スコーピングコンピューターシステムの作成クラス名です。

  • CSDVersion

    インストールされている最新のサービスパックの情報です。

  • CSName

    スコーピングコンピューターシステムの名前です。

  • CurrentTimeZone

    OSがグリニッジ標準時(GMT)からオフセットされている分数です。日本は540(9時間)になります。

  • DataExecutionPrevention_32BitApplications

    データ実行防止(DEP)が適用された状態であるかどうかを示す値です。

  • DataExecutionPrevention_Available

    ハードウェアがWindowsデータ実行防止(DEP)技術をサポートするかどうかを示す値です。

  • DataExecutionPrevention_Drivers

    データ実行防止(DEP)が適用された状態でドライバーが実行されているかどうかを示す値です。

  • DataExecutionPrevention_SupportPolicy

    データ実行防止(DEP)の4つの設定のうちのどれが適用されるかを表す値です。(0: AlwaysOff, 1: AlwaysOn, 2: OptIn, 3: OptOut)

  • Debug

    OSがチェック(デバッグ)ビルドであるかどうかを示す値です。

  • Description

    OSの説明です。

  • Distributed

    OSが複数のコンピューターシステムノードに分散されているかどうかを示す値です。

  • EncryptionLevel

    保護されている処理の暗号化のレベルをビット数で示した値です。

  • ForegroundApplicationBoost

    フォアグラウンドアプリケーションに与えられる優先度の上昇を表す値です。

  • FreePhysicalMemory

    利用可能な物理メモリの空き容量です。単位はKBになります。

  • FreeSpaceInPagingFiles

    他のページをスワップアウトすることなくOSのページングファイルにマップできるメモリの容量です。単位はKBになります。

  • FreeVirtualMemory

    利用可能な仮想メモリの空き容量です。単位はKBになります。

  • InstallDate

    OSがインストールされた日時です。

  • LargeSystemCache

    メモリを最適化するかどうかを示し値です。(0: アプリケーション用, 1: システムパフォーマンス用)

  • LastBootUpTime

    OSが最後に起動した時刻です

  • LocalDateTime

    OSのローカル日時です。

  • Locale

    OSで使用される言語識別子(言語ID)です。

  • Manufacturer

    OSの製造元の名前です。

  • MaxNumberOfProcesses

    OSがサポート可能なプロセスコンテキストの最大数です。

  • MaxProcessMemorySize

    プロセスに割り当てられるメモリの最大数です。単位はKBになります。

  • MUILanguages

    コンピューターにインストールされている多言語ユーザーインターフェイスです。

  • Name

    OSのインスタンスの名前です。

  • NumberOfLicensedUsers

    OSのユーザーライセンス数です。

  • NumberOfProcesses

    OSで現在実行されているプロセスのコンテキスト数です。

  • NumberOfUsers

    OSが現在の状態情報を格納しているユーザーセッションの数です。

  • OperatingSystemSKU

    OSの最小管理単位(在庫管理単位)の数です。

  • Organization

    OSの登録ユーザーの会社名です。

  • OSArchitecture

    OSのアーキテクチャです。(32ビット or 64 ビット)

  • OSLanguage

    インストールされているOSの言語バージョンです。

  • OSProductSuite

    OSにインストールされ、さらにライセンスされているシステム製品の識別される値です。

  • OSType

    OSの種類を示す値です。

  • OtherTypeDescription

    OSTypeが「1: その他」の場合の説明です。

  • PAEEnabled

    PAE(物理アドレス拡張)が、Intelプロセッサで実行されているオペレーティングシステムによって有効になるかどうかを示す値です。

  • PlusProductID

    Windows Plus!のIDです。

  • PlusVersionNumber

    Windows Plus!のバージョン番号です。

  • PortableOperatingSystem

    オペレーティングシステムが外部USBデバイスから起動したかどうかを表す値です。

  • Primary

    プライマリのOSかどうかを表す値です。

  • ProductType

    製品の種類です。(1: ワークステーション、2: ドメインコントローラー, 3: サーバー)

  • RegisteredUser

    OSの登録ユーザーの名前です。

  • SerialNumber

    OSの製品シリアルID番号です。

  • ServicePackMajorVersion

    コンピューターシステムにインストールされているサービスパックのメジャーバージョン番号です。

  • ServicePackMinorVersion

    コンピューターシステムにインストールされているサービスパックのマイナーバージョン番号です。

  • SizeStoredInPagingFiles

    ページング ファイルで格納される容量です。単位はKBになります。

  • Status

    オブジェクトの現在の状態です。(OK、Error、Degraded、Unknown、Pred Failなどがあります。)

  • SuiteMask

    システムで利用可能な製品を識別するビットフラグのセットを示す値です。

  • SystemDevice

    OSがインストールされている物理ディスクパーティションです。

  • SystemDirectory

    OSのシステムディレクトリです。

  • SystemDrive

    OSが存在するディスクドライブの文字です。

  • TotalSwapSpaceSize

    スワップ領域の合計容量です。単位はKBになります。

  • TotalVirtualMemorySize

    仮想メモリの合計容量です。単位はKBになります。

  • TotalVisibleMemorySize

    利用可能な物理メモリの合計容量です。単位はKBになります。

  • Version

    OSのバージョン番号です。

  • WindowsDirectory

    Windowsディレクトリです。

サンプルプログラム

ここでは、WMIのWin32_OperatingSystemクラス(ManagementClass)のManagementObjectのプロパティを列挙するプログラムを作成します。

サンプルフォームのデザイン

フォームにはWMIのManagementObjectのプロパティの情報を表示するためのリストビューを配置します。
Win32_OperatingSystemクラスのプロパティ一覧表示サンプルフォームのデザイン

サンプルコード

フォームのロード時にWMIのManagementObjectのプロパティを取得して、リストビューに名前と値を表示します。

サンプルプログラムの実行

プロジェクトをビルドしてプログラムを実行(デバッグ)します。
Win32_OperatingSystemクラスのプロパティの一覧がリストに表示されます。

Win32_OperatingSystemクラスのプロパティ一覧表示サンプル