WMI

WMI ( Windows Management Instrumentation )は、Windowsパソコンに搭載されている
ハードウェアやソフトウェアの各種情報を収集するのに使うことが出来ます。
条件を満たせばネットワーク越しでも使用可能なので、MicrosoftはWindows Serverの
管理・状態取得などに使用することを進めています。

WMIは以前WBEMと呼ばれていた機能です。
そのためインクルードするlibraryやheader、変数、関数類にその名残が在ります。

WMIの機能を使うとWin32API*1やDirectX*2を使用しても取得が難しいマザーボードやBIOSの情報が取得できるようになるので、実はPCゲームのサポート業務には非常に役立つ機能になります。

ただ、WMIは英語でのドキュメントくらいしか情報がなかったり、日本語ドキュメントもいろいろ情報不足のため使うのが非常に難しい状態でした。

しかも海外や日本国内での個人の方などのWMIに間するサイトが無いわけではないのですが、VBまたはActiveX、C#での説明でVisual C/C++での解説が無い状態でした。

なんか今ひとつ使用しにくいと言うか、Visual C/C++ならゲームプログラムに統合できるんじゃ?
と言うのが在り某有名3Dベンチマークの情報表示に刺激されたことも合って、研究・作成しました。

WMIを使用するとこんな風な情報が取得できるようになります。(少々古いデータですが)

ただこのSampleはWMIだけではなく、「CPUID*3」「DirectXSetUp?*4」等を使用して情報を取得しています。
そのため、WMIだけでは実現不可能な項目も在りますが、WMIでなければ取得できない項目の方が多いです。

ユーザーにわかりにくい操作や、自分たちが作っていないソフトを起動、操作させること無く原因の確認や助言が出来るようになるので、この便利な機能を使いこなせば、サポートが多少は楽になるんじゃないか思っています。

ただしWMIは万能ではないです。
WMIがインストールされていない環境では使用することが出来ません。
自分が確認した限りでは、WindowsXP、Windows2000では使用可能です。
ただし、Windows2000はサービスパックがインストールされていない場合、WMIバージョンが低いため、情報の取得が一部うまく行かないことが在るので、サービスパックの導入をユーザーに進めるほうがいいでしょう。
サービスパックがインストールされていない場合、パフォーマンスや動作プログラム以外のところで、不具合が起こりえるので、サービスパックのインストールを推奨して下さい。

謝辞
作成には「PC Game Developpers ML」の皆さんにもご協力いただいて、
いろいろとなぞだった部分がわかる事が出来ましたことをお礼申し上げます。


*1 Windowsで使用できる標準的な命令群
*2 Microsoft社が提供するLibrary群
*3 CPUの情報を取得するためのアセンブラ命令
*4 DirectXのバージョン管理命令