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; }
/// <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"); } }
/// <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; }
/// <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"); } }
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); } }
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); }
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"); } }
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 ); }
//------------------------------------------------------------------------------ // 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); } }
//------------------------------------------------------------------------------ // 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; }
/// <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); } }
/// <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; } }
public WM_ATTR(string name, WMT_ATTR_DATATYPE type, object val) { _name = name; _dataType = type; _value = ConvertDataType(type, val); }
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; } }
//------------------------------------------------------------------------------ // 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 (';'); }