public override void Serialize(LittleEndianWriter writer)
        {
            int syncId = Environment.TickCount;

            writer.WriteInt(syncId);   // syncID
            writer.WriteByte((byte)1); // updating 1 unit


            uint masterMask = 0;

            for (var i = 0; i < 6; i++)
            {
                for (var j = 0; j < 32; j++)
                {
                    var rep = values[i, j];
                    if (rep == null || (!rep.Changed && partial))
                    {
                        continue;
                    }

                    masterMask |= 1u << i;
                    break;
                }
            }

            writer.WriteByte((byte)masterMask);
            writer.WriteUInt((uint)actorNetId);

            for (var i = 0; i < 6; i++)
            {
                uint fieldMask = 0;
                var  stream    = new MemoryStream();
                var  w         = new LittleEndianWriter(stream);
                for (var j = 0; j < 32; j++)
                {
                    var rep = values[i, j];
                    if (rep == null || (!rep.Changed && partial))
                    {
                        continue;
                    }

                    fieldMask |= 1u << j;
                    if (rep.IsFloat)
                    {
                        var source = BitConverter.GetBytes(rep.Value);

                        if (source[0] >= 0xFE)
                        {
                            w.WriteByte((byte)0xFE);
                        }

                        w.WriteBytes(source);
                    }
                    else
                    {
                        uint num = rep.Value;
                        while (num >= 0x80)
                        {
                            w.WriteByte((byte)(num | 0x80));
                            num >>= 7;
                        }

                        w.WriteByte((byte)num);
                    }
                }

                var data = stream.ToArray();
                if (data.Length > 0)
                {
                    writer.WriteUInt(fieldMask);
                    writer.WriteByte((byte)data.Length);
                    writer.WriteBytes(data);
                }
            }
        }
 public override void Serialize(LittleEndianWriter writer)
 {
     writer.WriteByte((byte)attackType);
     targetPosition.Serialize(writer);
     writer.WriteUInt(targetNetId);
 }
Exemple #3
0
 public override void Serialize(LittleEndianWriter writer)
 {
     writer.WriteUInt(projectileNetId);
 }
Exemple #4
0
 public override byte[] GetParameters(bool isUnicode)
 {
     byte[] parameters = new byte[ParametersLength];
     LittleEndianWriter.WriteUInt16(parameters, 0, InformationLevel);
     return(parameters);
 }
Exemple #5
0
 public void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt32(buffer, offset + 0x00, BitmapOffset);
     LittleEndianWriter.WriteUInt32(buffer, offset + 0x04, NumberOfBits);
 }
Exemple #6
0
 public void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset + 0, (ushort)Result);
     LittleEndianWriter.WriteUInt16(buffer, offset + 2, (ushort)Reason);
     TransferSyntax.WriteBytes(buffer, offset + 4);
 }
Exemple #7
0
 public override void Serialize(LittleEndianWriter writer)
 {
     writer.WriteByte(newLevel);
     writer.WriteShort(skillPoints);
 }
Exemple #8
0
 public override byte[] GetBytes()
 {
     byte[] buffer = new byte[Length];
     LittleEndianWriter.WriteInt64(buffer, 0, AllocationSize);
     return(buffer);
 }
Exemple #9
0
 public override void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt32(buffer, offset + 0, dwRowID);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, dwRowIndex);
 }
 public override void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteInt64(buffer, offset, AllocationSize);
 }
Exemple #11
0
 public override void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt32(buffer, offset + 0, (uint)AccessFlags);
 }
 public override void Serialize(LittleEndianWriter writer)
 {
     writer.WriteByte(buffSlot);
     writer.WriteUInt(buffNameHash);
     writer.WriteFloat(runTimeRemove);
 }
 /// <summary>
 /// Get file record end marker
 /// </summary>
 public static byte[] GetEndMarker()
 {
     byte[] buffer = new byte[4];
     LittleEndianWriter.WriteUInt32(buffer, 0, 0xFFFFFFFF);
     return(buffer);
 }
 public override byte[] GetBytes()
 {
     byte[] buffer = new byte[Length];
     LittleEndianWriter.WriteInt64(buffer, 0, EndOfFile);
     return(buffer);
 }
 public override void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt32(buffer, offset + 0, nidParent.Value);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, nidMsg.Value);
 }
Exemple #16
0
 public override void Serialize(LittleEndianWriter writer)
 {
     writer.WriteByte(undefined);
 }
 public static void WriteBufferPointer(byte[] buffer, int offset, ushort bufferLength, uint bufferOffset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset, bufferLength);
     LittleEndianWriter.WriteUInt16(buffer, offset + 2, bufferLength);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, bufferOffset);
 }
 public override void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt32(buffer, offset, (uint)FileMode);
 }
