示例#1
0
文件: WM_ATTR.cs 项目: tdhieu/openvss
		private static object ConvertDataType(WMT_ATTR_DATATYPE type, object val)
		{
			object value = null;

			switch (type)
			{
				case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
					value = (byte[])val;
					break;
				case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
					value = (bool)val;
					break;
				case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
					value = (uint)val;
					break;
				case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
					value = (Guid)val;
					break;
				case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
					value = (ulong)val;
					break;
				case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
					value = (string)val;
					break;
				case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
					value = (ushort)val;
					break;
				default:
					throw new ArgumentException("Invalid data type.", "type");
			}

			return value;
		}
示例#2
0
文件: WM_Attr.cs 项目: pclancy/yeti
 /// <summary>
 /// Initialize the WM_Attr streucture with proper values.
 /// </summary>
 /// <param name="name">Name of the attribute</param>
 /// <param name="type">WMT_ATTR_DATATYPE enum describing the type of the attribute. </param>
 /// <param name="val">The atrtibute value. This param is an obcjet and must match the 
 /// param type, ex. If type is WMT_ATTR_DATATYPE.WMT_TYPE_BOOL val param must be a valid <code>bool</code> and so on. </param>
 public WM_Attr(string name, WMT_ATTR_DATATYPE type, object val)
 {
     m_Name = name;
     this.m_DataType = type;
     switch (type)
     {
         case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
             m_Value = (byte[])val;
             break;
         case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
             m_Value = (bool)val;
             break;
         case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
             m_Value = (uint)val;
             break;
         case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
             m_Value = (Guid)val;
             break;
         case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
             m_Value = (ulong)val;
             break;
         case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
             m_Value = (string)val;
             break;
         case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
             m_Value = (ushort)val;
             break;
         default:
             throw new ArgumentException("Invalid data type", "type");
     }
 }
示例#3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Attribute"/> class.
 /// </summary>
 /// <param name="index">
 /// The _index.
 /// </param>
 /// <param name="name">
 /// The _name.
 /// </param>
 /// <param name="value">
 /// The _value.
 /// </param>
 /// <param name="type">
 /// The _type.
 /// </param>
 public Attribute(ushort index, string name, string value, WMT_ATTR_DATATYPE type)
 {
     this.Index = index;
     this.Name  = name;
     this.Value = value;
     this.Type  = type;
 }
示例#4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Attribute"/> class.
 /// </summary>
 /// <param name="index">
 /// The _index.
 /// </param>
 /// <param name="name">
 /// The _name.
 /// </param>
 /// <param name="value">
 /// The _value.
 /// </param>
 /// <param name="type">
 /// The _type.
 /// </param>
 public Attribute(ushort index, string name, string value, WMT_ATTR_DATATYPE type)
 {
     this.Index = index;
     this.Name = name;
     this.Value = value;
     this.Type = type;
 }
示例#5
0
        /// <summary>
        /// Initialize the WM_Attr streucture with proper values.
        /// </summary>
        /// <param name="name">Name of the attribute</param>
        /// <param name="type">WMT_ATTR_DATATYPE enum describing the type of the attribute. </param>
        /// <param name="val">The atrtibute value. This param is an obcjet and must match the
        /// param type, ex. If type is WMT_ATTR_DATATYPE.WMT_TYPE_BOOL val param must be a valid <code>bool</code> and so on. </param>
        public WM_Attr(string name, WMT_ATTR_DATATYPE type, object val)

        {
            m_Name = name;

            this._dataType = type;

            switch (type)

            {
            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:

                m_Value = (byte[])val;

                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

                m_Value = (bool)val;

                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

                m_Value = (uint)val;

                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:

                m_Value = (Guid)val;

                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

                m_Value = (ulong)val;

                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                m_Value = (string)val;

                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

                m_Value = (ushort)val;

                break;

            default:

                throw new ArgumentException("Invalid data type", "type");
            }
        }
