Пример #1
0
 private void ProcessPropertyValue(object objectValue)
 {
     if (this._cimSessionComputerName != null || !this._cimSessionInstanceId.Equals(Guid.Empty))
     {
         CimInstance cimInstance = objectValue as CimInstance;
         if (cimInstance == null)
         {
             CimInstance[] cimInstanceArray = objectValue as CimInstance[];
             if (cimInstanceArray != null)
             {
                 CimInstance[] cimInstanceArray1 = cimInstanceArray;
                 for (int i = 0; i < (int)cimInstanceArray1.Length; i++)
                 {
                     CimInstance cimInstance1 = cimInstanceArray1[i];
                     if (cimInstance1 != null)
                     {
                         cimInstance1.SetCimSessionComputerName(this._cimSessionComputerName);
                         cimInstance1.SetCimSessionInstanceId(this._cimSessionInstanceId);
                     }
                 }
             }
         }
         else
         {
             cimInstance.SetCimSessionComputerName(this._cimSessionComputerName);
             cimInstance.SetCimSessionInstanceId(this._cimSessionInstanceId);
             return;
         }
     }
 }
        /// <summary>
        /// Set CimSessionComputerName and CimSessionInstanceId properties to
        /// the given object if it is CimInstance or CimInstance[]
        /// </summary>
        private void ProcessPropertyValue(object objectValue)
        {
            if ((this._cimSessionComputerName != null) || (!this._cimSessionInstanceId.Equals(Guid.Empty)))
            {
                CimInstance value = (objectValue as CimInstance);
                if (value != null)
                {
                    value.SetCimSessionComputerName(this._cimSessionComputerName);
                    value.SetCimSessionInstanceId(this._cimSessionInstanceId);
                    return;
                }

                CimInstance[] arrayValue = (objectValue as CimInstance[]);
                if (arrayValue != null)
                {
                    foreach (CimInstance cimInstance in arrayValue)
                    {
                        if (cimInstance != null)
                        {
                            cimInstance.SetCimSessionComputerName(this._cimSessionComputerName);
                            cimInstance.SetCimSessionInstanceId(this._cimSessionInstanceId);
                        }
                    }
                }
            }
        }
        internal void StreamedParameterCallback(OperationCallbackProcessingContext callbackProcessingContext, OperationHandle operationHandle, string parameterName, object parameterValue, MiType parameterType)
        {
            parameterValue = CimInstance.ConvertFromNativeLayer(parameterValue, null, null, !this._shortenLifetimeOfResults);
            CimInstance cimInstance = parameterValue as CimInstance;

            if (cimInstance != null)
            {
                cimInstance.SetCimSessionComputerName(this._CimSessionComputerName);
                cimInstance.SetCimSessionInstanceId(this._CimSessionInstanceID);
            }
            CimInstance[] cimInstanceArray = parameterValue as CimInstance[];
            if (cimInstanceArray != null)
            {
                CimInstance[] cimInstanceArray1 = cimInstanceArray;
                for (int i = 0; i < (int)cimInstanceArray1.Length; i++)
                {
                    CimInstance cimInstance1 = cimInstanceArray1[i];
                    if (cimInstance1 != null)
                    {
                        cimInstance1.SetCimSessionComputerName(this._CimSessionComputerName);
                        cimInstance1.SetCimSessionInstanceId(this._CimSessionInstanceID);
                    }
                }
            }
            try
            {
                CimMethodResultBase cimMethodStreamedResult = new CimMethodStreamedResult(parameterName, parameterValue, parameterType.ToCimType());
                base.ProcessNativeCallback(callbackProcessingContext, cimMethodStreamedResult, true, MiResult.OK, null, null);
            }
            finally
            {
                if (this._shortenLifetimeOfResults)
                {
                    CimInstance cimInstance2 = parameterValue as CimInstance;
                    if (cimInstance2 != null)
                    {
                        cimInstance2.Dispose();
                    }
                    CimInstance[] cimInstanceArray2 = parameterValue as CimInstance[];
                    if (cimInstanceArray2 != null)
                    {
                        CimInstance[] cimInstanceArray3 = cimInstanceArray2;
                        for (int j = 0; j < (int)cimInstanceArray3.Length; j++)
                        {
                            CimInstance cimInstance3 = cimInstanceArray3[j];
                            if (cimInstance3 != null)
                            {
                                cimInstance3.Dispose();
                            }
                        }
                    }
                }
            }
        }
        internal void InstanceResultCallback(
            CimOperationCallbackProcessingContext callbackProcessingContext,
            MI_Operation operationHandle,
            MI_Instance instanceHandle,
            bool moreResults,
            MI_Result operationResult,
            String errorMessage,
            MI_Instance errorDetailsHandle)
        {
            CimMethodResult currentItem = null;

            if ((instanceHandle != null) && (!instanceHandle.IsNull))
            {
                if (!_shortenLifetimeOfResults)
                {
                    instanceHandle = instanceHandle.Clone();
                }
                var backingInstance = new CimInstance(instanceHandle);
                backingInstance.SetCimSessionComputerName(this._CimSessionComputerName);
                backingInstance.SetCimSessionInstanceId(this._CimSessionInstanceID);
                currentItem = new CimMethodResult(backingInstance);
            }

            try
            {
                this.ProcessNativeCallback(callbackProcessingContext, currentItem, moreResults, operationResult, errorMessage, errorDetailsHandle);
            }
            finally
            {
                if (_shortenLifetimeOfResults)
                {
                    if (currentItem != null)
                    {
                        currentItem.Dispose();
                    }
                }
            }
        }
        internal void InstanceResultCallback(OperationCallbackProcessingContext callbackProcessingContext, OperationHandle operationHandle, InstanceHandle instanceHandle, bool moreResults, MiResult operationResult, string errorMessage, InstanceHandle errorDetailsHandle)
        {
            CimMethodResult cimMethodResult = null;

            if (instanceHandle != null && !instanceHandle.IsInvalid)
            {
                if (!this._shortenLifetimeOfResults)
                {
                    instanceHandle = instanceHandle.Clone();
                }
                CimInstance cimInstance = new CimInstance(instanceHandle, null);
                cimInstance.SetCimSessionComputerName(this._CimSessionComputerName);
                cimInstance.SetCimSessionInstanceId(this._CimSessionInstanceID);
                cimMethodResult = new CimMethodResult(cimInstance);
            }
            using (cimMethodResult)
            {
                if (!this._shortenLifetimeOfResults || cimMethodResult == null)
                {
                    base.ProcessNativeCallback(callbackProcessingContext, cimMethodResult, moreResults, operationResult, errorMessage, errorDetailsHandle);
                }
            }
        }
