示例#1
0
        public override byte[] GetBytes(bool isUnicode)
        {
            ChallengeLength = (byte)Challenge.Length;

            SMBParameters = new byte[ParametersLength];
            LittleEndianWriter.WriteUInt16(SMBParameters, 0, DialectIndex);
            ByteWriter.WriteByte(SMBParameters, 2, (byte)SecurityMode);
            LittleEndianWriter.WriteUInt16(SMBParameters, 3, MaxMpxCount);
            LittleEndianWriter.WriteUInt16(SMBParameters, 5, MaxNumberVcs);
            LittleEndianWriter.WriteUInt32(SMBParameters, 7, MaxBufferSize);
            LittleEndianWriter.WriteUInt32(SMBParameters, 11, MaxRawSize);
            LittleEndianWriter.WriteUInt32(SMBParameters, 15, SessionKey);
            LittleEndianWriter.WriteUInt32(SMBParameters, 19, (uint)Capabilities);
            FileTimeHelper.WriteFileTime(SMBParameters, 23, SystemTime);
            LittleEndianWriter.WriteInt16(SMBParameters, 31, ServerTimeZone);
            ByteWriter.WriteByte(SMBParameters, 33, ChallengeLength);

            // [MS-CIFS] <90> Padding is not added before DomainName
            // DomainName and ServerName are always in Unicode
            SMBData = new byte[Challenge.Length + (DomainName.Length + 1) * 2 + (ServerName.Length + 1) * 2];
            int offset = 0;

            ByteWriter.WriteBytes(SMBData, ref offset, Challenge);
            SMB1Helper.WriteSMBString(SMBData, ref offset, true, DomainName);
            SMB1Helper.WriteSMBString(SMBData, ref offset, true, ServerName);

            return(base.GetBytes(isUnicode));
        }
示例#2
0
 public QueryFSVolumeInfo(byte[] buffer, int offset)
 {
     VolumeCreationTime = FileTimeHelper.ReadNullableFileTime(buffer, offset + 0);
     SerialNumber       = LittleEndianConverter.ToUInt32(buffer, offset + 8);
     VolumeLabelSize    = LittleEndianConverter.ToUInt32(buffer, offset + 12);
     Reserved           = LittleEndianConverter.ToUInt16(buffer, offset + 16);
     VolumeLabel        = ByteReader.ReadUTF16String(buffer, offset + 18, (int)VolumeLabelSize);
 }
示例#3
0
 public SetFileBasicInfo(byte[] buffer, int offset)
 {
     CreationTime      = FileTimeHelper.ReadNullableFileTime(buffer, offset + 0);
     LastAccessTime    = FileTimeHelper.ReadNullableFileTime(buffer, offset + 8);
     LastWriteTime     = FileTimeHelper.ReadNullableFileTime(buffer, offset + 16);
     LastChangeTime    = FileTimeHelper.ReadNullableFileTime(buffer, offset + 24);
     ExtFileAttributes = (ExtendedFileAttributes)LittleEndianConverter.ToUInt32(buffer, offset + 32);
     Reserved          = LittleEndianConverter.ToUInt32(buffer, offset + 36);
 }
 public QueryFileBasicInfo(byte[] buffer, int offset)
 {
     CreationTime      = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
     LastAccessTime    = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
     LastWriteTime     = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
     LastChangeTime    = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
     ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(buffer, ref offset);
     Reserved          = LittleEndianReader.ReadUInt32(buffer, ref offset);
 }
示例#5
0
 public override byte[] GetBytes()
 {
     byte[] buffer = new byte[Length];
     FileTimeHelper.WriteFileTime(buffer, 0, CreationTime);
     FileTimeHelper.WriteFileTime(buffer, 8, LastAccessTime);
     FileTimeHelper.WriteFileTime(buffer, 16, LastWriteTime);
     FileTimeHelper.WriteFileTime(buffer, 24, LastChangeTime);
     LittleEndianWriter.WriteUInt32(buffer, 32, (uint)ExtFileAttributes);
     LittleEndianWriter.WriteUInt32(buffer, 36, Reserved);
     return(buffer);
 }