Exemple #19
0
 public void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset + 0x00, OpenAttributeOffset);
     LittleEndianWriter.WriteUInt16(buffer, offset + 0x02, (ushort)(Name.Length * 2));
     ByteWriter.WriteUTF16String(buffer, offset + 0x04, Name + "\0");
 }
 public override byte[] GetParameters(bool isUnicode)
 {
     byte[] parameters = new byte[2];
     LittleEndianWriter.WriteUInt16(parameters, 0, EaErrorOffset);
     return(parameters);
 }
 public override byte[] GetSetup()
 {
     byte[] setup = new byte[SetupLength];
     LittleEndianWriter.WriteUInt16(setup, 0, TransactionDataSize);
     return(setup);
 }
 public override void Serialize(LittleEndianWriter writer)
 {
     writer.WriteUInt(killerNetId);
     writer.WriteInt(0); // unks
 }
Exemple #23
0
 public override void WriteCommandBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset + 0, StructureSize);
     LittleEndianWriter.WriteUInt16(buffer, offset + 2, Reserved);
 }
Exemple #24
0
 public void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteGuidBytes(buffer, offset + 0, InterfaceUUID);
     LittleEndianWriter.WriteUInt32(buffer, offset + 16, InterfaceVersion);
 }
Exemple #25
0
 public override void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt32(buffer, offset + 0, (uint)DeviceType);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, (uint)Characteristics);
 }
 public void WriteBytes(byte[] buffer, int offset)
 {
     ByteWriter.WriteBytes(buffer, offset, key);
     LittleEndianWriter.WriteUInt32(buffer, offset + key.Length, hidNextLevel.Value);
 }
 public override void Serialize(LittleEndianWriter writer)
 {
     writer.WriteByte(slot);
     writer.WriteShort(remaining);
 }
 public override void WriteBytes(byte[] buffer, int offset)
 {
     base.WriteBytes(buffer, offset);
     LittleEndianWriter.WriteUInt32(buffer, offset + 8, DataOffset);
     LittleEndianWriter.WriteUInt32(buffer, offset + 12, DataSize);
 }
 public override void WriteBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt32(buffer, offset + 0, AlignmentRequirement);
 }
        /// <param name="segmentLength">This refers to the maximum length of FileRecord as defined in the Volume's BootRecord</param>
        public byte[] GetBytes(int segmentLength, int bytesPerCluster, ushort minorNTFSVersion)
        {
            int    strideCount             = segmentLength / MultiSectorHelper.BytesPerStride;
            ushort updateSequenceArraySize = (ushort)(1 + strideCount);

            ushort updateSequenceArrayOffset;

            if (minorNTFSVersion == 0)
            {
                updateSequenceArrayOffset = NTFS30UpdateSequenceArrayOffset;
            }
            else
            {
                updateSequenceArrayOffset = NTFS31UpdateSequenceArrayOffset;
            }

            ushort firstAttributeOffset = GetFirstAttributeOffset(segmentLength, minorNTFSVersion);

            byte[] buffer = new byte[segmentLength];
            ByteWriter.WriteAnsiString(buffer, 0, Signature, 4);
            LittleEndianWriter.WriteUInt16(buffer, 0x04, updateSequenceArrayOffset);
            LittleEndianWriter.WriteUInt16(buffer, 0x06, updateSequenceArraySize);
            LittleEndianWriter.WriteUInt64(buffer, 0x08, LogFileSequenceNumber);
            LittleEndianWriter.WriteUInt16(buffer, 0x10, SequenceNumber);
            LittleEndianWriter.WriteUInt16(buffer, 0x12, HardLinkCount);
            LittleEndianWriter.WriteUInt16(buffer, 0x14, firstAttributeOffset);
            LittleEndianWriter.WriteUInt16(buffer, 0x16, (ushort)m_flags);

            LittleEndianWriter.WriteInt32(buffer, 0x1C, segmentLength);
            LittleEndianWriter.WriteUInt64(buffer, 0x20, BaseFileRecordSegmentNumber);
            LittleEndianWriter.WriteUInt16(buffer, 0x28, NextAttributeId);
            if (minorNTFSVersion == 1)
            {
                LittleEndianWriter.WriteUInt32(buffer, 0x2C, MftSegmentNumberXP);
            }

            // write attributes
            int position = firstAttributeOffset;

            foreach (AttributeRecord attribute in m_immediateAttributes)
            {
                byte[] attributeBytes = attribute.GetBytes(bytesPerCluster);
                ByteWriter.WriteBytes(buffer, position, attributeBytes);
                position += attributeBytes.Length;
            }

            byte[] marker = GetEndMarker();
            ByteWriter.WriteBytes(buffer, position, marker);
            position += marker.Length;
            position += 4; // record (length) is aligned to 8-byte boundary

            uint segmentRealSize = (uint)position;

            LittleEndianWriter.WriteUInt32(buffer, 0x18, segmentRealSize);

            // write UpdateSequenceNumber and UpdateSequenceReplacementData
            List <byte[]> updateSequenceReplacementData = MultiSectorHelper.EncodeSegmentBuffer(buffer, 0, segmentLength, UpdateSequenceNumber);

            position = updateSequenceArrayOffset;
            LittleEndianWriter.WriteUInt16(buffer, position, UpdateSequenceNumber);
            position += 2;
            foreach (byte[] endOfSectorBytes in updateSequenceReplacementData)
            {
                ByteWriter.WriteBytes(buffer, position, endOfSectorBytes);
                position += 2;
            }

            return(buffer);
        }