示例#6
0
        private object UnpackByteArray(byte[] attrValue, WMT_ATTR_DATATYPE attrType)
        {
            // Now we convert the resultant data into something
            // that can be returned, using the attributeDataType
            // value to determine its underlying type.
            switch (attrType)
            {
            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                if (attrValue.Length < 2)
                {
                    return(null);
                }
                else
                {
                    StringBuilder sb = new StringBuilder(attrValue.Length / 2);

                    for (int i = 0; i < attrValue.Length - 2; i += 2)
                    {
                        sb.Append(BitConverter.ToChar(attrValue, i));
                    }
                    return(sb.ToString());
                }

            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
                return(attrValue);

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
                return(BitConverter.ToBoolean(attrValue, 0));

            // DWORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
                return(BitConverter.ToUInt32(attrValue, 0));

            // QWORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
                return(BitConverter.ToUInt64(attrValue, 0));

            // WORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
                return(BitConverter.ToUInt16(attrValue, 0));

            // GUID
            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
                return(BitConverter.ToString(attrValue, 0, attrValue.Length));

            default:
                return(null);
            }
        }
        //------------------------------------------------------------------------------
        // Name: AddAttrib()
        // Desc: Add an attribute with the specifed language index.
        //------------------------------------------------------------------------------
        bool AddAttrib(string pwszFileName, ushort wStreamNum, string pwszAttribName,
                       ushort wAttribType, string pwszAttribValue, ushort wLangIndex)
        {
            try
            {
                IWMMetadataEditor MetadataEditor;
                IWMHeaderInfo3    HeaderInfo3;
                byte[]            pbAttribValue;
                int nAttribValueLen;
                WMT_ATTR_DATATYPE AttribDataType = ( WMT_ATTR_DATATYPE )wAttribType;
                ushort            wAttribIndex   = 0;

                if (!TranslateAttrib(AttribDataType, pwszAttribValue, out pbAttribValue, out nAttribValueLen))
                {
                    return(false);
                }

                WMFSDKFunctions.WMCreateEditor(out MetadataEditor);

                MetadataEditor.Open(pwszFileName);

                HeaderInfo3 = ( IWMHeaderInfo3 )MetadataEditor;

                HeaderInfo3.AddAttribute(wStreamNum,
                                         pwszAttribName,
                                         out wAttribIndex,
                                         AttribDataType,
                                         wLangIndex,
                                         pbAttribValue,
                                         (uint)nAttribValueLen);

                MetadataEditor.Flush();

                MetadataEditor.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return(false);
            }

            return(true);
        }
        private static object ParseAttributeValue(byte[] attributeValue, WMT_ATTR_DATATYPE attributeDataType)
        {
            switch (attributeDataType)
            {
            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
                return(attributeValue);

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
                return(BitConverter.ToBoolean(attributeValue, 0));

            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
                return(BitConverter.ToUInt32(attributeValue, 0));

            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
                return(BitConverter.ToUInt64(attributeValue, 0));

            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
                return(BitConverter.ToUInt16(attributeValue, 0));

            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
                return(BitConverter.ToString(attributeValue, 0, attributeValue.Length));

            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                if (attributeValue.Length < 2)
                {
                    return(null);
                }

                StringBuilder sb = new StringBuilder(attributeValue.Length / 2);

                for (int i = 0; i < attributeValue.Length - 2; i += 2)
                {
                    sb.Append(BitConverter.ToChar(attributeValue, i));
                }

                return(sb.ToString());

            default:
                return(null);
            }
        }
示例#9
0
        private static object ConvertDataType(WMT_ATTR_DATATYPE type, object val)
        {
            object value = null;

            switch (type)
            {
            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
                value = (byte[])val;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
                value = (bool)val;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
                value = (uint)val;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
                value = (Guid)val;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
                value = (ulong)val;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
                value = (string)val;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
                value = (ushort)val;
                break;

            default:
                throw new ArgumentException("Invalid data type.", "type");
            }

            return(value);
        }
示例#10
0
        public Tag(int index, string name, WMT_ATTR_DATATYPE type, object val)
        {
            this._index    = index;
            this._name     = name.TrimEnd(new char[1]);
            this._dataType = type;
            switch (type)
            {
            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
                this._value = Convert.ToUInt32(val);
                return;

            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
                this._value = Convert.ToString(val).TrimWithBOM();
                return;

            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
                this._value = (byte[])val;
                return;

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
                this._value = Convert.ToBoolean(val);
                return;

            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
                this._value = Convert.ToUInt64(val);
                return;

            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
                this._value = Convert.ToUInt16(val);
                return;

            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
                this._value = (Guid)val;
                return;

            default:
                throw new ArgumentException("Invalid data type", "type");
            }
        }