示例#6
0
 public NTLMv2ClientChallenge(byte[] buffer, int offset)
 {
     CurrentVersion          = ByteReader.ReadByte(buffer, offset + 0);
     MaximumSupportedVersion = ByteReader.ReadByte(buffer, offset + 1);
     Reserved1       = LittleEndianConverter.ToUInt16(buffer, offset + 2);
     Reserved2       = LittleEndianConverter.ToUInt32(buffer, offset + 4);
     TimeStamp       = FileTimeHelper.ReadFileTime(buffer, offset + 8);
     ClientChallenge = ByteReader.ReadBytes(buffer, offset + 16, 8);
     Reserved3       = LittleEndianConverter.ToUInt32(buffer, offset + 24);
     AVPairs         = AVPairUtils.ReadAVPairSequence(buffer, offset + 28);
 }
示例#7
0
        public override byte[] GetBytes(bool isUnicode)
        {
            VolumeLabelSize = (uint)(VolumeLabel.Length * 2);

            byte[] buffer = new byte[this.Length];
            FileTimeHelper.WriteFileTime(buffer, 0, VolumeCreationTime);
            LittleEndianWriter.WriteUInt32(buffer, 8, SerialNumber);
            LittleEndianWriter.WriteUInt32(buffer, 12, VolumeLabelSize);
            LittleEndianWriter.WriteUInt16(buffer, 16, Reserved);
            ByteWriter.WriteUTF16String(buffer, 18, VolumeLabel);
            return(buffer);
        }
示例#8
0
 public override void WriteCommandBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset + 0, StructureSize);
     LittleEndianWriter.WriteUInt16(buffer, offset + 2, (ushort)Flags);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, Reserved);
     FileTimeHelper.WriteFileTime(buffer, offset + 8, CreationTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 16, LastAccessTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 24, LastWriteTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 32, ChangeTime);
     LittleEndianWriter.WriteInt64(buffer, offset + 40, AllocationSize);
     LittleEndianWriter.WriteInt64(buffer, offset + 48, EndofFile);
     LittleEndianWriter.WriteUInt32(buffer, offset + 56, (uint)FileAttributes);
 }
        public override byte[] GetBytes()
        {
            byte[] buffer = new byte[Length];
            int    offset = 0;

            FileTimeHelper.WriteFileTime(buffer, ref offset, CreationTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAccessTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastWriteTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, Reserved);
            return(buffer);
        }
示例#10
0
 public CloseResponse(byte[] buffer, int offset) : base(buffer, offset)
 {
     StructureSize  = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 0);
     Flags          = (CloseFlags)LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 2);
     Reserved       = LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 4);
     CreationTime   = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 8);
     LastAccessTime = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 16);
     LastWriteTime  = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 24);
     ChangeTime     = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 32);
     AllocationSize = LittleEndianConverter.ToInt64(buffer, offset + SMB2Header.Length + 40);
     EndofFile      = LittleEndianConverter.ToInt64(buffer, offset + SMB2Header.Length + 48);
     FileAttributes = (FileAttributes)LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 56);
 }
示例#11
0
        public FindFileDirectoryInfo(byte[] buffer, int offset, bool isUnicode) : base()
        {
            NextEntryOffset    = LittleEndianReader.ReadUInt32(buffer, ref offset);
            FileIndex          = LittleEndianReader.ReadUInt32(buffer, ref offset);
            CreationTime       = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastAccessTime     = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastWriteTime      = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastAttrChangeTime = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            EndOfFile          = LittleEndianReader.ReadInt64(buffer, ref offset);
            AllocationSize     = LittleEndianReader.ReadInt64(buffer, ref offset);
            ExtFileAttributes  = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(buffer, ref offset);
            uint fileNameLength = LittleEndianReader.ReadUInt32(buffer, ref offset);

            FileName = SMB1Helper.ReadFixedLengthString(buffer, ref offset, isUnicode, (int)fileNameLength);
        }
