示例#1
0
		private CimInstance CreateCimInstance(CimClass cimClass, IDictionary properties, NewCimInstanceCommand cmdlet)
		{
			CimInstance cimInstance;
			CimInstance cimInstance1 = new CimInstance(cimClass);
			if (properties != null)
			{
				List<string> strs = new List<string>();
				IEnumerator enumerator = properties.Keys.GetEnumerator();
				try
				{
					while (enumerator.MoveNext())
					{
						string current = (string)enumerator.Current;
						if (cimInstance1.CimInstanceProperties[current] != null)
						{
							object baseObject = base.GetBaseObject(properties[current]);
							cimInstance1.CimInstanceProperties[current].Value = baseObject;
						}
						else
						{
							strs.Add(current);
							cmdlet.ThrowInvalidProperty(strs, cmdlet.CimClass.CimSystemProperties.ClassName, "Property", "New-CimInstance", properties);
							cimInstance = null;
							return cimInstance;
						}
					}
					return cimInstance1;
				}
				finally
				{
					IDisposable disposable = enumerator as IDisposable;
					if (disposable != null)
					{
						disposable.Dispose();
					}
				}
				return cimInstance;
			}
			else
			{
				return cimInstance1;
			}
		}
示例#2
0
        /// <summary>
        /// Instantiates an empty <see cref="CimInstance"/>.
        /// </summary>
        /// <param name="cimClass"></param>
        /// <exception cref="ArgumentException">Thrown when <paramref name="cimClass"/> is null or when it doesn't follow the format specified by DSP0004</exception>
        public CimInstance(CimClass cimClass)
        {
            if (cimClass == null)
            {
                throw new ArgumentNullException("cimClass");
            }

            MI_Instance tmpHandle;
            MI_Result   result = CimApplication.Handle.NewInstanceFromClass(cimClass.CimSystemProperties.ClassName, cimClass.ClassHandle, out tmpHandle);

            if (result == MI_Result.MI_RESULT_INVALID_PARAMETER)
            {
                throw new ArgumentOutOfRangeException("cimClass");
            }
            CimException.ThrowIfMiResultFailure(result);

            result = tmpHandle.SetNameSpace(cimClass.CimSystemProperties.Namespace);
            CimException.ThrowIfMiResultFailure(result);
            result = tmpHandle.SetServerName(cimClass.CimSystemProperties.ServerName);
            CimException.ThrowIfMiResultFailure(result);

            this.nativeInstance = tmpHandle;
        }
示例#3
0
		public CimInstance(CimClass cimClass)
		{
			InstanceHandle instanceHandle = null;
			this._CimSessionInstanceID = Guid.Empty;
			if (cimClass != null)
			{
				MiResult miResult = ApplicationMethods.NewInstance(CimApplication.Handle, cimClass.CimSystemProperties.ClassName, cimClass.ClassHandle, out instanceHandle);
				if (miResult != MiResult.INVALID_PARAMETER)
				{
					CimException.ThrowIfMiResultFailure(miResult);
					this._myHandle = new SharedInstanceHandle(instanceHandle);
					miResult = InstanceMethods.SetNamespace(this._myHandle.Handle, cimClass.CimSystemProperties.Namespace);
					CimException.ThrowIfMiResultFailure(miResult);
					miResult = InstanceMethods.SetServerName(this._myHandle.Handle, cimClass.CimSystemProperties.ServerName);
					CimException.ThrowIfMiResultFailure(miResult);
					return;
				}
				else
				{
					throw new ArgumentOutOfRangeException("cimClass");
				}
			}
			else
			{
				throw new ArgumentNullException("cimClass");
			}
		}
示例#4
0
		internal ClassHandle DeserializeClassHandle (byte[] serializedData, ref int offset, CimClass parentClass, string computerName, string namespaceName)
		{
			return null;
		}