示例#11
0
文件: Tag.cs 项目: safawu/project2006
        public Tag(int index, string name, WMT_ATTR_DATATYPE type, object val)
        {
            _index = index;
            _name = name.TrimEnd(new char[1]);
            _dataType = type;
            switch (type)
            {
                case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
                    _value = Convert.ToUInt32(val);
                    return;

                case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
                    _value = Convert.ToString(val).Trim();
                    return;

                case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
                    _value = (byte[]) val;
                    return;

                case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
                    _value = Convert.ToBoolean(val);
                    return;

                case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
                    _value = Convert.ToUInt64(val);
                    return;

                case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
                    _value = Convert.ToUInt16(val);
                    return;

                case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
                    _value = (Guid) val;
                    return;
            }
            throw new ArgumentException("Invalid data type", "type");
        }
        //------------------------------------------------------------------------------
        // Name: PrintAttribute()
        // Desc: Displays the specified attribute.
        //------------------------------------------------------------------------------
        void PrintAttribute( ushort wIndex,
            ushort wStream,
            string pwszName,
            WMT_ATTR_DATATYPE AttribDataType,
            ushort wLangID,
            byte[] pbValue,
            uint dwValueLen)
        {
            string pwszValue = String.Empty;

            //
            // Make the data type string
            //
            string pwszType = "Unknown";
            string[] pTypes = { "DWORD", "STRING", "BINARY", "BOOL", "QWORD", "WORD", "GUID" };

            if( pTypes.Length > Convert.ToInt32(AttribDataType) )
            {
                pwszType = pTypes[Convert.ToInt32(AttribDataType)];
            }

            //
            // The attribute value.
            //
            switch ( AttribDataType )
            {
                // String
                case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                    if ( 0 == dwValueLen )
                    {
                        pwszValue = "***** NULL *****";
                    }
                    else
                    {
                        if ( ( 0xFE == Convert.ToInt16( pbValue[0] ) ) &&
                             ( 0xFF == Convert.ToInt16( pbValue[1] ) ) )
                        {
                            pwszValue = "\"UTF-16LE BOM+\"";

                            if( 4 <= dwValueLen )
                            {
                                for ( int i = 0; i < pbValue.Length - 2; i += 2 )
                                {
                                    pwszValue += Convert.ToString( BitConverter.ToChar( pbValue, i ) );
                                }
                            }

                            pwszValue = pwszValue + "\"" ;
                        }
                        else if ( ( 0xFF == Convert.ToInt16( pbValue[0] ) ) &&
                                  ( 0xFE == Convert.ToInt16( pbValue[1] ) ) )
                        {
                            pwszValue = "\"UTF-16BE BOM+\"";
                            if( 4 <= dwValueLen )
                            {
                                for ( int i = 0; i < pbValue.Length - 2; i += 2 )
                                {
                                    pwszValue += Convert.ToString( BitConverter.ToChar( pbValue, i ) );
                                }
                            }

                            pwszValue = pwszValue + "\"" ;
                        }
                        else
                        {
                            pwszValue = "\"";
                            if( 2 <= dwValueLen )
                            {
                                for ( int i = 0; i < pbValue.Length - 2; i += 2 )
                                {
                                    pwszValue += Convert.ToString( BitConverter.ToChar( pbValue, i ) );
                                }
                            }

                            pwszValue += "\"" ;
                        }
                    }
                    break;

                // Binary
                case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:

                    pwszValue = "[" + dwValueLen.ToString() + " bytes]";
                    break;

                // Boolean
                case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

                    if ( BitConverter.ToBoolean( pbValue, 0 ) )
                    {
                        pwszValue = "True";
                    }
                    else
                    {
                        pwszValue = "False";
                    }
                    break;

                // DWORD
                case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

                    uint dwValue = BitConverter.ToUInt32( pbValue, 0 );
                    pwszValue = dwValue.ToString( );
                    break;

                // QWORD
                case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

                    ulong qwValue = BitConverter.ToUInt64( pbValue, 0 );
                    pwszValue = qwValue.ToString( );
                    break;

                // WORD
                case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

                    uint wValue = BitConverter.ToUInt16( pbValue, 0 );
                    pwszValue = wValue.ToString( );
                    break;

                // GUID
                case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_GUID:

                    pwszValue = BitConverter.ToString( pbValue, 0, pbValue.Length );
                    break;

                default:

                    break;
            }

            //
            // Dump the string to the screen.
            //
            Console.WriteLine( "* {0, 3}  {1, -25} {2, 3}  {3, 3}  {4, 7}  {5}",
                wIndex, pwszName, wStream, wLangID, pwszType, pwszValue );
        }