示例#12
0
        public byte[] GetBytes()
        {
            byte[] sequenceBytes = AVPairUtils.GetAVPairSequenceBytes(AVPairs);

            byte[] buffer = new byte[28 + sequenceBytes.Length];
            ByteWriter.WriteByte(buffer, 0, CurrentVersion);
            ByteWriter.WriteByte(buffer, 1, MaximumSupportedVersion);
            LittleEndianWriter.WriteUInt16(buffer, 2, Reserved1);
            LittleEndianWriter.WriteUInt32(buffer, 4, Reserved2);
            FileTimeHelper.WriteFileTime(buffer, 8, TimeStamp);
            ByteWriter.WriteBytes(buffer, 16, ClientChallenge, 8);
            LittleEndianWriter.WriteUInt32(buffer, 24, Reserved3);
            ByteWriter.WriteBytes(buffer, 28, sequenceBytes);
            return(buffer);
        }
示例#13
0
        public override void WriteBytes(byte[] buffer, ref int offset, bool isUnicode)
        {
            uint fileNameLength = (byte)(isUnicode ? FileName.Length * 2 : FileName.Length);

            LittleEndianWriter.WriteUInt32(buffer, ref offset, NextEntryOffset);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, FileIndex);
            FileTimeHelper.WriteFileTime(buffer, ref offset, CreationTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAccessTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastWriteTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAttrChangeTime);
            LittleEndianWriter.WriteInt64(buffer, ref offset, EndOfFile);
            LittleEndianWriter.WriteInt64(buffer, ref offset, AllocationSize);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, fileNameLength);
            SMB1Helper.WriteSMBString(buffer, ref offset, isUnicode, FileName);
        }
示例#14
0
        public NegotiateResponseExtended(byte[] buffer, int offset) : base(buffer, offset, false)
        {
            DialectIndex    = LittleEndianConverter.ToUInt16(this.SMBParameters, 0);
            SecurityMode    = (SecurityMode)ByteReader.ReadByte(this.SMBParameters, 2);
            MaxMpxCount     = LittleEndianConverter.ToUInt16(this.SMBParameters, 3);
            MaxNumberVcs    = LittleEndianConverter.ToUInt16(this.SMBParameters, 5);
            MaxBufferSize   = LittleEndianConverter.ToUInt32(this.SMBParameters, 7);
            MaxRawSize      = LittleEndianConverter.ToUInt32(this.SMBParameters, 11);
            SessionKey      = LittleEndianConverter.ToUInt32(this.SMBParameters, 15);
            Capabilities    = (Capabilities)LittleEndianConverter.ToUInt32(this.SMBParameters, 19);
            SystemTime      = FileTimeHelper.ReadFileTime(this.SMBParameters, 23);
            ServerTimeZone  = LittleEndianConverter.ToInt16(this.SMBParameters, 31);
            ChallengeLength = ByteReader.ReadByte(this.SMBParameters, 33);

            ServerGuid   = LittleEndianConverter.ToGuid(this.SMBData, 0);
            SecurityBlob = ByteReader.ReadBytes(this.SMBData, 16, this.SMBData.Length - 16);
        }
示例#15
0
        public QueryFileAllInfo(byte[] buffer, int offset)
        {
            CreationTime      = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastAccessTime    = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastWriteTime     = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastChangeTime    = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(buffer, ref offset);
            Reserved1         = LittleEndianReader.ReadUInt32(buffer, ref offset);
            AllocationSize    = LittleEndianReader.ReadInt64(buffer, ref offset);
            EndOfFile         = LittleEndianReader.ReadInt64(buffer, ref offset);
            NumberOfLinks     = LittleEndianReader.ReadUInt32(buffer, ref offset);
            DeletePending     = (ByteReader.ReadByte(buffer, ref offset) > 0);
            Directory         = (ByteReader.ReadByte(buffer, ref offset) > 0);
            Reserved2         = LittleEndianReader.ReadUInt16(buffer, ref offset);
            EaSize            = LittleEndianReader.ReadUInt32(buffer, ref offset);
            uint fileNameLength = LittleEndianReader.ReadUInt32(buffer, ref offset);

            FileName = ByteReader.ReadUTF16String(buffer, ref offset, (int)(fileNameLength / 2));
        }
