internal void SetProperty(string name, object val)
 {
     if (val != null)
     {
         WbemNative.CIMTYPE cimtype = WbemNative.CIMTYPE.CIM_EMPTY;
         if (val is DateTime)
         {
             val = ((DateTime)val).ToString("yyyyMMddhhmmss.ffffff", CultureInfo.InvariantCulture) + "+000";
         }
         else if (val is TimeSpan)
         {
             TimeSpan span = (TimeSpan)val;
             long     num  = (span.Ticks % 0x3e8L) / 10L;
             val = string.Format(CultureInfo.InvariantCulture, "{0:00000000}{1:00}{2:00}{3:00}.{4:000}{5:000}:000", new object[] { span.Days, span.Hours, span.Minutes, span.Seconds, span.Milliseconds, num });
         }
         else if (val is WbemProvider.InstanceContext)
         {
             WbemProvider.InstanceContext context = (WbemProvider.InstanceContext)val;
             val = context.WbemObject;
         }
         else if (val is Array)
         {
             Array array = (Array)val;
             if ((array.GetLength(0) > 0) && (array.GetValue(0) is WbemProvider.InstanceContext))
             {
                 WbemNative.IWbemClassObject[] objArray = new WbemNative.IWbemClassObject[array.GetLength(0)];
                 for (int i = 0; i < objArray.Length; i++)
                 {
                     objArray[i] = ((WbemProvider.InstanceContext)array.GetValue(i)).WbemObject;
                 }
                 val = objArray;
             }
         }
         else if (val is long)
         {
             val     = ((long)val).ToString(CultureInfo.InvariantCulture);
             cimtype = WbemNative.CIMTYPE.CIM_SINT64;
         }
         int hr = this.wbemObject.Put(name, 0, ref val, (int)cimtype);
         if ((-2147217403 == hr) || (-2147217406 == hr))
         {
             EventLogEventId id;
             if (-2147217403 == hr)
             {
                 id = (EventLogEventId)(-1073610732);
             }
             else
             {
                 id = (EventLogEventId)(-1073610731);
             }
             DiagnosticUtility.EventLog.LogEvent(TraceEventType.Error, EventLogCategory.Wmi, id, new string[] { this.className, name, val.GetType().ToString() });
         }
         else
         {
             WbemException.ThrowIfFail(hr);
         }
     }
 }
            internal void SetProperty(string name, object val)
            {
                Fx.Assert(null != this.wbemObject, name + " may not be available to WMI");
                if (null != val)
                {
                    WbemNative.CIMTYPE type = 0;
                    if (val is DateTime)
                    {
                        val = ((DateTime)val).ToString("yyyyMMddhhmmss.ffffff", CultureInfo.InvariantCulture) + "+000";
                    }
                    else if (val is TimeSpan)
                    {
                        TimeSpan ts           = (TimeSpan)val;
                        long     microSeconds = (ts.Ticks % 1000) / 10;
                        val = string.Format(CultureInfo.InvariantCulture, "{0:00000000}{1:00}{2:00}{3:00}.{4:000}{5:000}:000",
                                            new object[] { ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds, microSeconds });
                    }
                    else if (val is InstanceContext)
                    {
                        InstanceContext inst = (InstanceContext)val;
                        val = inst.WbemObject;
                    }
                    else if (val is Array)
                    {
                        Array objs = (Array)val;
                        if (objs.GetLength(0) > 0 && objs.GetValue(0) is InstanceContext)
                        {
                            WbemNative.IWbemClassObject[] insts = new WbemNative.IWbemClassObject[objs.GetLength(0)];
                            for (int i = 0; i < insts.Length; ++i)
                            {
                                insts[i] = ((InstanceContext)objs.GetValue(i)).WbemObject;
                            }
                            val = insts;
                        }
                    }
                    else if (val is Int64)
                    {
                        val  = ((Int64)val).ToString(CultureInfo.InvariantCulture);
                        type = WbemNative.CIMTYPE.CIM_SINT64;
                    }

                    int hResult = this.wbemObject.Put(name, 0, ref val, (int)type);
                    if ((int)WbemNative.WbemStatus.WBEM_E_TYPE_MISMATCH == hResult || (int)WbemNative.WbemStatus.WBEM_E_NOT_FOUND == hResult)
                    {
                        //This would be most likely a product bug (somebody changed type without updating MOF), improper installation or tampering with MOF
                        System.Runtime.Diagnostics.EventLogEventId eventId;
                        if ((int)WbemNative.WbemStatus.WBEM_E_TYPE_MISMATCH == hResult)
                        {
                            eventId = System.Runtime.Diagnostics.EventLogEventId.WmiAdminTypeMismatch;
                        }
                        else
                        {
                            eventId = System.Runtime.Diagnostics.EventLogEventId.WmiPropertyMissing;
                        }
                        DiagnosticUtility.EventLog.LogEvent(TraceEventType.Error,
                                                            (ushort)System.Runtime.Diagnostics.EventLogCategory.Wmi,
                                                            (uint)eventId,
                                                            this.className,
                                                            name,
                                                            val.GetType().ToString());
                    }
                    else
                    {
                        WbemException.ThrowIfFail(hResult);
                    }
                }
            }