private object ReadPropertyValue(EventPropertyInfo info, IntPtr dataPtr, out string mapName, ref UInt32 length) { if (length == 0) { length = info.LengthPropertyIndex; } if (info.NonStructTypeValue.MapNameOffset != 0) { mapName = Marshal.PtrToStringUni(new IntPtr(this._address.ToInt64() + info.NonStructTypeValue.MapNameOffset)); } else { mapName = string.Empty; } switch (info.NonStructTypeValue.InType) { case TdhInType.Null: break; case TdhInType.UnicodeString: { string str = Marshal.PtrToStringUni(dataPtr); length = (UInt32)((str.Length + 1) * sizeof(char)); return str; } case TdhInType.AnsiString: { string str = Marshal.PtrToStringAnsi(dataPtr); length = (UInt32)(str.Length + 1); return str; } case TdhInType.Int8: return (sbyte)Marshal.ReadByte(dataPtr); case TdhInType.UInt8: return Marshal.ReadByte(dataPtr); case TdhInType.Int16: return Marshal.ReadInt16(dataPtr); case TdhInType.UInt16: return (UInt16)Marshal.ReadInt16(dataPtr); case TdhInType.Int32: return Marshal.ReadInt32(dataPtr); case TdhInType.UInt32: return (uint)Marshal.ReadInt32(dataPtr); case TdhInType.Int64: return Marshal.ReadInt64(dataPtr); case TdhInType.UInt64: return (ulong)Marshal.ReadInt64(dataPtr); case TdhInType.Float: Single[] singleArray = new Single[1]; Marshal.Copy(dataPtr, singleArray, 0, 1); return singleArray[0]; //return ReadFloat(dataPtr); case TdhInType.Double: return (double)Marshal.ReadInt64(dataPtr); case TdhInType.Boolean: return (bool)(Marshal.ReadInt32(dataPtr) != 0); case TdhInType.Binary: //length must come specified byte[] data = new byte[length]; Marshal.Copy(dataPtr, data, 0, (int)length); return data; case TdhInType.Guid: return new Guid( Marshal.ReadInt32(dataPtr), Marshal.ReadInt16(dataPtr, 4), Marshal.ReadInt16(dataPtr, 6), Marshal.ReadByte(dataPtr, 8), Marshal.ReadByte(dataPtr, 9), Marshal.ReadByte(dataPtr, 10), Marshal.ReadByte(dataPtr, 11), Marshal.ReadByte(dataPtr, 12), Marshal.ReadByte(dataPtr, 13), Marshal.ReadByte(dataPtr, 14), Marshal.ReadByte(dataPtr, 15) ); case TdhInType.Pointer: return Marshal.ReadIntPtr(dataPtr); case TdhInType.FileTime: return DateTime.FromFileTimeUtc(Marshal.ReadInt64(dataPtr)); case TdhInType.SystemTime: return DateTime.FromFileTime(Marshal.ReadInt64(dataPtr)); case TdhInType.SID: break; case TdhInType.HexInt32: return (UInt32)Marshal.ReadInt32(dataPtr); case TdhInType.HexInt64: return (UInt64)Marshal.ReadInt64(dataPtr); case TdhInType.CountedString: break; case TdhInType.CountedAnsiString: break; case TdhInType.ReversedCountedString: break; case TdhInType.ReversedCountedAnsiString: break; case TdhInType.NonNullTerminatedString: break; case TdhInType.NonNullTerminatedAnsiString: break; case TdhInType.UnicodeChar: break; case TdhInType.AnsiChar: break; case TdhInType.SizeT: break; case TdhInType.HexDump: break; case TdhInType.WbemSID: break; default: Debugger.Break(); break; } throw new NotSupportedException(); }
private object ReadPropertyValue(EventPropertyInfo info, IntPtr dataPtr, out string mapName, out int length) { length = info.LengthPropertyIndex; if (info.NonStructTypeValue.MapNameOffset != 0) { mapName = Marshal.PtrToStringUni(new IntPtr(this._address.ToInt64() + info.NonStructTypeValue.MapNameOffset)); } else { mapName = string.Empty; } switch (info.NonStructTypeValue.InType) { case TdhInType.Null: break; case TdhInType.UnicodeString: { string str = Marshal.PtrToStringUni(dataPtr); length = (str.Length + 1) * sizeof(char); return str; } case TdhInType.AnsiString: { string str = Marshal.PtrToStringAnsi(dataPtr); length = (str.Length + 1); return str; } case TdhInType.Int8: return (sbyte)Marshal.ReadByte(dataPtr); case TdhInType.UInt8: return Marshal.ReadByte(dataPtr); case TdhInType.Int16: return Marshal.ReadInt16(dataPtr); case TdhInType.UInt16: return (uint)Marshal.ReadInt16(dataPtr); case TdhInType.Int32: return Marshal.ReadInt32(dataPtr); case TdhInType.UInt32: return (uint)Marshal.ReadInt32(dataPtr); case TdhInType.Int64: return Marshal.ReadInt64(dataPtr); case TdhInType.UInt64: return (ulong)Marshal.ReadInt64(dataPtr); case TdhInType.Float: break; case TdhInType.Double: break; case TdhInType.Boolean: return (bool)(Marshal.ReadInt32(dataPtr) != 0); case TdhInType.Binary: break; case TdhInType.Guid: return new Guid( Marshal.ReadInt32(dataPtr), Marshal.ReadInt16(dataPtr, 4), Marshal.ReadInt16(dataPtr, 6), Marshal.ReadByte(dataPtr, 8), Marshal.ReadByte(dataPtr, 9), Marshal.ReadByte(dataPtr, 10), Marshal.ReadByte(dataPtr, 11), Marshal.ReadByte(dataPtr, 12), Marshal.ReadByte(dataPtr, 13), Marshal.ReadByte(dataPtr, 14), Marshal.ReadByte(dataPtr, 15) ); case TdhInType.Pointer: break; case TdhInType.FileTime: return DateTime.FromFileTime(Marshal.ReadInt64(dataPtr)); case TdhInType.SystemTime: break; case TdhInType.SID: break; case TdhInType.HexInt32: break; case TdhInType.HexInt64: break; case TdhInType.CountedString: break; case TdhInType.CountedAnsiString: break; case TdhInType.ReversedCountedString: break; case TdhInType.ReversedCountedAnsiString: break; case TdhInType.NonNullTerminatedString: break; case TdhInType.NonNullTerminatedAnsiString: break; case TdhInType.UnicodeChar: break; case TdhInType.AnsiChar: break; case TdhInType.SizeT: break; case TdhInType.HexDump: break; case TdhInType.WbemSID: break; default: Debugger.Break(); break; } throw new NotSupportedException(); }