示例#16
0
        public override byte[] GetBytes(bool isUnicode)
        {
            SMBParameters = new byte[ParametersLength];
            int parametersOffset = 4;

            ByteWriter.WriteByte(SMBParameters, ref parametersOffset, (byte)OpLockLevel);
            LittleEndianWriter.WriteUInt16(SMBParameters, ref parametersOffset, FID);
            LittleEndianWriter.WriteUInt32(SMBParameters, ref parametersOffset, (uint)CreateDisposition);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, CreateTime);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, LastAccessTime);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, LastWriteTime);
            FileTimeHelper.WriteFileTime(SMBParameters, ref parametersOffset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(SMBParameters, ref parametersOffset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteInt64(SMBParameters, ref parametersOffset, AllocationSize);
            LittleEndianWriter.WriteInt64(SMBParameters, ref parametersOffset, EndOfFile);
            LittleEndianWriter.WriteUInt16(SMBParameters, ref parametersOffset, (ushort)ResourceType);
            NMPipeStatus.WriteBytes(SMBParameters, ref parametersOffset);
            ByteWriter.WriteByte(SMBParameters, ref parametersOffset, Convert.ToByte(Directory));
            return(base.GetBytes(isUnicode));
        }
        public FindFileBothDirectoryInfo(byte[] buffer, ref int offset, bool isUnicode) : base(false)
        {
            NextEntryOffset   = LittleEndianReader.ReadUInt32(buffer, ref offset);
            FileIndex         = LittleEndianReader.ReadUInt32(buffer, ref offset);
            CreationTime      = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastAccessTime    = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastWriteTime     = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            LastChangeTime    = FileTimeHelper.ReadNullableFileTime(buffer, ref offset);
            EndOfFile         = LittleEndianReader.ReadInt64(buffer, ref offset);
            AllocationSize    = LittleEndianReader.ReadInt64(buffer, ref offset);
            ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(buffer, ref offset);
            uint fileNameLength = LittleEndianReader.ReadUInt32(buffer, ref offset);

            EASize = LittleEndianReader.ReadUInt32(buffer, ref offset);
            byte shortNameLength = ByteReader.ReadByte(buffer, ref offset);

            Reserved  = ByteReader.ReadByte(buffer, ref offset);
            ShortName = ByteReader.ReadUTF16String(buffer, ref offset, 12);
            ShortName = ShortName.Substring(0, shortNameLength);
            FileName  = SMB1Helper.ReadFixedLengthString(buffer, ref offset, isUnicode, (int)fileNameLength);
        }
示例#18
0
        public NegotiateResponse(byte[] buffer, int offset) : base(buffer, offset)
        {
            DialectIndex    = LittleEndianConverter.ToUInt16(SMBParameters, 0);
            SecurityMode    = (SecurityMode)ByteReader.ReadByte(SMBParameters, 2);
            MaxMpxCount     = LittleEndianConverter.ToUInt16(SMBParameters, 3);
            MaxNumberVcs    = LittleEndianConverter.ToUInt16(SMBParameters, 5);
            MaxBufferSize   = LittleEndianConverter.ToUInt32(SMBParameters, 7);
            MaxRawSize      = LittleEndianConverter.ToUInt32(SMBParameters, 11);
            SessionKey      = LittleEndianConverter.ToUInt32(SMBParameters, 15);
            Capabilities    = (Capabilities)LittleEndianConverter.ToUInt32(SMBParameters, 19);
            SystemTime      = FileTimeHelper.ReadFileTime(SMBParameters, 23);
            ServerTimeZone  = LittleEndianConverter.ToInt16(SMBParameters, 31);
            ChallengeLength = ByteReader.ReadByte(SMBParameters, 33);

            int dataOffset = 0;

            Challenge = ByteReader.ReadBytes(SMBData, ref dataOffset, ChallengeLength);
            // [MS-CIFS] <90> Padding is not added before DomainName
            // DomainName and ServerName are always in Unicode
            DomainName = SMB1Helper.ReadSMBString(SMBData, ref dataOffset, true);
            ServerName = SMB1Helper.ReadSMBString(SMBData, ref dataOffset, true);
        }
        public NTCreateAndXResponseExtended(byte[] buffer, int offset) : base(buffer, offset, false)
        {
            int parametersOffset = 4;

            OpLockLevel       = (OpLockLevel)ByteReader.ReadByte(this.SMBParameters, ref parametersOffset);
            FID               = LittleEndianReader.ReadUInt16(this.SMBParameters, ref parametersOffset);
            CreateDisposition = (CreateDisposition)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset);
            CreateTime        = FileTimeHelper.ReadNullableFileTime(this.SMBParameters, ref parametersOffset);
            LastAccessTime    = FileTimeHelper.ReadNullableFileTime(this.SMBParameters, ref parametersOffset);
            LastWriteTime     = FileTimeHelper.ReadNullableFileTime(this.SMBParameters, ref parametersOffset);
            LastChangeTime    = FileTimeHelper.ReadNullableFileTime(this.SMBParameters, ref parametersOffset);
            ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset);
            AllocationSize    = LittleEndianReader.ReadInt64(this.SMBParameters, ref parametersOffset);
            EndOfFile         = LittleEndianReader.ReadInt64(this.SMBParameters, ref parametersOffset);
            ResourceType      = (ResourceType)LittleEndianReader.ReadUInt16(this.SMBParameters, ref parametersOffset);
            NMPipeStatus_or_FileStatusFlags = LittleEndianReader.ReadUInt16(this.SMBParameters, ref parametersOffset);
            Directory                = (ByteReader.ReadByte(this.SMBParameters, ref parametersOffset) > 0);
            VolumeGuid               = LittleEndianReader.ReadGuid(this.SMBParameters, ref parametersOffset);
            FileID                   = LittleEndianReader.ReadUInt64(this.SMBParameters, ref parametersOffset);
            MaximalAccessRights      = (AccessMask)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset);
            GuestMaximalAccessRights = (AccessMask)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset);
        }
