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); } } }