示例#13
0
        //------------------------------------------------------------------------------
        // Name: TranslateAttrib()
        // Desc: Converts attributes to byte arrays.
        //------------------------------------------------------------------------------
        private bool TranslateAttrib(WMT_ATTR_DATATYPE AttribDataType,
                            string pwszValue, out byte[] pbValue, out int nValueLength)
        {
            switch (AttribDataType)
              {
            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

              nValueLength = 4;
              uint[] pdwAttribValue = new uint[1] { Convert.ToUInt32(pwszValue) };

              pbValue = new Byte[nValueLength];
              Buffer.BlockCopy(pdwAttribValue, 0, pbValue, 0, nValueLength);

              return (true);

            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

              nValueLength = 2;
              ushort[] pwAttribValue = new ushort[1] { Convert.ToUInt16(pwszValue) };

              pbValue = new Byte[nValueLength];
              Buffer.BlockCopy(pwAttribValue, 0, pbValue, 0, nValueLength);

              return (true);

            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

              nValueLength = 8;
              ulong[] pqwAttribValue = new ulong[1] { Convert.ToUInt64(pwszValue) };

              pbValue = new Byte[nValueLength];
              Buffer.BlockCopy(pqwAttribValue, 0, pbValue, 0, nValueLength);

              return (true);

            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

              nValueLength = (ushort)((pwszValue.Length + 1) * 2);
              pbValue = new Byte[nValueLength];

              Buffer.BlockCopy(pwszValue.ToCharArray(), 0, pbValue, 0, pwszValue.Length * 2);
              pbValue[nValueLength - 2] = 0;
              pbValue[nValueLength - 1] = 0;

              return (true);

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

              nValueLength = 4;
              pdwAttribValue = new uint[1] { Convert.ToUInt32(pwszValue) };
              if (pdwAttribValue[0] != 0)
              {
            pdwAttribValue[0] = 1;
              }

              pbValue = new Byte[nValueLength];
              Buffer.BlockCopy(pdwAttribValue, 0, pbValue, 0, nValueLength);

              return (true);

            default:

              pbValue = null;
              nValueLength = 0;

              return (false);
              }
        }
示例#14
0
        //------------------------------------------------------------------------------
        // Name: AttrToStr()
        // Desc: Converts the attribute to a string
        //------------------------------------------------------------------------------
        private string AttrToStr(WMT_ATTR_DATATYPE AttribDataType, byte[] pbValue, uint dwValueLen)
        {
            string pwszValue = String.Empty;

              //
              // The attribute value.
              //
              switch (AttribDataType)
              {
            // String
            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

              if (0 == dwValueLen)
              {
            pwszValue = "null";
              }
              else
              {
            if ((0xFE == Convert.ToInt16(pbValue[0])) &&
                 (0xFF == Convert.ToInt16(pbValue[1])))
            {
              if (4 <= dwValueLen)
              {
                for (int i = 0; i < pbValue.Length - 2; i += 2)
                {
                  pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                }
              }
            }
            else if ((0xFF == Convert.ToInt16(pbValue[0])) &&
                      (0xFE == Convert.ToInt16(pbValue[1])))
            {
              if (4 <= dwValueLen)
              {
                for (int i = 0; i < pbValue.Length - 2; i += 2)
                {
                  pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                }
              }
            }
            else
            {
              if (2 <= dwValueLen)
              {
                for (int i = 0; i < pbValue.Length - 2; i += 2)
                {
                  pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                }
              }
            }
              }
              break;

            // Binary
            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:

              pwszValue = dwValueLen.ToString();
              break;

            // Boolean
            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

              if (BitConverter.ToBoolean(pbValue, 0))
              {
            pwszValue = "true";
              }
              else
              {
            pwszValue = "false";
              }
              break;

            // DWORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

              uint dwValue = BitConverter.ToUInt32(pbValue, 0);
              pwszValue = dwValue.ToString();
              break;

            // QWORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

              ulong qwValue = BitConverter.ToUInt64(pbValue, 0);
              pwszValue = qwValue.ToString();
              break;

            // WORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

              uint wValue = BitConverter.ToUInt16(pbValue, 0);
              pwszValue = wValue.ToString();
              break;

            // GUID
            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:

              pwszValue = BitConverter.ToString(pbValue, 0, pbValue.Length);
              break;

            default:

              break;
              }

              return pwszValue;
        }
