public ManagementClass Derive(string newClassName) { ManagementClass managementClass = null; if (newClassName != null) { ManagementPath managementPath = new ManagementPath(); try { managementPath.ClassName = newClassName; } catch { throw new ArgumentOutOfRangeException("newClassName"); } if (managementPath.IsClass) { if (base.PutButNotGot) { base.Get(); base.PutButNotGot = false; } IWbemClassObjectFreeThreaded wbemClassObjectFreeThreaded = null; int num = base.wbemObject.SpawnDerivedClass_(0, out wbemClassObjectFreeThreaded); if (num >= 0) { object obj1 = newClassName; num = wbemClassObjectFreeThreaded.Put_("__CLASS", 0, ref obj1, 0); if (num >= 0) { managementClass = ManagementClass.GetManagementClass(wbemClassObjectFreeThreaded, this); } } if (num < 0) { if (((long)num & (long)-4096) != (long)-2147217408) { Marshal.ThrowExceptionForHR(num); } else { ManagementException.ThrowWithExtendedInfo((ManagementStatus)num); } } return(managementClass); } else { throw new ArgumentOutOfRangeException("newClassName"); } } else { throw new ArgumentNullException("newClassName"); } }
public ManagementClass Derive(string newClassName) { ManagementClass managementClass = null; if (newClassName == null) { throw new ArgumentNullException("newClassName"); } ManagementPath path = new ManagementPath(); try { path.ClassName = newClassName; } catch { throw new ArgumentOutOfRangeException("newClassName"); } if (!path.IsClass) { throw new ArgumentOutOfRangeException("newClassName"); } if (base.PutButNotGot) { base.Get(); base.PutButNotGot = false; } IWbemClassObjectFreeThreaded ppNewClass = null; int errorCode = base.wbemObject.SpawnDerivedClass_(0, out ppNewClass); if (errorCode >= 0) { object pVal = newClassName; errorCode = ppNewClass.Put_("__CLASS", 0, ref pVal, 0); if (errorCode >= 0) { managementClass = GetManagementClass(ppNewClass, this); } } if (errorCode < 0) { if ((errorCode & 0xfffff000L) == 0x80041000L) { ManagementException.ThrowWithExtendedInfo((ManagementStatus)errorCode); return(managementClass); } Marshal.ThrowExceptionForHR(errorCode); } return(managementClass); }
int System.Management.IWbemServices_Old.GetObjectAsync_(string strObjectPath, int lFlags, IWbemContext pCtx, IWbemObjectSink pResponseHandler) { Match match = Regex.Match(strObjectPath.ToLower(CultureInfo.InvariantCulture), "(.*?)\\.instanceid=\"(.*?)\",processid=\"(.*?)\""); if (match.Success) { //match.Groups[1].Value; string value = match.Groups[2].Value; string str = match.Groups[3].Value; if (Instrumentation.ProcessIdentity == str) { int num = ((IConvertible)value).ToInt32((IFormatProvider)CultureInfo.InvariantCulture.GetFormat(typeof(int))); object item = null; try { InstrumentedAssembly.readerWriterLock.AcquireReaderLock(-1); item = InstrumentedAssembly.mapIDToPublishedObject[num.ToString((IFormatProvider)CultureInfo.InvariantCulture.GetFormat(typeof(int)))]; } finally { InstrumentedAssembly.readerWriterLock.ReleaseReaderLock(); } if (item != null) { Type type = (Type)this.instrumentedAssembly.mapTypeToConverter[item.GetType()]; if (type != null) { object obj = Activator.CreateInstance(type); ConvertToWMI convertToWMI = (ConvertToWMI)Delegate.CreateDelegate(typeof(ConvertToWMI), obj, "ToWMI"); lock (item) { convertToWMI(item); } IntPtr[] intPtrArray = new IntPtr[1]; intPtrArray[0] = (IntPtr)obj.GetType().GetField("instWbemObjectAccessIP").GetValue(obj); IntPtr[] intPtrArray1 = intPtrArray; Marshal.AddRef(intPtrArray1[0]); IWbemClassObjectFreeThreaded wbemClassObjectFreeThreaded = new IWbemClassObjectFreeThreaded(intPtrArray1[0]); object processIdentity = num; wbemClassObjectFreeThreaded.Put_("InstanceId", 0, ref processIdentity, 0); processIdentity = Instrumentation.ProcessIdentity; wbemClassObjectFreeThreaded.Put_("ProcessId", 0, ref processIdentity, 0); pResponseHandler.Indicate_(1, intPtrArray1); pResponseHandler.SetStatus_(0, 0, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return 0; } } pResponseHandler.SetStatus_(0, -2147217406, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return -2147217406; } else { pResponseHandler.SetStatus_(0, -2147217406, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return -2147217406; } } else { pResponseHandler.SetStatus_(0, -2147217406, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return -2147217406; } }
int IWbemServices_Old.GetObjectAsync_([In, MarshalAs(UnmanagedType.BStr)] string strObjectPath, [In] int lFlags, [In, MarshalAs(UnmanagedType.Interface)] IWbemContext pCtx, [In, MarshalAs(UnmanagedType.Interface)] IWbemObjectSink pResponseHandler) { Match match = Regex.Match(strObjectPath.ToLower(CultureInfo.InvariantCulture), "(.*?)\\.instanceid=\"(.*?)\",processid=\"(.*?)\""); if (!match.Success) { pResponseHandler.SetStatus_(0, -2147217406, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return -2147217406; } string text1 = match.Groups[1].Value; string str = match.Groups[2].Value; string str2 = match.Groups[3].Value; if (System.Management.Instrumentation.Instrumentation.ProcessIdentity != str2) { pResponseHandler.SetStatus_(0, -2147217406, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return -2147217406; } int num = ((IConvertible) str).ToInt32((IFormatProvider) CultureInfo.InvariantCulture.GetFormat(typeof(int))); object obj2 = null; try { InstrumentedAssembly.readerWriterLock.AcquireReaderLock(-1); obj2 = InstrumentedAssembly.mapIDToPublishedObject[num.ToString((IFormatProvider) CultureInfo.InvariantCulture.GetFormat(typeof(int)))]; } finally { InstrumentedAssembly.readerWriterLock.ReleaseReaderLock(); } if (obj2 != null) { Type type = (Type) this.instrumentedAssembly.mapTypeToConverter[obj2.GetType()]; if (type != null) { object target = Activator.CreateInstance(type); ConvertToWMI owmi = (ConvertToWMI) Delegate.CreateDelegate(typeof(ConvertToWMI), target, "ToWMI"); lock (obj2) { owmi(obj2); } IntPtr[] apObjArray = new IntPtr[] { (IntPtr) target.GetType().GetField("instWbemObjectAccessIP").GetValue(target) }; Marshal.AddRef(apObjArray[0]); IWbemClassObjectFreeThreaded threaded = new IWbemClassObjectFreeThreaded(apObjArray[0]); object pVal = num; threaded.Put_("InstanceId", 0, ref pVal, 0); pVal = System.Management.Instrumentation.Instrumentation.ProcessIdentity; threaded.Put_("ProcessId", 0, ref pVal, 0); pResponseHandler.Indicate_(1, apObjArray); pResponseHandler.SetStatus_(0, 0, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return 0; } } pResponseHandler.SetStatus_(0, -2147217406, null, IntPtr.Zero); Marshal.ReleaseComObject(pResponseHandler); return -2147217406; }