コード例 #1
0
        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");
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: EventSource.cs プロジェクト: nickchal/pash
		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;
			}
		}
コード例 #4
0
 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;
 }