示例#15
0
        /// <summary>
        /// Displays the specified attribute.
        /// </summary>
        /// <param name="wIndex">
        /// Index of the w. 
        /// </param>
        /// <param name="wStream">
        /// The w stream. 
        /// </param>
        /// <param name="pwszName">
        /// Name of the PWSZ. 
        /// </param>
        /// <param name="AttribDataType">
        /// Type of the attrib data. 
        /// </param>
        /// <param name="wLangID">
        /// The w lang ID. 
        /// </param>
        /// <param name="pbValue">
        /// The pb value. 
        /// </param>
        /// <param name="dwValueLen">
        /// The dw value len. 
        /// </param>
        public void PrintAttribute(
            ushort wIndex,
            ushort wStream,
            string pwszName,
            WMT_ATTR_DATATYPE AttribDataType,
            ushort wLangID,
            byte[] pbValue,
            uint dwValueLen)
        {
            string pwszValue = string.Empty;

            //
            // Make the data type string
            //
            string pwszType = "Unknown";
            string[] pTypes = { "DWORD", "STRING", "BINARY", "BOOL", "QWORD", "WORD", "GUID" };

            if (pTypes.Length > Convert.ToInt32(AttribDataType))
            {
                pwszType = pTypes[Convert.ToInt32(AttribDataType)];
            }

            //
            // The attribute value.
            //
            switch (AttribDataType)
            {
                    // String
                case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                    if (0 == dwValueLen)
                    {
                        pwszValue = "***** NULL *****";
                    }
                    else
                    {
                        if ((0xFE == Convert.ToInt16(pbValue[0])) && (0xFF == Convert.ToInt16(pbValue[1])))
                        {
                            pwszValue = "\"UTF-16LE BOM+\"";

                            if (4 <= dwValueLen)
                            {
                                for (int i = 0; i < pbValue.Length - 2; i += 2)
                                {
                                    pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                                }
                            }

                            pwszValue = pwszValue + "\"";
                        }
                        else if ((0xFF == Convert.ToInt16(pbValue[0])) && (0xFE == Convert.ToInt16(pbValue[1])))
                        {
                            pwszValue = "\"UTF-16BE BOM+\"";
                            if (4 <= dwValueLen)
                            {
                                for (int i = 0; i < pbValue.Length - 2; i += 2)
                                {
                                    pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                                }
                            }

                            pwszValue = pwszValue + "\"";
                        }
                        else
                        {
                            pwszValue = "\"";
                            if (2 <= dwValueLen)
                            {
                                for (int i = 0; i < pbValue.Length - 2; i += 2)
                                {
                                    pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                                }
                            }

                            pwszValue += "\"";
                        }
                    }

                    break;

                    // Binary
                case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:

                    pwszValue = "[" + dwValueLen.ToString() + " bytes]";
                    break;

                    // Boolean
                case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

                    if (BitConverter.ToBoolean(pbValue, 0))
                    {
                        pwszValue = "True";
                    }
                    else
                    {
                        pwszValue = "False";
                    }

                    break;

                    // DWORD
                case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

                    uint dwValue = BitConverter.ToUInt32(pbValue, 0);
                    pwszValue = dwValue.ToString();
                    break;

                    // QWORD
                case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

                    ulong qwValue = BitConverter.ToUInt64(pbValue, 0);
                    pwszValue = qwValue.ToString();
                    break;

                    // WORD
                case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

                    uint wValue = BitConverter.ToUInt16(pbValue, 0);
                    pwszValue = wValue.ToString();
                    break;

                    // GUID
                case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:

                    pwszValue = BitConverter.ToString(pbValue, 0, pbValue.Length);
                    break;

                default:

                    break;
            }

            // Add to attribute list
            var _attribute = new Attribute(
                wIndex, pwszName.Substring(0, pwszName.Length - 1), pwszValue, AttribDataType);

            // Add to list
            this._attributes.Add(_attribute);
        }
        //------------------------------------------------------------------------------
        // Name: PrintAttribute()
        // Desc: Displays the specified attribute.
        //------------------------------------------------------------------------------
        void PrintAttribute(ushort wIndex,
                            ushort wStream,
                            string pwszName,
                            WMT_ATTR_DATATYPE AttribDataType,
                            ushort wLangID,
                            byte[] pbValue,
                            uint dwValueLen)
        {
            string pwszValue = String.Empty;

            //
            // Make the data type string
            //
            string pwszType = "Unknown";

            string[] pTypes = { "DWORD", "STRING", "BINARY", "BOOL", "QWORD", "WORD", "GUID" };

            if (pTypes.Length > Convert.ToInt32(AttribDataType))
            {
                pwszType = pTypes[Convert.ToInt32(AttribDataType)];
            }

            //
            // The attribute value.
            //
            switch (AttribDataType)
            {
            // String
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                if (0 == dwValueLen)
                {
                    pwszValue = "***** NULL *****";
                }
                else
                {
                    if ((0xFE == Convert.ToInt16(pbValue[0])) &&
                        (0xFF == Convert.ToInt16(pbValue[1])))
                    {
                        pwszValue = "\"UTF-16LE BOM+\"";

                        if (4 <= dwValueLen)
                        {
                            for (int i = 0; i < pbValue.Length - 2; i += 2)
                            {
                                pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                            }
                        }

                        pwszValue = pwszValue + "\"";
                    }
                    else if ((0xFF == Convert.ToInt16(pbValue[0])) &&
                             (0xFE == Convert.ToInt16(pbValue[1])))
                    {
                        pwszValue = "\"UTF-16BE BOM+\"";
                        if (4 <= dwValueLen)
                        {
                            for (int i = 0; i < pbValue.Length - 2; i += 2)
                            {
                                pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                            }
                        }

                        pwszValue = pwszValue + "\"";
                    }
                    else
                    {
                        pwszValue = "\"";
                        if (2 <= dwValueLen)
                        {
                            for (int i = 0; i < pbValue.Length - 2; i += 2)
                            {
                                pwszValue += Convert.ToString(BitConverter.ToChar(pbValue, i));
                            }
                        }

                        pwszValue += "\"";
                    }
                }
                break;

            // Binary
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:

                pwszValue = "[" + dwValueLen.ToString() + " bytes]";
                break;

            // Boolean
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

                if (BitConverter.ToBoolean(pbValue, 0))
                {
                    pwszValue = "True";
                }
                else
                {
                    pwszValue = "False";
                }
                break;

            // DWORD
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

                uint dwValue = BitConverter.ToUInt32(pbValue, 0);
                pwszValue = dwValue.ToString( );
                break;

            // QWORD
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

                ulong qwValue = BitConverter.ToUInt64(pbValue, 0);
                pwszValue = qwValue.ToString( );
                break;

            // WORD
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

                uint wValue = BitConverter.ToUInt16(pbValue, 0);
                pwszValue = wValue.ToString( );
                break;

            // GUID
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_GUID:

                pwszValue = BitConverter.ToString(pbValue, 0, pbValue.Length);
                break;

            default:

                break;
            }

            //
            // Dump the string to the screen.
            //
            Console.WriteLine("* {0, 3}  {1, -25} {2, 3}  {3, 3}  {4, 7}  {5}",
                              wIndex, pwszName, wStream, wLangID, pwszType, pwszValue);
        }
        //------------------------------------------------------------------------------
        // Name: TranslateAttrib()
        // Desc: Converts attributes to byte arrays.
        //------------------------------------------------------------------------------
        bool TranslateAttrib(WMT_ATTR_DATATYPE AttribDataType, string pwszValue, out byte [] pbValue, out int nValueLength)
        {
            switch (AttribDataType)
            {
            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

                nValueLength = 4;
                uint[] pdwAttribValue = new uint[1] {
                    Convert.ToUInt32(pwszValue)
                };

                pbValue = new Byte[nValueLength];
                Buffer.BlockCopy(pdwAttribValue, 0, pbValue, 0, nValueLength);

                return(true);

            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

                nValueLength = 2;
                ushort[] pwAttribValue = new ushort[1] {
                    Convert.ToUInt16(pwszValue)
                };

                pbValue = new Byte[nValueLength];
                Buffer.BlockCopy(pwAttribValue, 0, pbValue, 0, nValueLength);

                return(true);

            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

                nValueLength = 8;
                ulong[] pqwAttribValue = new ulong[1] {
                    Convert.ToUInt64(pwszValue)
                };

                pbValue = new Byte[nValueLength];
                Buffer.BlockCopy(pqwAttribValue, 0, pbValue, 0, nValueLength);

                return(true);

            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                nValueLength = ( ushort )((pwszValue.Length + 1) * 2);
                pbValue      = new Byte[nValueLength];

                Buffer.BlockCopy(pwszValue.ToCharArray(), 0, pbValue, 0, pwszValue.Length * 2);
                pbValue[nValueLength - 2] = 0;
                pbValue[nValueLength - 1] = 0;

                return(true);

            case WMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

                nValueLength   = 4;
                pdwAttribValue = new uint[1] {
                    Convert.ToUInt32(pwszValue)
                };
                if (pdwAttribValue[0] != 0)
                {
                    pdwAttribValue[0] = 1;
                }

                pbValue = new Byte[nValueLength];
                Buffer.BlockCopy(pdwAttribValue, 0, pbValue, 0, nValueLength);

                return(true);

            default:

                pbValue      = null;
                nValueLength = 0;
                Console.WriteLine("Unsupported data type.");

                return(false);
            }
        }