示例#20
0
 public CreateResponse(byte[] buffer, int offset) : base(buffer, offset)
 {
     StructureSize         = LittleEndianConverter.ToUInt16(buffer, offset + SMB2Header.Length + 0);
     OplockLevel           = (OplockLevel)ByteReader.ReadByte(buffer, offset + SMB2Header.Length + 2);
     Flags                 = (CreateResponseFlags)ByteReader.ReadByte(buffer, offset + SMB2Header.Length + 3);
     CreateAction          = (CreateAction)LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 4);
     CreationTime          = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 8);
     LastAccessTime        = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 16);
     LastWriteTime         = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 24);
     ChangeTime            = FileTimeHelper.ReadNullableFileTime(buffer, offset + SMB2Header.Length + 32);
     AllocationSize        = LittleEndianConverter.ToInt64(buffer, offset + SMB2Header.Length + 40);
     EndofFile             = LittleEndianConverter.ToInt64(buffer, offset + SMB2Header.Length + 48);
     FileAttributes        = (FileAttributes)LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 56);
     Reserved2             = LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 60);
     FileId                = new FileID(buffer, offset + SMB2Header.Length + 64);
     CreateContextsOffsets = LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 80);
     CreateContextsLength  = LittleEndianConverter.ToUInt32(buffer, offset + SMB2Header.Length + 84);
     if (CreateContextsLength > 0)
     {
         CreateContexts = CreateContext.ReadCreateContextList(buffer, offset + (int)CreateContextsOffsets);
     }
 }
示例#21
0
 public override void WriteCommandBytes(byte[] buffer, int offset)
 {
     LittleEndianWriter.WriteUInt16(buffer, offset + 0, StructureSize);
     ByteWriter.WriteByte(buffer, offset + 2, (byte)OplockLevel);
     ByteWriter.WriteByte(buffer, offset + 3, (byte)Flags);
     LittleEndianWriter.WriteUInt32(buffer, offset + 4, (uint)CreateAction);
     FileTimeHelper.WriteFileTime(buffer, offset + 8, CreationTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 16, LastAccessTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 24, LastWriteTime);
     FileTimeHelper.WriteFileTime(buffer, offset + 32, ChangeTime);
     LittleEndianWriter.WriteInt64(buffer, offset + 40, AllocationSize);
     LittleEndianWriter.WriteInt64(buffer, offset + 48, EndofFile);
     LittleEndianWriter.WriteUInt32(buffer, offset + 56, (uint)FileAttributes);
     LittleEndianWriter.WriteUInt32(buffer, offset + 60, Reserved2);
     FileId.WriteBytes(buffer, offset + 64);
     CreateContextsOffsets = 0;
     CreateContextsLength  = (uint)CreateContext.GetCreateContextListLength(CreateContexts);
     if (CreateContexts.Count > 0)
     {
         CreateContextsOffsets = SMB2Header.Length + 88;
         CreateContext.WriteCreateContextList(buffer, 88, CreateContexts);
     }
 }