示例#5
0
		private CimMethodParametersCollection CreateParametersCollection(IDictionary parameters, CimClass cimClass, CimInstance cimInstance, string methodName)
		{
			DebugHelper.WriteLogEx();
			CimMethodParametersCollection cimMethodParametersCollection = null;
			if (parameters != null)
			{
				if (parameters.Count != 0)
				{
					cimMethodParametersCollection = new CimMethodParametersCollection();
					IDictionaryEnumerator enumerator = parameters.GetEnumerator();
					while (enumerator.MoveNext())
					{
						string str = enumerator.Key.ToString();
						CimFlags cimFlag = CimFlags.In;
						object baseObject = base.GetBaseObject(enumerator.Value);
						object[] objArray = new object[3];
						objArray[0] = str;
						objArray[1] = baseObject;
						objArray[2] = cimFlag;
						DebugHelper.WriteLog("Create parameter name= {0}, value= {1}, flags= {2}.", 4, objArray);
						CimMethodParameter cimMethodParameter = null;
						CimMethodDeclaration item = null;
						string className = null;
						if (cimClass == null)
						{
							if (cimInstance != null)
							{
								className = cimInstance.CimClass.CimSystemProperties.ClassName;
								item = cimInstance.CimClass.CimClassMethods[methodName];
							}
						}
						else
						{
							className = cimClass.CimSystemProperties.ClassName;
							item = cimClass.CimClassMethods[methodName];
							if (item == null)
							{
								object[] objArray1 = new object[2];
								objArray1[0] = methodName;
								objArray1[1] = className;
								throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Strings.InvalidMethod, objArray1));
							}
						}
						if (item == null)
						{
							if (baseObject != null)
							{
								CimType cimType = CimType.Unknown;
								object referenceOrReferenceArrayObject = base.GetReferenceOrReferenceArrayObject(baseObject, ref cimType);
								if (referenceOrReferenceArrayObject == null)
								{
									cimMethodParameter = CimMethodParameter.Create(str, baseObject, cimFlag);
								}
								else
								{
									cimMethodParameter = CimMethodParameter.Create(str, referenceOrReferenceArrayObject, cimType, cimFlag);
								}
							}
							else
							{
								cimMethodParameter = CimMethodParameter.Create(str, baseObject, CimType.String, cimFlag);
							}
						}
						else
						{
							CimMethodParameterDeclaration cimMethodParameterDeclaration = item.Parameters[str];
							if (cimMethodParameterDeclaration != null)
							{
								cimMethodParameter = CimMethodParameter.Create(str, baseObject, cimMethodParameterDeclaration.CimType, cimFlag);
							}
							else
							{
								object[] objArray2 = new object[3];
								objArray2[0] = str;
								objArray2[1] = methodName;
								objArray2[2] = className;
								throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, Strings.InvalidMethodParameter, objArray2));
							}
						}
						if (cimMethodParameter == null)
						{
							continue;
						}
						cimMethodParametersCollection.Add(cimMethodParameter);
					}
					return cimMethodParametersCollection;
				}
				else
				{
					return cimMethodParametersCollection;
				}
			}
			else
			{
				return cimMethodParametersCollection;
			}
		}
示例#6
0
		public CimClass DeserializeClass(byte[] serializedData, ref int offset, CimClass parentClass)
		{
			return this.DeserializeClass(serializedData, ref offset, parentClass, null, null);
		}
示例#7
0
		public CimClass DeserializeClass(byte[] serializedData, ref int offset, CimClass parentClass, string computerName, string namespaceName)
		{
			ClassHandle classHandle = this.DeserializeClassHandle(serializedData, ref offset, parentClass, computerName, namespaceName);
			return new CimClass(classHandle);
		}
示例#8
0
        private static bool IsSameNestedObject(CimClass oldClass, CimClass newClass)
        {
            // #1 both the classes should be nested class and not DSC resource
            if ((oldClass.CimSuperClassName != null && string.Equals("OMI_BaseResource", oldClass.CimSuperClassName, StringComparison.OrdinalIgnoreCase)) ||
                (newClass.CimSuperClassName != null && string.Equals("OMI_BaseResource", newClass.CimSuperClassName, StringComparison.OrdinalIgnoreCase)))
            {
                return false;
            }
            // #2 qualifier count, names, values and types should be same
            if (!AreQualifiersSame(oldClass.CimClassQualifiers, newClass.CimClassQualifiers))
            {
                return false;
            }

            // #3 property count, names, values, qualifiers and types should be same            
            if (!ArePropertiesSame(oldClass.CimClassProperties, newClass.CimClassProperties))
            {
                return false;
            }

            return true;
        }
