WMI のメタデータ

値の意味の文字列はどっかから取れないのかなぁ。コピペして Ctrl+H で VS の正規表現の練習大会になってしまいました。疲れた。

Qualifier 経由でとれたはず.この辺はメタデータリッチな Common Information Model (CIM) ならでは.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

static class Program
{
    static void Main(string[] args)
    {
        // ms_409 子ネームスペースを付けたときの振る舞いについては以下参照
        // http://www.microsoft.com/japan/technet/prodtechnol/windows2000serv/maintain/featusability/wmigloba.mspx
        // http://msdn2.microsoft.com/en-us/library/aa392748.aspx

        var mgmtScope = new ManagementScope(@"root\cimv2");
        var mgmtPath = new ManagementPath("Win32_CacheMemory");
        var mgmtClass = new ManagementClass(mgmtScope, mgmtPath, null);
        mgmtClass.Options.UseAmendedQualifiers = true;

        foreach (PropertyData prop in mgmtClass.Properties)
        {
            Console.WriteLine("{0} {1}", prop.Type, prop.Name);

            foreach (QualifierData qualifier in prop.Qualifiers)
            {
                string valuestr =
                    qualifier.Value.GetType().IsArray
                        ? string.Join(", ", (from object o in qualifier.Value as Array select o.ToString()).ToArray())
                        : qualifier.Value.ToString();

                Console.WriteLine("    {0}: {1}", qualifier.Name, valuestr);
            }
            Console.WriteLine();
        }
    }
}

以下の 2 つを適当に解釈してあげれば,値とその意味を埋め込まなくて済むかと.

  • Values
  • ValueMap (省略されている場合がある)

このように,Qualifier を取るまでは簡単なのですが,その意味解釈は結局自分でコードを書かないといけません.コードジェネレータ系も結構大変と.
意味を確認するだけなら CIM Studio を使うのが簡単です.