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