Esempio n. 1
0
        internal object CreateDynamicObject()
        {
            var dynObj = new DynamicObject();

            foreach (var prop in WmiObject.Properties)
            {
                // skip array of bytes
                if (prop.Type == CimType.UInt8 && prop.IsArray)
                {
                    continue;
                }

                var classProp = WmiClass.Properties[prop.Name];
                var info      = new QualifiersInfo(classProp.Qualifiers);
                if (info.IsCimKey)
                {
                    continue;
                }
                var category    = prop.Type.ToString();
                var description = info.Description;
                var isReadOnly  = info.IsReadOnly;
                switch (prop.Type)
                {
                //     A signed 16-bit integer. This value maps to the System.Int16 type.
                case CimType.SInt16:
                    DynObjAddProperty <Int16>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A signed 32-bit integer. This value maps to the System.Int32 type.
                case CimType.SInt32:
                    DynObjAddProperty <Int32>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A floating-point 32-bit number. This value maps to the System.Single type.
                case CimType.Real32:
                    DynObjAddProperty <Single>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A floating point 64-bit number. This value maps to the System.Double type.
                case CimType.Real64:
                    DynObjAddProperty <Double>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A string. This value maps to the System.String type.
                case CimType.String:
                    DynObjAddProperty <String>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A Boolean. This value maps to the System.Boolean type.
                case CimType.Boolean:
                    DynObjAddProperty <Boolean>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     An embedded object. Note that embedded objects differ from references in
                //     that the embedded object does not have a path and its lifetime is identical
                //     to the lifetime of the containing object. This value maps to the System.Object
                //     type.
                case CimType.Object:
                    DynObjAddProperty <Object>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A signed 8-bit integer. This value maps to the System.SByte type.
                case CimType.SInt8:
                    DynObjAddProperty <SByte>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     An unsigned 8-bit integer. This value maps to the System.Byte type.
                case CimType.UInt8:
                    DynObjAddProperty <Byte>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     An unsigned 16-bit integer. This value maps to the System.UInt16 type.
                case CimType.UInt16:
                    DynObjAddProperty <UInt16>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     An unsigned 32-bit integer. This value maps to the System.UInt32 type.
                case CimType.UInt32:
                    DynObjAddProperty <UInt32>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A signed 64-bit integer. This value maps to the System.Int64 type.
                case CimType.SInt64:
                    DynObjAddProperty <Int64>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     An unsigned 64-bit integer. This value maps to the System.UInt64 type.
                case CimType.UInt64:
                    DynObjAddProperty <UInt64>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A date or time value, represented in a string in DMTF date/time format: yyyymmddHHMMSS.mmmmmmsUUU,
                //     where yyyymmdd is the date in year/month/day; HHMMSS is the time in hours/minutes/seconds;
                //     mmmmmm is the number of microseconds in 6 digits; and sUUU is a sign (+ or
                //     -) and a 3-digit UTC offset. This value maps to the System.DateTime type.
                case CimType.DateTime:
                    if (prop.Value == null)
                    {
                        dynObj.AddPropertyNull <DateTime>(prop.Name, prop.Name, description, category, isReadOnly, null);
                    }
                    else
                    {
                        dynObj.AddProperty(prop.Name, WmiHelper.ToDateTime(prop.Value.ToString()), description, category, isReadOnly);
                    }
                    break;

                //     A reference to another object. This is represented by a string containing
                //     the path to the referenced object. This value maps to the System.Int16 type.
                case CimType.Reference:
                    DynObjAddProperty <Int16>(dynObj, prop, description, category, isReadOnly);
                    break;

                //     A 16-bit character. This value maps to the System.Char type.
                case CimType.Char16:
                    DynObjAddProperty <Char>(dynObj, prop, description, category, isReadOnly);
                    break;

                default:
                    string value = prop.Value == null ? null : prop.Value.ToString();
                    dynObj.AddProperty(String.Format(CultureInfo.InvariantCulture, "{0} : {1}", prop.Name, prop.Type), value, description, "Unknown", isReadOnly);
                    break;
                }
            }
            return(dynObj);
        }