示例#22
0
        public override byte[] GetBytes(bool isUnicode)
        {
            ChallengeLength = 0;

            this.SMBParameters = new byte[ParametersLength];
            LittleEndianWriter.WriteUInt16(this.SMBParameters, 0, DialectIndex);
            ByteWriter.WriteByte(this.SMBParameters, 2, (byte)SecurityMode);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, 3, MaxMpxCount);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, 5, MaxNumberVcs);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 7, MaxBufferSize);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 11, MaxRawSize);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 15, SessionKey);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, 19, (uint)Capabilities);
            FileTimeHelper.WriteFileTime(this.SMBParameters, 23, SystemTime);
            LittleEndianWriter.WriteInt16(this.SMBParameters, 31, ServerTimeZone);
            ByteWriter.WriteByte(this.SMBParameters, 33, ChallengeLength);

            this.SMBData = new byte[16 + SecurityBlob.Length];
            LittleEndianWriter.WriteGuid(this.SMBData, 0, ServerGuid);
            ByteWriter.WriteBytes(this.SMBData, 16, SecurityBlob);

            return(base.GetBytes(isUnicode));
        }
        public override byte[] GetBytes(bool isUnicode)
        {
            this.SMBParameters = new byte[ParametersLength];
            int parametersOffset = 4;

            ByteWriter.WriteByte(this.SMBParameters, ref parametersOffset, (byte)OpLockLevel);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, ref parametersOffset, FID);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)CreateDisposition);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, CreateTime);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, LastAccessTime);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, LastWriteTime);
            FileTimeHelper.WriteFileTime(this.SMBParameters, ref parametersOffset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteInt64(this.SMBParameters, ref parametersOffset, AllocationSize);
            LittleEndianWriter.WriteInt64(this.SMBParameters, ref parametersOffset, EndOfFile);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, ref parametersOffset, (ushort)ResourceType);
            LittleEndianWriter.WriteUInt16(this.SMBParameters, ref parametersOffset, NMPipeStatus_or_FileStatusFlags);
            ByteWriter.WriteByte(this.SMBParameters, ref parametersOffset, Convert.ToByte(Directory));
            LittleEndianWriter.WriteGuidBytes(this.SMBParameters, ref parametersOffset, VolumeGuid);
            LittleEndianWriter.WriteUInt64(this.SMBParameters, ref parametersOffset, FileID);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)MaximalAccessRights);
            LittleEndianWriter.WriteUInt32(this.SMBParameters, ref parametersOffset, (uint)GuestMaximalAccessRights);
            return(base.GetBytes(isUnicode));
        }
示例#24
0
        public override byte[] GetBytes()
        {
            uint fileNameLength = (uint)(FileName.Length * 2);

            byte[] buffer = new byte[FixedLength + fileNameLength];
            int    offset = 0;

            FileTimeHelper.WriteFileTime(buffer, ref offset, CreationTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastAccessTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastWriteTime);
            FileTimeHelper.WriteFileTime(buffer, ref offset, LastChangeTime);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)ExtFileAttributes);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, Reserved1);
            LittleEndianWriter.WriteInt64(buffer, ref offset, AllocationSize);
            LittleEndianWriter.WriteInt64(buffer, ref offset, EndOfFile);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, NumberOfLinks);
            ByteWriter.WriteByte(buffer, ref offset, Convert.ToByte(DeletePending));
            ByteWriter.WriteByte(buffer, ref offset, Convert.ToByte(Directory));
            LittleEndianWriter.WriteUInt16(buffer, ref offset, Reserved2);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, EaSize);
            LittleEndianWriter.WriteUInt32(buffer, ref offset, fileNameLength);
            ByteWriter.WriteUTF16String(buffer, ref offset, FileName);
            return(buffer);
        }