示例#9
0
 private static string GetFriendlyName(CimClass cimClass)
 {
     try
     {
         var aliasQualifier = cimClass.CimClassQualifiers["FriendlyName"];
         if (aliasQualifier != null)
         {
             return aliasQualifier.Value as string;
         }
     }
     catch (Microsoft.Management.Infrastructure.CimException)
     {
         //exception means no DSCAlias
     }
     return null;
 }
        private static MiResult ValidateExportedCommandParameters(
            CimClass resourceClass,
            PSModuleInfo moduleInfo,
            out UInt32 getActionStatusCode,
            out ErrorRecord errorRecord)
        {
            // Get key and write parameter data from MOF schema.
            List<CimPropertyDeclaration> keyProperties;
            List<CimPropertyDeclaration> writeProperties;
            List<CimPropertyDeclaration> requiredProperties;
            Utility.GetKeyWriteRequiredProperties(resourceClass, out keyProperties, out writeProperties, out requiredProperties);

            // Validate Get command against key parameters.
            string moduleName = moduleInfo.Name;
            CommandInfo cmdInfo = moduleInfo.ExportedCommands[PsDscCmdletGet];
            MiResult result = ValidateCommandParameters(cmdInfo, keyProperties, moduleName, out getActionStatusCode, out errorRecord);
            if (result != MiResult.OK) { return result; }

            // Validate Set command against key and write parameters.
            cmdInfo = moduleInfo.ExportedCommands[PsDscCmdletSet];
            result = ValidateCommandParameters(cmdInfo, keyProperties, moduleName, out getActionStatusCode, out errorRecord);
            if (result != MiResult.OK) { return result; }
            result = ValidateCommandParameters(cmdInfo, writeProperties, moduleName, out getActionStatusCode, out errorRecord);
            if (result != MiResult.OK) { return result; }

            // Validate Test command against key and write parameters.
            cmdInfo = moduleInfo.ExportedCommands[PsDscCmdletTest];
            result = ValidateCommandParameters(cmdInfo, keyProperties, moduleName, out getActionStatusCode, out errorRecord);
            if (result != MiResult.OK) { return result; }
            return ValidateCommandParameters(cmdInfo, writeProperties, moduleName, out getActionStatusCode, out errorRecord);
        }
示例#11
0
		public byte[] Serialize(CimClass cimClass, ClassSerializationOptions options)
		{
			unsafe
			{
				if (cimClass != null)
				{
					this.AssertNotDisposed();
					int num = 0;
					this.Serialize(cimClass, options, null, ref num);
					byte[] numArray = new byte[num];
					int num1 = 0;
					this.Serialize(cimClass, options, numArray, ref num1);
					return numArray;
				}
				else
				{
					throw new ArgumentNullException("cimClass");
				}
			}
		}
示例#12
0
		public bool Serialize(CimClass cimClass, ClassSerializationOptions options, byte[] buffer, ref int offset)
		{
			int num = 0;
			if (cimClass != null)
			{
				if (buffer != null)
				{
					if ((long)offset <= (long)((int)buffer.Length))
					{
						if ((long)offset == (long)((int)buffer.Length))
						{
							buffer = null;
						}
					}
					else
					{
						throw new ArgumentOutOfRangeException("offset");
					}
				}
				else
				{
					if (offset != 0)
					{
						throw new ArgumentNullException("buffer");
					}
				}
				this.AssertNotDisposed();
				bool flag = true;
                MiResult miResult = MiResult.OK; //TODO: // SerializerMethods.SerializeClass(this._myHandle, options, cimClass.ClassHandle, buffer, offset, out num);
				MiResult miResult1 = miResult;
				switch (miResult1)
				{
					case MiResult.OK:
					{
						offset = offset + num;
						flag = true;
						return flag;
					}
					case MiResult.FAILED:
					{
						if (buffer == null || (long)(offset + num) > (long)((int)buffer.Length))
						{
							miResult = MiResult.OK;
							offset = offset + num;
						}
						flag = false;
						return flag;
					}
				}
				CimException.ThrowIfMiResultFailure(miResult);
				return flag;
			}
			else
			{
				throw new ArgumentNullException("cimClass");
			}
		}