Пример #6
0
        internal static object ConvertFromNativeLayer(
            MI_Value value,
            MI_Type type,
            MI_Flags flags,
            CimInstance parent = null,
            bool clone         = false)
        {
            if ((flags & MI_Flags.MI_FLAG_NULL) == MI_Flags.MI_FLAG_NULL)
            {
                return(null);
            }

            if (type == MI_Type.MI_INSTANCE || type == MI_Type.MI_REFERENCE)
            {
                CimInstance instance = new CimInstance(
                    clone ? value.Instance.Clone() : value.Instance);
                if (parent != null)
                {
                    instance.SetCimSessionComputerName(parent.GetCimSessionComputerName());
                    instance.SetCimSessionInstanceId(parent.GetCimSessionInstanceId());
                }
                return(instance);
            }
            else if (type == MI_Type.MI_INSTANCEA || type == MI_Type.MI_REFERENCEA)
            {
                CimInstance[] arrayOfInstances = new CimInstance[value.InstanceA.Length];
                for (int i = 0; i < value.InstanceA.Length; i++)
                {
                    MI_Instance h = value.InstanceA[i];
                    if (h == null)
                    {
                        arrayOfInstances[i] = null;
                    }
                    else
                    {
                        arrayOfInstances[i] = new CimInstance(
                            clone ? h.Clone() : h);
                        if (parent != null)
                        {
                            arrayOfInstances[i].SetCimSessionComputerName(parent.GetCimSessionComputerName());
                            arrayOfInstances[i].SetCimSessionInstanceId(parent.GetCimSessionInstanceId());
                        }
                    }
                }
                return(arrayOfInstances);
            }
            else if (type == MI_Type.MI_DATETIME)
            {
                return(value.Datetime.ConvertFromNativeLayer());
            }
            else if (type == MI_Type.MI_DATETIMEA)
            {
                int      length           = value.DatetimeA.Length;
                object[] arrayOfDatetimes = new object[length];
                for (int i = 0; i < length; i++)
                {
                    arrayOfDatetimes[i] = value.DatetimeA[i].ConvertFromNativeLayer();
                }
                return(arrayOfDatetimes);
            }
            else
            {
                return(value.GetValue(type));
            }
        }