mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-26 02:38:15 +02:00
Removed LANMAN2.0 FileInformation structures
This commit is contained in:
parent
dabc3260be
commit
c57fed1232
23 changed files with 11 additions and 793 deletions
|
@ -3,9 +3,9 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
public enum FindInformationLevel : ushort
|
public enum FindInformationLevel : ushort
|
||||||
{
|
{
|
||||||
SMB_INFO_STANDARD = 0x0001,
|
SMB_INFO_STANDARD = 0x0001, // LANMAN2.0
|
||||||
SMB_INFO_QUERY_EA_SIZE = 0x0002,
|
SMB_INFO_QUERY_EA_SIZE = 0x0002, // LANMAN2.0
|
||||||
SMB_INFO_QUERY_EAS_FROM_LIST = 0x0003,
|
SMB_INFO_QUERY_EAS_FROM_LIST = 0x0003, // LANMAN2.0
|
||||||
SMB_FIND_FILE_DIRECTORY_INFO = 0x0101,
|
SMB_FIND_FILE_DIRECTORY_INFO = 0x0101,
|
||||||
SMB_FIND_FILE_FULL_DIRECTORY_INFO = 0x0102,
|
SMB_FIND_FILE_FULL_DIRECTORY_INFO = 0x0102,
|
||||||
SMB_FIND_FILE_NAMES_INFO = 0x0103,
|
SMB_FIND_FILE_NAMES_INFO = 0x0103,
|
||||||
|
|
|
@ -3,8 +3,8 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
public enum QueryFSInformationLevel : ushort
|
public enum QueryFSInformationLevel : ushort
|
||||||
{
|
{
|
||||||
SMB_INFO_ALLOCATION = 0x0001,
|
SMB_INFO_ALLOCATION = 0x0001, // LANMAN2.0
|
||||||
SMB_INFO_VOLUME = 0x0002,
|
SMB_INFO_VOLUME = 0x0002, // LANMAN2.0
|
||||||
SMB_QUERY_FS_VOLUME_INFO = 0x0102,
|
SMB_QUERY_FS_VOLUME_INFO = 0x0102,
|
||||||
SMB_QUERY_FS_SIZE_INFO = 0x0103,
|
SMB_QUERY_FS_SIZE_INFO = 0x0103,
|
||||||
SMB_QUERY_FS_DEVICE_INFO = 0x0104,
|
SMB_QUERY_FS_DEVICE_INFO = 0x0104,
|
||||||
|
|
|
@ -3,9 +3,9 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
public enum QueryInformationLevel : ushort
|
public enum QueryInformationLevel : ushort
|
||||||
{
|
{
|
||||||
SMB_INFO_STANDARD = 0x0001,
|
SMB_INFO_STANDARD = 0x0001, // LANMAN2.0
|
||||||
SMB_INFO_QUERY_EA_SIZE = 0x0002,
|
SMB_INFO_QUERY_EA_SIZE = 0x0002, // LANMAN2.0
|
||||||
SMB_INFO_QUERY_EAS_FROM_LIST = 0x0003,
|
SMB_INFO_QUERY_EAS_FROM_LIST = 0x0003, // LANMAN2.0
|
||||||
SMB_INFO_QUERY_ALL_EAS = 0x0004,
|
SMB_INFO_QUERY_ALL_EAS = 0x0004,
|
||||||
SMB_INFO_IS_NAME_VALID = 0x0006,
|
SMB_INFO_IS_NAME_VALID = 0x0006,
|
||||||
SMB_QUERY_FILE_BASIC_INFO = 0x0101,
|
SMB_QUERY_FILE_BASIC_INFO = 0x0101,
|
||||||
|
|
|
@ -3,8 +3,8 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
public enum SetInformationLevel : ushort
|
public enum SetInformationLevel : ushort
|
||||||
{
|
{
|
||||||
SMB_INFO_STANDARD = 0x0001,
|
SMB_INFO_STANDARD = 0x0001, // LANMAN2.0
|
||||||
SMB_INFO_SET_EAS = 0x0002,
|
SMB_INFO_SET_EAS = 0x0002, // LANMAN2.0
|
||||||
SMB_SET_FILE_BASIC_INFO = 0x0101,
|
SMB_SET_FILE_BASIC_INFO = 0x0101,
|
||||||
SMB_SET_FILE_DISPOSITION_INFO = 0x0102,
|
SMB_SET_FILE_DISPOSITION_INFO = 0x0102,
|
||||||
SMB_SET_FILE_ALLOCATION_INFO = 0x0103,
|
SMB_SET_FILE_ALLOCATION_INFO = 0x0103,
|
||||||
|
|
|
@ -1,89 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_QUERY_EA_SIZE
|
|
||||||
/// </summary>
|
|
||||||
public class FindInfoQueryEASize : FindInformation
|
|
||||||
{
|
|
||||||
public uint ResumeKey; // Optional
|
|
||||||
public DateTime CreationDateTime;
|
|
||||||
public DateTime LastAccessDateTime;
|
|
||||||
public DateTime LastWriteDateTime;
|
|
||||||
public uint FileDataSize;
|
|
||||||
public uint AllocationSize;
|
|
||||||
public SMBFileAttributes Attributes;
|
|
||||||
public uint EASize;
|
|
||||||
//byte FileNameLength; // In bytes, MUST exclude the null termination.
|
|
||||||
public string FileName; // OEM / Unicode character array. MUST be written as SMB_STRING, and read as fixed length string.
|
|
||||||
|
|
||||||
public FindInfoQueryEASize(bool returnResumeKeys) : base(returnResumeKeys)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public FindInfoQueryEASize(byte[] buffer, ref int offset, bool isUnicode, bool returnResumeKeys) : base(returnResumeKeys)
|
|
||||||
{
|
|
||||||
if (returnResumeKeys)
|
|
||||||
{
|
|
||||||
ResumeKey = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
}
|
|
||||||
CreationDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastAccessDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastWriteDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
FileDataSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
AllocationSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
Attributes = (SMBFileAttributes)LittleEndianReader.ReadUInt16(buffer, ref offset);
|
|
||||||
EASize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
byte fileNameLength = ByteReader.ReadByte(buffer, ref offset);
|
|
||||||
FileName = SMB1Helper.ReadFixedLengthString(buffer, ref offset, isUnicode, fileNameLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void WriteBytes(byte[] buffer, ref int offset, bool isUnicode)
|
|
||||||
{
|
|
||||||
byte fileNameLength = (byte)(isUnicode ? FileName.Length * 2 : FileName.Length);
|
|
||||||
|
|
||||||
if (ReturnResumeKeys)
|
|
||||||
{
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, ResumeKey);
|
|
||||||
}
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, CreationDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastAccessDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastWriteDateTime);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, FileDataSize);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, AllocationSize);
|
|
||||||
LittleEndianWriter.WriteUInt16(buffer, ref offset, (ushort)Attributes);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, EASize);
|
|
||||||
ByteWriter.WriteByte(buffer, ref offset, fileNameLength);
|
|
||||||
SMB1Helper.WriteSMBString(buffer, ref offset, isUnicode, FileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int GetLength(bool isUnicode)
|
|
||||||
{
|
|
||||||
int length = 31;
|
|
||||||
if (ReturnResumeKeys)
|
|
||||||
{
|
|
||||||
length += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isUnicode)
|
|
||||||
{
|
|
||||||
length += FileName.Length * 2 + 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
length += FileName.Length + 1;
|
|
||||||
}
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,89 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_QUERY_EAS_FROM_LIST
|
|
||||||
/// </summary>
|
|
||||||
public class FindInfoQueryExtendedAttributesFromList : FindInformation
|
|
||||||
{
|
|
||||||
public uint ResumeKey; // Optional
|
|
||||||
public DateTime CreationDateTime;
|
|
||||||
public DateTime LastAccessDateTime;
|
|
||||||
public DateTime LastWriteDateTime;
|
|
||||||
public uint FileDataSize;
|
|
||||||
public uint AllocationSize;
|
|
||||||
public SMBFileAttributes Attributes;
|
|
||||||
public FullExtendedAttributeList ExtendedAttributeList;
|
|
||||||
//byte FileNameLength; // In bytes, MUST exclude the null termination.
|
|
||||||
public string FileName; // OEM / Unicode character array. MUST be written as SMB_STRING, and read as fixed length string.
|
|
||||||
|
|
||||||
public FindInfoQueryExtendedAttributesFromList(bool returnResumeKeys) : base(returnResumeKeys)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public FindInfoQueryExtendedAttributesFromList(byte[] buffer, ref int offset, bool isUnicode, bool returnResumeKeys) : base(returnResumeKeys)
|
|
||||||
{
|
|
||||||
if (returnResumeKeys)
|
|
||||||
{
|
|
||||||
ResumeKey = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
}
|
|
||||||
CreationDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastAccessDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastWriteDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
FileDataSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
AllocationSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
Attributes = (SMBFileAttributes)LittleEndianReader.ReadUInt16(buffer, ref offset);
|
|
||||||
ExtendedAttributeList = new FullExtendedAttributeList(buffer, offset);
|
|
||||||
byte fileNameLength = ByteReader.ReadByte(buffer, ref offset);
|
|
||||||
FileName = SMB1Helper.ReadFixedLengthString(buffer, ref offset, isUnicode, fileNameLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void WriteBytes(byte[] buffer, ref int offset, bool isUnicode)
|
|
||||||
{
|
|
||||||
byte fileNameLength = (byte)(isUnicode ? FileName.Length * 2 : FileName.Length);
|
|
||||||
|
|
||||||
if (ReturnResumeKeys)
|
|
||||||
{
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, ResumeKey);
|
|
||||||
}
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, CreationDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastAccessDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastWriteDateTime);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, FileDataSize);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, AllocationSize);
|
|
||||||
LittleEndianWriter.WriteUInt16(buffer, ref offset, (ushort)Attributes);
|
|
||||||
ExtendedAttributeList.WriteBytes(buffer, ref offset);
|
|
||||||
ByteWriter.WriteByte(buffer, ref offset, fileNameLength);
|
|
||||||
SMB1Helper.WriteSMBString(buffer, ref offset, isUnicode, FileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int GetLength(bool isUnicode)
|
|
||||||
{
|
|
||||||
int length = 27 + ExtendedAttributeList.Length;
|
|
||||||
if (ReturnResumeKeys)
|
|
||||||
{
|
|
||||||
length += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isUnicode)
|
|
||||||
{
|
|
||||||
length += FileName.Length * 2 + 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
length += FileName.Length + 1;
|
|
||||||
}
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,88 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_STANDARD
|
|
||||||
/// </summary>
|
|
||||||
public class FindInfoStandard : FindInformation
|
|
||||||
{
|
|
||||||
public const int FixedLength = 23;
|
|
||||||
|
|
||||||
public uint ResumeKey; // Optional
|
|
||||||
public DateTime CreationDateTime;
|
|
||||||
public DateTime LastAccessDateTime;
|
|
||||||
public DateTime LastWriteDateTime;
|
|
||||||
public uint FileDataSize;
|
|
||||||
public uint AllocationSize;
|
|
||||||
public SMBFileAttributes Attributes;
|
|
||||||
//byte FileNameLength;
|
|
||||||
public string FileName; // SMB_STRING
|
|
||||||
|
|
||||||
public FindInfoStandard(bool returnResumeKeys) : base(returnResumeKeys)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public FindInfoStandard(byte[] buffer, ref int offset, bool isUnicode, bool returnResumeKeys) : base(returnResumeKeys)
|
|
||||||
{
|
|
||||||
if (returnResumeKeys)
|
|
||||||
{
|
|
||||||
ResumeKey = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
}
|
|
||||||
CreationDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastAccessDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastWriteDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
FileDataSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
AllocationSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
Attributes = (SMBFileAttributes)LittleEndianReader.ReadUInt16(buffer, ref offset);
|
|
||||||
byte fileNameLength = ByteReader.ReadByte(buffer, ref offset);
|
|
||||||
FileName = SMB1Helper.ReadSMBString(buffer, ref offset, isUnicode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void WriteBytes(byte[] buffer, ref int offset, bool isUnicode)
|
|
||||||
{
|
|
||||||
byte fileNameLength = (byte)(isUnicode ? FileName.Length * 2 : FileName.Length);
|
|
||||||
|
|
||||||
if (ReturnResumeKeys)
|
|
||||||
{
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, ResumeKey);
|
|
||||||
}
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, CreationDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastAccessDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastWriteDateTime);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, FileDataSize);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, AllocationSize);
|
|
||||||
LittleEndianWriter.WriteUInt16(buffer, ref offset, (ushort)Attributes);
|
|
||||||
ByteWriter.WriteByte(buffer, ref offset, fileNameLength);
|
|
||||||
SMB1Helper.WriteSMBString(buffer, ref offset, isUnicode, FileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override int GetLength(bool isUnicode)
|
|
||||||
{
|
|
||||||
int length = FixedLength;
|
|
||||||
if (ReturnResumeKeys)
|
|
||||||
{
|
|
||||||
length += 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isUnicode)
|
|
||||||
{
|
|
||||||
length += FileName.Length * 2 + 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
length += FileName.Length + 1;
|
|
||||||
}
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -35,12 +35,6 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
switch (informationLevel)
|
switch (informationLevel)
|
||||||
{
|
{
|
||||||
case FindInformationLevel.SMB_INFO_STANDARD:
|
|
||||||
return new FindInfoStandard(buffer, ref offset, isUnicode, returnResumeKeys);
|
|
||||||
case FindInformationLevel.SMB_INFO_QUERY_EA_SIZE:
|
|
||||||
return new FindInfoQueryEASize(buffer, ref offset, isUnicode, returnResumeKeys);
|
|
||||||
case FindInformationLevel.SMB_INFO_QUERY_EAS_FROM_LIST:
|
|
||||||
return new FindInfoQueryExtendedAttributesFromList(buffer, ref offset, isUnicode, returnResumeKeys);
|
|
||||||
case FindInformationLevel.SMB_FIND_FILE_DIRECTORY_INFO:
|
case FindInformationLevel.SMB_FIND_FILE_DIRECTORY_INFO:
|
||||||
return new FindFileDirectoryInfo(buffer, ref offset, isUnicode);
|
return new FindFileDirectoryInfo(buffer, ref offset, isUnicode);
|
||||||
case FindInformationLevel.SMB_FIND_FILE_FULL_DIRECTORY_INFO:
|
case FindInformationLevel.SMB_FIND_FILE_FULL_DIRECTORY_INFO:
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_ALLOCATION
|
|
||||||
/// </summary>
|
|
||||||
public class QueryFSInfoAllocation : QueryFSInformation
|
|
||||||
{
|
|
||||||
public const int Length = 18;
|
|
||||||
|
|
||||||
public uint FileSystemID; // File system identifier, Windows Server will set it to 0
|
|
||||||
public uint SectorUnit; // Number of sectors per allocation unit
|
|
||||||
public uint UnitsTotal; // Total number of allocation units
|
|
||||||
public uint UnitsAvailable; // Total number of available allocation units
|
|
||||||
public ushort Sector; // Number of bytes per sector
|
|
||||||
|
|
||||||
public QueryFSInfoAllocation()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryFSInfoAllocation(byte[] buffer, int offset)
|
|
||||||
{
|
|
||||||
FileSystemID = LittleEndianConverter.ToUInt32(buffer, offset + 0);
|
|
||||||
SectorUnit = LittleEndianConverter.ToUInt32(buffer, offset + 4);
|
|
||||||
UnitsTotal = LittleEndianConverter.ToUInt32(buffer, offset + 8);
|
|
||||||
UnitsAvailable = LittleEndianConverter.ToUInt32(buffer, offset + 12);
|
|
||||||
Sector = LittleEndianConverter.ToUInt16(buffer, offset + 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] GetBytes(bool isUnicode)
|
|
||||||
{
|
|
||||||
byte[] buffer = new byte[Length];
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, 0, FileSystemID);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, 4, SectorUnit);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, 8, UnitsTotal);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, 12, UnitsAvailable);
|
|
||||||
LittleEndianWriter.WriteUInt16(buffer, 16, Sector);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,60 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_VOLUME
|
|
||||||
/// </summary>
|
|
||||||
public class QueryFSInfoVolume : QueryFSInformation
|
|
||||||
{
|
|
||||||
public uint VolumeSerialNumber;
|
|
||||||
//byte CharCount;
|
|
||||||
public string VolumeLabel; // SMB_STRING
|
|
||||||
|
|
||||||
public QueryFSInfoVolume()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryFSInfoVolume(bool isUnicode, byte[] buffer, int offset)
|
|
||||||
{
|
|
||||||
VolumeSerialNumber = LittleEndianConverter.ToUInt32(buffer, offset + 0);
|
|
||||||
byte charCount = ByteReader.ReadByte(buffer, offset + 4);
|
|
||||||
VolumeLabel = SMB1Helper.ReadSMBString(buffer, offset + 5, isUnicode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] GetBytes(bool isUnicode)
|
|
||||||
{
|
|
||||||
byte charCount = (byte)VolumeLabel.Length;
|
|
||||||
|
|
||||||
int length = GetLength(isUnicode);
|
|
||||||
byte[] buffer = new byte[length];
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, 0, VolumeSerialNumber);
|
|
||||||
ByteWriter.WriteByte(buffer, 4, charCount);
|
|
||||||
SMB1Helper.WriteSMBString(buffer, 5, isUnicode, VolumeLabel);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int GetLength(bool isUnicode)
|
|
||||||
{
|
|
||||||
int length = 5;
|
|
||||||
if (isUnicode)
|
|
||||||
{
|
|
||||||
length += VolumeLabel.Length * 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
length += VolumeLabel.Length;
|
|
||||||
}
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -19,10 +19,6 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
switch (informationLevel)
|
switch (informationLevel)
|
||||||
{
|
{
|
||||||
case QueryFSInformationLevel.SMB_INFO_ALLOCATION:
|
|
||||||
return new QueryFSInfoAllocation(buffer, 0);
|
|
||||||
case QueryFSInformationLevel.SMB_INFO_VOLUME:
|
|
||||||
return new QueryFSInfoVolume(isUnicode, buffer, 0);
|
|
||||||
case QueryFSInformationLevel.SMB_QUERY_FS_VOLUME_INFO:
|
case QueryFSInformationLevel.SMB_QUERY_FS_VOLUME_INFO:
|
||||||
return new QueryFSVolumeInfo(buffer, 0);
|
return new QueryFSVolumeInfo(buffer, 0);
|
||||||
case QueryFSInformationLevel.SMB_QUERY_FS_SIZE_INFO:
|
case QueryFSInformationLevel.SMB_QUERY_FS_SIZE_INFO:
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_QUERY_EA_SIZE
|
|
||||||
/// </summary>
|
|
||||||
public class QueryEASize : QueryInformation
|
|
||||||
{
|
|
||||||
public const int Length = 26;
|
|
||||||
|
|
||||||
public DateTime CreationDateTime;
|
|
||||||
public DateTime LastAccessDateTime;
|
|
||||||
public DateTime LastWriteDateTime;
|
|
||||||
public uint FileDataSize;
|
|
||||||
public uint AllocationSize;
|
|
||||||
public SMBFileAttributes Attributes;
|
|
||||||
public uint EASize;
|
|
||||||
|
|
||||||
public QueryEASize()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryEASize(byte[] buffer, int offset)
|
|
||||||
{
|
|
||||||
CreationDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastAccessDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastWriteDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
FileDataSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
AllocationSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
Attributes = (SMBFileAttributes)LittleEndianReader.ReadUInt16(buffer, ref offset);
|
|
||||||
EASize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] GetBytes()
|
|
||||||
{
|
|
||||||
byte[] buffer = new byte[Length];
|
|
||||||
int offset = 0;
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, CreationDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastAccessDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastWriteDateTime);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, FileDataSize);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, AllocationSize);
|
|
||||||
LittleEndianWriter.WriteUInt16(buffer, ref offset, (ushort)Attributes);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, EASize);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override QueryInformationLevel InformationLevel
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return QueryInformationLevel.SMB_INFO_QUERY_EA_SIZE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,44 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_QUERY_EAS_FROM_LIST
|
|
||||||
/// </summary>
|
|
||||||
public class QueryExtendedAttributesFromList : QueryInformation
|
|
||||||
{
|
|
||||||
public FullExtendedAttributeList ExtendedAttributeList;
|
|
||||||
|
|
||||||
public QueryExtendedAttributesFromList()
|
|
||||||
{
|
|
||||||
ExtendedAttributeList = new FullExtendedAttributeList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryExtendedAttributesFromList(byte[] buffer, int offset)
|
|
||||||
{
|
|
||||||
ExtendedAttributeList = new FullExtendedAttributeList(buffer, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] GetBytes()
|
|
||||||
{
|
|
||||||
return ExtendedAttributeList.GetBytes();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override QueryInformationLevel InformationLevel
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return QueryInformationLevel.SMB_INFO_QUERY_EAS_FROM_LIST;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,63 +0,0 @@
|
||||||
/* Copyright (C) 2014 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_STANDARD
|
|
||||||
/// </summary>
|
|
||||||
public class QueryInfoStandard : QueryInformation
|
|
||||||
{
|
|
||||||
public const int Length = 22;
|
|
||||||
|
|
||||||
public DateTime CreationDateTime;
|
|
||||||
public DateTime LastAccessDateTime;
|
|
||||||
public DateTime LastWriteDateTime;
|
|
||||||
public uint FileDataSize;
|
|
||||||
public uint AllocationSize;
|
|
||||||
public SMBFileAttributes Attributes;
|
|
||||||
|
|
||||||
public QueryInfoStandard()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public QueryInfoStandard(byte[] buffer, int offset)
|
|
||||||
{
|
|
||||||
CreationDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastAccessDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
LastWriteDateTime = SMB1Helper.ReadSMBDateTime(buffer, ref offset);
|
|
||||||
FileDataSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
AllocationSize = LittleEndianReader.ReadUInt32(buffer, ref offset);
|
|
||||||
Attributes = (SMBFileAttributes)LittleEndianReader.ReadUInt16(buffer, ref offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] GetBytes()
|
|
||||||
{
|
|
||||||
byte[] buffer = new byte[Length];
|
|
||||||
int offset = 0;
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, CreationDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastAccessDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, ref offset, LastWriteDateTime);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, FileDataSize);
|
|
||||||
LittleEndianWriter.WriteUInt32(buffer, ref offset, AllocationSize);
|
|
||||||
LittleEndianWriter.WriteUInt16(buffer, ref offset, (ushort)Attributes);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override QueryInformationLevel InformationLevel
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return QueryInformationLevel.SMB_INFO_STANDARD;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -27,12 +27,6 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
switch (informationLevel)
|
switch (informationLevel)
|
||||||
{
|
{
|
||||||
case QueryInformationLevel.SMB_INFO_STANDARD:
|
|
||||||
return new QueryInfoStandard(buffer, 0);
|
|
||||||
case QueryInformationLevel.SMB_INFO_QUERY_EA_SIZE:
|
|
||||||
return new QueryEASize(buffer, 0);
|
|
||||||
case QueryInformationLevel.SMB_INFO_QUERY_EAS_FROM_LIST:
|
|
||||||
return new QueryExtendedAttributesFromList(buffer, 0);
|
|
||||||
case QueryInformationLevel.SMB_INFO_QUERY_ALL_EAS:
|
case QueryInformationLevel.SMB_INFO_QUERY_ALL_EAS:
|
||||||
return new QueryAllExtendedAttributes(buffer, 0);
|
return new QueryAllExtendedAttributes(buffer, 0);
|
||||||
case QueryInformationLevel.SMB_QUERY_FILE_BASIC_INFO:
|
case QueryInformationLevel.SMB_QUERY_FILE_BASIC_INFO:
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
/* Copyright (C) 2014-2017 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_SET_EAS
|
|
||||||
/// </summary>
|
|
||||||
public class SetExtendedAttributes : SetInformation
|
|
||||||
{
|
|
||||||
public FullExtendedAttributeList ExtendedAttributeList;
|
|
||||||
|
|
||||||
public SetExtendedAttributes()
|
|
||||||
{
|
|
||||||
ExtendedAttributeList = new FullExtendedAttributeList();
|
|
||||||
}
|
|
||||||
|
|
||||||
public SetExtendedAttributes(byte[] buffer) : this(buffer, 0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public SetExtendedAttributes(byte[] buffer, int offset)
|
|
||||||
{
|
|
||||||
ExtendedAttributeList = new FullExtendedAttributeList(buffer, offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] GetBytes()
|
|
||||||
{
|
|
||||||
return ExtendedAttributeList.GetBytes();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override SetInformationLevel InformationLevel
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return SetInformationLevel.SMB_INFO_SET_EAS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,61 +0,0 @@
|
||||||
/* Copyright (C) 2014-2017 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
|
|
||||||
*
|
|
||||||
* You can redistribute this program and/or modify it under the terms of
|
|
||||||
* the GNU Lesser Public License as published by the Free Software Foundation,
|
|
||||||
* either version 3 of the License, or (at your option) any later version.
|
|
||||||
*/
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using Utilities;
|
|
||||||
|
|
||||||
namespace SMBLibrary.SMB1
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// SMB_INFO_STANDARD
|
|
||||||
/// </summary>
|
|
||||||
public class SetInfoStandard : SetInformation
|
|
||||||
{
|
|
||||||
public const int Length = 22;
|
|
||||||
|
|
||||||
public DateTime CreationDateTime;
|
|
||||||
public DateTime LastAccessDateTime;
|
|
||||||
public DateTime LastWriteDateTime;
|
|
||||||
public byte[] Reserved; // 10 bytes
|
|
||||||
|
|
||||||
public SetInfoStandard()
|
|
||||||
{
|
|
||||||
Reserved = new byte[10];
|
|
||||||
}
|
|
||||||
|
|
||||||
public SetInfoStandard(byte[] buffer) : this(buffer, 0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public SetInfoStandard(byte[] buffer, int offset)
|
|
||||||
{
|
|
||||||
CreationDateTime = SMB1Helper.ReadSMBDateTime(buffer, offset + 0);
|
|
||||||
LastAccessDateTime = SMB1Helper.ReadSMBDateTime(buffer, offset + 4);
|
|
||||||
LastWriteDateTime = SMB1Helper.ReadSMBDateTime(buffer, offset + 8);
|
|
||||||
Reserved = ByteReader.ReadBytes(buffer, offset + 12, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override byte[] GetBytes()
|
|
||||||
{
|
|
||||||
byte[] buffer = new byte[Length];
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, 0, CreationDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, 4, LastAccessDateTime);
|
|
||||||
SMB1Helper.WriteSMBDateTime(buffer, 8, LastWriteDateTime);
|
|
||||||
ByteWriter.WriteBytes(buffer, 12, Reserved);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override SetInformationLevel InformationLevel
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return SetInformationLevel.SMB_INFO_STANDARD;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -24,10 +24,6 @@ namespace SMBLibrary.SMB1
|
||||||
{
|
{
|
||||||
switch (informationLevel)
|
switch (informationLevel)
|
||||||
{
|
{
|
||||||
case SetInformationLevel.SMB_INFO_STANDARD:
|
|
||||||
return new SetInfoStandard(buffer);
|
|
||||||
case SetInformationLevel.SMB_INFO_SET_EAS:
|
|
||||||
return new SetExtendedAttributes(buffer);
|
|
||||||
case SetInformationLevel.SMB_SET_FILE_BASIC_INFO:
|
case SetInformationLevel.SMB_SET_FILE_BASIC_INFO:
|
||||||
return new SetFileBasicInfo(buffer);
|
return new SetFileBasicInfo(buffer);
|
||||||
case SetInformationLevel.SMB_SET_FILE_DISPOSITION_INFO:
|
case SetInformationLevel.SMB_SET_FILE_DISPOSITION_INFO:
|
||||||
|
|
|
@ -382,23 +382,16 @@
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileDirectoryInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileDirectoryInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileFullDirectoryInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileFullDirectoryInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileNamesInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileNamesInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindInfoQueryEASize.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindInfoQueryExtendedAttributesFromList.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindInformation.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindInformation.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindInformationList.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindInformationList.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindInfoStandard.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FullExtendedAttribute.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\FullExtendedAttribute.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\FullExtendedAttributeList.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\FullExtendedAttributeList.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSAttibuteInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSAttibuteInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSDeviceInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSDeviceInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSInfoAllocation.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSInformation.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSInformation.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSInfoVolume.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSSizeInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSSizeInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSVolumeInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryFSInformation\QueryFSVolumeInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryAllExtendedAttributes.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryAllExtendedAttributes.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryEASize.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryExtendedAttributesFromList.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileAllInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileAllInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileAltNameInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileAltNameInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileBasicInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileBasicInfo.cs" />
|
||||||
|
@ -408,14 +401,11 @@
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileStandardInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileStandardInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileStreamInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryFileStreamInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryInformation.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryInformation.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\QueryInformation\QueryInfoStandard.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetExtendedAttributes.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileAllocationInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileAllocationInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileBasicInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileBasicInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileDispositionInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileDispositionInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileEndOfFileInfo.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetFileEndOfFileInfo.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetInformation.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetInformation.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Structures\SetInformation\SetInfoStandard.cs" />
|
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Transaction2CreateDirectoryRequest.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Transaction2CreateDirectoryRequest.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Transaction2CreateDirectoryResponse.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Transaction2CreateDirectoryResponse.cs" />
|
||||||
<Compile Include="SMB1\Transaction2Subcommands\Transaction2FindFirst2Request.cs" />
|
<Compile Include="SMB1\Transaction2Subcommands\Transaction2FindFirst2Request.cs" />
|
||||||
|
|
|
@ -36,43 +36,6 @@ namespace SMBLibrary.Server.SMB1
|
||||||
{
|
{
|
||||||
switch (informationLevel)
|
switch (informationLevel)
|
||||||
{
|
{
|
||||||
case FindInformationLevel.SMB_INFO_STANDARD:
|
|
||||||
{
|
|
||||||
FindInfoStandard result = new FindInfoStandard(returnResumeKeys);
|
|
||||||
result.CreationDateTime = entry.CreationTime;
|
|
||||||
result.LastAccessDateTime = entry.LastAccessTime;
|
|
||||||
result.LastWriteDateTime = entry.LastWriteTime;
|
|
||||||
result.FileDataSize = (uint)Math.Min(entry.Size, UInt32.MaxValue);
|
|
||||||
result.AllocationSize = (uint)Math.Min(NTFileSystemHelper.GetAllocationSize(entry.Size), UInt32.MaxValue);
|
|
||||||
result.Attributes = GetFileAttributes(entry);
|
|
||||||
result.FileName = entry.Name;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
case FindInformationLevel.SMB_INFO_QUERY_EA_SIZE:
|
|
||||||
{
|
|
||||||
FindInfoQueryEASize result = new FindInfoQueryEASize(returnResumeKeys);
|
|
||||||
result.CreationDateTime = entry.CreationTime;
|
|
||||||
result.LastAccessDateTime = entry.LastAccessTime;
|
|
||||||
result.LastWriteDateTime = entry.LastWriteTime;
|
|
||||||
result.FileDataSize = (uint)Math.Min(entry.Size, UInt32.MaxValue);
|
|
||||||
result.AllocationSize = (uint)Math.Min(NTFileSystemHelper.GetAllocationSize(entry.Size), UInt32.MaxValue);
|
|
||||||
result.Attributes = GetFileAttributes(entry);
|
|
||||||
result.EASize = 0;
|
|
||||||
result.FileName = entry.Name;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
case FindInformationLevel.SMB_INFO_QUERY_EAS_FROM_LIST:
|
|
||||||
{
|
|
||||||
FindInfoQueryExtendedAttributesFromList result = new FindInfoQueryExtendedAttributesFromList(returnResumeKeys);
|
|
||||||
result.CreationDateTime = entry.CreationTime;
|
|
||||||
result.LastAccessDateTime = entry.LastAccessTime;
|
|
||||||
result.LastWriteDateTime = entry.LastWriteTime;
|
|
||||||
result.FileDataSize = (uint)Math.Min(entry.Size, UInt32.MaxValue);
|
|
||||||
result.AllocationSize = (uint)Math.Min(NTFileSystemHelper.GetAllocationSize(entry.Size), UInt32.MaxValue);
|
|
||||||
result.Attributes = GetFileAttributes(entry);
|
|
||||||
result.ExtendedAttributeList = new FullExtendedAttributeList();
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
case FindInformationLevel.SMB_FIND_FILE_DIRECTORY_INFO:
|
case FindInformationLevel.SMB_FIND_FILE_DIRECTORY_INFO:
|
||||||
{
|
{
|
||||||
FindFileDirectoryInfo result = new FindFileDirectoryInfo();
|
FindFileDirectoryInfo result = new FindFileDirectoryInfo();
|
||||||
|
|
|
@ -18,35 +18,6 @@ namespace SMBLibrary.Server.SMB1
|
||||||
{
|
{
|
||||||
switch (informationLevel)
|
switch (informationLevel)
|
||||||
{
|
{
|
||||||
case QueryInformationLevel.SMB_INFO_STANDARD:
|
|
||||||
{
|
|
||||||
QueryInfoStandard information = new QueryInfoStandard();
|
|
||||||
information.CreationDateTime = entry.CreationTime;
|
|
||||||
information.LastAccessDateTime = entry.LastAccessTime;
|
|
||||||
information.LastWriteDateTime = entry.LastWriteTime;
|
|
||||||
information.FileDataSize = (uint)Math.Min(entry.Size, UInt32.MaxValue);
|
|
||||||
information.AllocationSize = (uint)Math.Min(NTFileSystemHelper.GetAllocationSize(entry.Size), UInt32.MaxValue);
|
|
||||||
result = information;
|
|
||||||
return NTStatus.STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
case QueryInformationLevel.SMB_INFO_QUERY_EA_SIZE:
|
|
||||||
{
|
|
||||||
QueryEASize information = new QueryEASize();
|
|
||||||
information.CreationDateTime = entry.CreationTime;
|
|
||||||
information.LastAccessDateTime = entry.LastAccessTime;
|
|
||||||
information.LastWriteDateTime = entry.LastWriteTime;
|
|
||||||
information.FileDataSize = (uint)Math.Min(entry.Size, UInt32.MaxValue);
|
|
||||||
information.AllocationSize = (uint)Math.Min(NTFileSystemHelper.GetAllocationSize(entry.Size), UInt32.MaxValue);
|
|
||||||
information.Attributes = GetFileAttributes(entry);
|
|
||||||
information.EASize = 0;
|
|
||||||
result = information;
|
|
||||||
return NTStatus.STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
case QueryInformationLevel.SMB_INFO_QUERY_EAS_FROM_LIST:
|
|
||||||
{
|
|
||||||
result = null;
|
|
||||||
return NTStatus.STATUS_NOT_IMPLEMENTED;
|
|
||||||
}
|
|
||||||
case QueryInformationLevel.SMB_INFO_QUERY_ALL_EAS:
|
case QueryInformationLevel.SMB_INFO_QUERY_ALL_EAS:
|
||||||
{
|
{
|
||||||
result = null;
|
result = null;
|
||||||
|
|
|
@ -18,25 +18,6 @@ namespace SMBLibrary.Server.SMB1
|
||||||
{
|
{
|
||||||
switch (informationLevel)
|
switch (informationLevel)
|
||||||
{
|
{
|
||||||
case QueryFSInformationLevel.SMB_INFO_ALLOCATION:
|
|
||||||
{
|
|
||||||
QueryFSInfoAllocation information = new QueryFSInfoAllocation();
|
|
||||||
information.FileSystemID = 0;
|
|
||||||
information.SectorUnit = NTFileSystemHelper.ClusterSize / NTFileSystemHelper.BytesPerSector;
|
|
||||||
information.UnitsTotal = (uint)Math.Min(fileSystem.Size / NTFileSystemHelper.ClusterSize, UInt32.MaxValue);
|
|
||||||
information.UnitsAvailable = (uint)Math.Min(fileSystem.FreeSpace / NTFileSystemHelper.ClusterSize, UInt32.MaxValue);
|
|
||||||
information.Sector = NTFileSystemHelper.BytesPerSector;
|
|
||||||
result = information;
|
|
||||||
return NTStatus.STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
case QueryFSInformationLevel.SMB_INFO_VOLUME:
|
|
||||||
{
|
|
||||||
QueryFSInfoVolume information = new QueryFSInfoVolume();
|
|
||||||
information.VolumeLabel = String.Empty;
|
|
||||||
information.VolumeSerialNumber = 0;
|
|
||||||
result = information;
|
|
||||||
return NTStatus.STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
case QueryFSInformationLevel.SMB_QUERY_FS_VOLUME_INFO:
|
case QueryFSInformationLevel.SMB_QUERY_FS_VOLUME_INFO:
|
||||||
{
|
{
|
||||||
QueryFSVolumeInfo information = new QueryFSVolumeInfo();
|
QueryFSVolumeInfo information = new QueryFSVolumeInfo();
|
||||||
|
|
|
@ -17,15 +17,7 @@ namespace SMBLibrary.Server.SMB1
|
||||||
{
|
{
|
||||||
public static NTStatus SetFileInformation(IFileSystem fileSystem, OpenFileObject openFile, SetInformation information, ConnectionState state)
|
public static NTStatus SetFileInformation(IFileSystem fileSystem, OpenFileObject openFile, SetInformation information, ConnectionState state)
|
||||||
{
|
{
|
||||||
if (information is SetInfoStandard)
|
if (information is SetFileBasicInfo)
|
||||||
{
|
|
||||||
return NTStatus.STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
else if (information is SetExtendedAttributes)
|
|
||||||
{
|
|
||||||
return NTStatus.STATUS_NOT_IMPLEMENTED;
|
|
||||||
}
|
|
||||||
else if (information is SetFileBasicInfo)
|
|
||||||
{
|
{
|
||||||
SetFileBasicInfo basicInfo = (SetFileBasicInfo)information;
|
SetFileBasicInfo basicInfo = (SetFileBasicInfo)information;
|
||||||
bool isHidden = (basicInfo.ExtFileAttributes & ExtendedFileAttributes.Hidden) > 0;
|
bool isHidden = (basicInfo.ExtFileAttributes & ExtendedFileAttributes.Hidden) > 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue