Ejemplo n.º 1
0
		private void GetMethodParameters(string methodName, out ManagementBaseObject inParameters, out IWbemClassObjectFreeThreaded inParametersClass, out IWbemClassObjectFreeThreaded outParametersClass)
		{
			inParameters = null;
			inParametersClass = null;
			outParametersClass = null;
			if (methodName != null)
			{
				this.Initialize(false);
				if (this.wmiClass == null)
				{
					ManagementPath classPath = this.ClassPath;
					if (classPath == null || !classPath.IsClass)
					{
						throw new InvalidOperationException();
					}
					else
					{
						ManagementClass managementClass = new ManagementClass(this.scope, classPath, null);
						managementClass.Get();
						this.wmiClass = managementClass.wbemObject;
					}
				}
				int method_ = this.wmiClass.GetMethod_(methodName, 0, out inParametersClass, out outParametersClass);
				if (method_ == -2147217406)
				{
					method_ = -2147217323;
				}
				if (method_ >= 0 && inParametersClass != null)
				{
					IWbemClassObjectFreeThreaded wbemClassObjectFreeThreaded = null;
					method_ = inParametersClass.SpawnInstance_(0, out wbemClassObjectFreeThreaded);
					if (method_ >= 0)
					{
						inParameters = new ManagementBaseObject(wbemClassObjectFreeThreaded);
					}
				}
				if (method_ < 0)
				{
					if (((long)method_ & (long)-4096) != (long)-2147217408)
					{
						Marshal.ThrowExceptionForHR(method_);
					}
					else
					{
						ManagementException.ThrowWithExtendedInfo((ManagementStatus)method_);
						return;
					}
				}
				return;
			}
			else
			{
				throw new ArgumentNullException("methodName");
			}
		}
        private void GetMethodParameters(
            string methodName,
            out ManagementBaseObject inParameters,
            out IWbemClassObjectFreeThreaded inParametersClass,
            out IWbemClassObjectFreeThreaded outParametersClass)
        {
            inParameters = null;
            inParametersClass = null;
            outParametersClass = null;

            if (null == methodName)
                throw new ArgumentNullException("methodName");
            else
            {
                Initialize ( false ) ;

                // Do we have the class?
                if (null == wmiClass)
                {
                    ManagementPath classPath = ClassPath;

                    if ((null == classPath) || !(classPath.IsClass))
                        throw new InvalidOperationException();
                    else 
                    {
                        ManagementClass classObject = 
                            new ManagementClass(scope, classPath, null);
                        classObject.Get();
                        wmiClass = classObject.wbemObject;
                    }
                }

                int status = (int)ManagementStatus.NoError;

                // Ask it for the method parameters
                status = wmiClass.GetMethod_(methodName, 0, out inParametersClass, out outParametersClass);

                // bug#92427 - To ensure that all forms of invoke return the same error codes when
                // the method does not exist, we will map WBEM_E_NOT_FOUND to WBEM_E_METHOD_NOT_IMPLEMENTED.
                if(status == (int)tag_WBEMSTATUS.WBEM_E_NOT_FOUND)
                    status = (int)tag_WBEMSTATUS.WBEM_E_METHOD_NOT_IMPLEMENTED;

                if (status >= 0)
                {
                    // Hand out instances
                    if (inParametersClass != null)
                    {
                        IWbemClassObjectFreeThreaded inParamsInstance = null;
                        status = inParametersClass.SpawnInstance_(0, out inParamsInstance);

                        if (status >= 0)
                        {
                            inParameters = new ManagementBaseObject(inParamsInstance);
                        }
                    }
                } 

                if (status < 0)
                {
                    if ((status & 0xfffff000) == 0x80041000)
                        ManagementException.ThrowWithExtendedInfo((ManagementStatus)status);
                    else
                        Marshal.ThrowExceptionForHR(status);
                }
            }
        }