示例#18
0
        /// <summary>
        /// Converts attributes to byte arrays.
        /// </summary>
        /// <param name="AttribDataType">
        /// Type of the attrib data. 
        /// </param>
        /// <param name="pwszValue">
        /// The PWSZ value. 
        /// </param>
        /// <param name="pbValue">
        /// The pb value. 
        /// </param>
        /// <param name="nValueLength">
        /// Length of the n value. 
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        public bool TranslateAttrib(
            WMT_ATTR_DATATYPE AttribDataType, string pwszValue, out byte[] pbValue, out int nValueLength)
        {
            switch (AttribDataType)
            {
                case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

                    nValueLength = 4;
                    var pdwAttribValue = new[] { Convert.ToUInt32(pwszValue) };

                    pbValue = new byte[nValueLength];
                    Buffer.BlockCopy(pdwAttribValue, 0, pbValue, 0, nValueLength);

                    return true;

                case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

                    nValueLength = 2;
                    var pwAttribValue = new[] { Convert.ToUInt16(pwszValue) };

                    pbValue = new byte[nValueLength];
                    Buffer.BlockCopy(pwAttribValue, 0, pbValue, 0, nValueLength);

                    return true;

                case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

                    nValueLength = 8;
                    var pqwAttribValue = new[] { Convert.ToUInt64(pwszValue) };

                    pbValue = new byte[nValueLength];
                    Buffer.BlockCopy(pqwAttribValue, 0, pbValue, 0, nValueLength);

                    return true;

                case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

                    nValueLength = (ushort)((pwszValue.Length + 1) * 2);
                    pbValue = new byte[nValueLength];

                    Buffer.BlockCopy(pwszValue.ToCharArray(), 0, pbValue, 0, pwszValue.Length * 2);
                    pbValue[nValueLength - 2] = 0;
                    pbValue[nValueLength - 1] = 0;

                    return true;

                case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

                    nValueLength = 4;
                    pdwAttribValue = new[] { Convert.ToUInt32(pwszValue) };
                    if (pdwAttribValue[0] != 0)
                    {
                        pdwAttribValue[0] = 1;
                    }

                    pbValue = new byte[nValueLength];
                    Buffer.BlockCopy(pdwAttribValue, 0, pbValue, 0, nValueLength);

                    return true;

                case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:

                    int discarded;
                    pbValue = HexEncoding.GetBytes(pwszValue, out discarded);
                    nValueLength = HexEncoding.GetByteCount(pwszValue);

                    return true;

                default:

                    pbValue = null;
                    nValueLength = 0;

                    return false;
            }
        }
示例#19
0
文件: WM_ATTR.cs 项目: tdhieu/openvss
		public WM_ATTR(string name, WMT_ATTR_DATATYPE type, object val)
		{
			_name = name;
			_dataType = type;
			_value = ConvertDataType(type, val);
		}
示例#20
0
        private object UnpackByteArray(byte[] attrValue, WMT_ATTR_DATATYPE attrType)
        {
            // Now we convert the resultant data into something
              // that can be returned, using the attributeDataType
              // value to determine its underlying type.
              switch (attrType)
              {
            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

              if (attrValue.Length < 2)
            return null;

              StringBuilder sb = new StringBuilder(attrValue.Length / 2);

              try
              {
            if (Convert.ToInt16(attrValue[0]) == 0xFE && Convert.ToInt16(attrValue[1]) == 0xFF)
            {
              // UTF-16LE
              if (attrValue.Length >= 4)
              {
                for (int i = 0; i < attrValue.Length - 2; i += 2)
                  sb.Append(BitConverter.ToChar(attrValue, i));
              }
            }
            else if (Convert.ToInt16(attrValue[0]) == 0xFF && Convert.ToInt16(attrValue[1]) == 0xFE)
            {
              // UTF-16BE
              if (attrValue.Length >= 4)
              {
                for (int i = 0; i < attrValue.Length - 2; i += 2)
                  sb.Append(BitConverter.ToChar(attrValue, i));
              }
            }
            else
            {
              for (int i = 0; i < attrValue.Length - 2; i += 2)
                sb.Append(BitConverter.ToChar(attrValue, i));
            }
              }
              catch
              {
            return string.Empty;
              }

              return sb.ToString();

            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
              return attrValue;

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
              return BitConverter.ToBoolean(attrValue, 0);

            // DWORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
              return BitConverter.ToUInt32(attrValue, 0);

            // QWORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
              return BitConverter.ToUInt64(attrValue, 0);

            // WORD
            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
              return BitConverter.ToUInt16(attrValue, 0);

            // GUID
            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
              return BitConverter.ToString(attrValue, 0, attrValue.Length);

            default:
              return null;
              }
        }
示例#21
0
 public WM_ATTR(string name, WMT_ATTR_DATATYPE type, object val)
 {
     _name     = name;
     _dataType = type;
     _value    = ConvertDataType(type, val);
 }
示例#22
0
			//------------------------------------------------------------------------------
			// Name: PrintAttribute()
			// Desc: Displays the specified attribute.
			//------------------------------------------------------------------------------
			String [] PrintAttribute (ushort wIndex,
								 ushort wStream,
								 string pwszName,
								 WMT_ATTR_DATATYPE AttribDataType,
								 ushort wLangID,
								 byte [] pbValue,
								 uint dwValueLen)
				{
				String [] Resultat = new String [6];
				string pwszValue = String.Empty;

				//
				// Make the data type string
				//
				string pwszType = "Unknown";
				string [] pTypes = { "DWORD", "STRING", "BINARY", "BOOL", "QWORD", "WORD", "GUID" };

				if (pTypes.Length > Convert.ToInt32 (AttribDataType))
					{
					pwszType = pTypes [Convert.ToInt32 (AttribDataType)];
					}

				//
				// The attribute value.
				//
				switch (AttribDataType)
					{
					// String
					case WPMediaWMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_STRING:

						if (0 == dwValueLen)
							{
							pwszValue = "***** NULL *****";
							}
						else
							{
							if ((0xFE == Convert.ToInt16 (pbValue [0])) &&
								 (0xFF == Convert.ToInt16 (pbValue [1])))
								{
								pwszValue = "\"UTF-16LE BOM+\"";

								if (4 <= dwValueLen)
									{
									for (int i = 0; i < pbValue.Length - 2; i += 2)
										{
										pwszValue += Convert.ToString (BitConverter.ToChar (pbValue, i));
										}
									}

								pwszValue = pwszValue + "\"";
								}
							else if ((0xFF == Convert.ToInt16 (pbValue [0])) &&
									  (0xFE == Convert.ToInt16 (pbValue [1])))
								{
								pwszValue = "\"UTF-16BE BOM+\"";
								if (4 <= dwValueLen)
									{
									for (int i = 0; i < pbValue.Length - 2; i += 2)
										{
										pwszValue += Convert.ToString (BitConverter.ToChar (pbValue, i));
										}
									}

								pwszValue = pwszValue + "\"";
								}
							else
								{
								pwszValue = "\"";
								if (2 <= dwValueLen)
									{
									for (int i = 0; i < pbValue.Length - 2; i += 2)
										{
										pwszValue += Convert.ToString (BitConverter.ToChar (pbValue, i));
										}
									}

								pwszValue += "\"";
								}
							}
						break;

					// Binary
					case WPMediaWMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
							{
							if (pwszName != "WM/StreamTypeInfo\0")
								pwszValue = "[" + dwValueLen.ToString () + " bytes]";
							else
								{
								int HelpIndex = 0;
								byte [] GuidArray = new byte [16];
								while (HelpIndex < 16)
									{
									GuidArray [HelpIndex] = pbValue [HelpIndex];
									HelpIndex++;
									}
								WPMediaWMFSDKWrapper.WM_STREAM_TYPE_Length LengthHelp = new WPMediaWMFSDKWrapper.WM_STREAM_TYPE_Length ();
								LengthHelp.Byte0 = pbValue [HelpIndex++];
								LengthHelp.Byte1 = pbValue [HelpIndex++];
								LengthHelp.Byte2 = pbValue [HelpIndex++];
								LengthHelp.Byte3 = pbValue [HelpIndex++];
							
								WPMediaWMFSDKWrapper.WM_STREAM_TYPE_long LongHelp = new WPMediaWMFSDKWrapper.WM_STREAM_TYPE_long ();
								
								long [] RectParameter = new long [4];
								int ParameterIndex = 0;
								while (ParameterIndex < 4)
									{
									LongHelp.Byte0 = pbValue [HelpIndex++];
									LongHelp.Byte1 = pbValue [HelpIndex++];
									LongHelp.Byte2 = pbValue [HelpIndex++];
									LongHelp.Byte3 = pbValue [HelpIndex++];
									RectParameter [ParameterIndex++] = LongHelp.LongValue;
									}

								System.Guid FormatGuid = new System.Guid (GuidArray);
								pwszValue = String.Format ("{0},{1},{2},{3},{4}", FormatGuid.ToString (),
											Convert.ToString (RectParameter [0]),
											Convert.ToString (RectParameter [1]),
											Convert.ToString (RectParameter [2]),
											Convert.ToString (RectParameter [3]));
								}
							break;
							}
					// Boolean
					case WPMediaWMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:

						if (BitConverter.ToBoolean (pbValue, 0))
							{
							pwszValue = "True";
							}
						else
							{
							pwszValue = "False";
							}
						break;

					// DWORD
					case WPMediaWMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:

						uint dwValue = BitConverter.ToUInt32 (pbValue, 0);
						pwszValue = dwValue.ToString ();
						break;

					// QWORD
					case WPMediaWMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:

						ulong qwValue = BitConverter.ToUInt64 (pbValue, 0);
						pwszValue = qwValue.ToString ();
						break;

					// WORD
					case WPMediaWMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_WORD:

						uint wValue = BitConverter.ToUInt16 (pbValue, 0);
						pwszValue = wValue.ToString ();
						break;

					// GUID
					case WPMediaWMFSDKWrapper.WMT_ATTR_DATATYPE.WMT_TYPE_GUID:

						pwszValue = BitConverter.ToString (pbValue, 0, pbValue.Length);
						break;

					default:

						break;
					}
				

				//
				// Dump the string to the screen.
				//  
				return string.Format ("{0};{1};{2};{3};{4};{5}",
					wIndex, pwszName, wStream, wLangID, pwszType, pwszValue).Split (';');
				}