mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-04-30 02:37:49 +02:00
95 lines
4.8 KiB
C#
95 lines
4.8 KiB
C#
/* Copyright (C) 2017-2021 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 Utilities;
|
|
|
|
namespace SMBLibrary
|
|
{
|
|
public abstract class FileInformation
|
|
{
|
|
public abstract void WriteBytes(byte[] buffer, int offset);
|
|
|
|
public byte[] GetBytes()
|
|
{
|
|
byte[] buffer = new byte[this.Length];
|
|
WriteBytes(buffer, 0);
|
|
return buffer;
|
|
}
|
|
|
|
public abstract FileInformationClass FileInformationClass
|
|
{
|
|
get;
|
|
}
|
|
|
|
public abstract int Length
|
|
{
|
|
get;
|
|
}
|
|
|
|
public static FileInformation GetFileInformation(byte[] buffer, int offset, FileInformationClass informationClass)
|
|
{
|
|
switch (informationClass)
|
|
{
|
|
case FileInformationClass.FileBasicInformation:
|
|
return new FileBasicInformation(buffer, offset);
|
|
case FileInformationClass.FileStandardInformation:
|
|
return new FileStandardInformation(buffer, offset);
|
|
case FileInformationClass.FileInternalInformation:
|
|
return new FileInternalInformation(buffer, offset);
|
|
case FileInformationClass.FileEaInformation:
|
|
return new FileEaInformation(buffer, offset);
|
|
case FileInformationClass.FileAccessInformation:
|
|
return new FileAccessInformation(buffer, offset);
|
|
case FileInformationClass.FileRenameInformation:
|
|
return new FileRenameInformationType2(buffer, offset);
|
|
case FileInformationClass.FileLinkInformation:
|
|
return new FileLinkInformationType2(buffer, offset);
|
|
case FileInformationClass.FileNamesInformation:
|
|
throw new NotImplementedException();
|
|
case FileInformationClass.FileDispositionInformation:
|
|
return new FileDispositionInformation(buffer, offset);
|
|
case FileInformationClass.FilePositionInformation:
|
|
return new FilePositionInformation(buffer, offset);
|
|
case FileInformationClass.FileFullEaInformation:
|
|
return new FileFullEAInformation(buffer, offset);
|
|
case FileInformationClass.FileModeInformation:
|
|
return new FileModeInformation(buffer, offset);
|
|
case FileInformationClass.FileAlignmentInformation:
|
|
return new FileAlignmentInformation(buffer, offset);
|
|
case FileInformationClass.FileAllInformation:
|
|
return new FileAllInformation(buffer, offset);
|
|
case FileInformationClass.FileAllocationInformation:
|
|
return new FileAllocationInformation(buffer, offset);
|
|
case FileInformationClass.FileEndOfFileInformation:
|
|
return new FileEndOfFileInformation(buffer, offset);
|
|
case FileInformationClass.FileAlternateNameInformation:
|
|
return new FileAlternateNameInformation(buffer, offset);
|
|
case FileInformationClass.FileStreamInformation:
|
|
return new FileStreamInformation(buffer, offset);
|
|
case FileInformationClass.FilePipeInformation:
|
|
throw new NotImplementedException();
|
|
case FileInformationClass.FilePipeLocalInformation:
|
|
throw new NotImplementedException();
|
|
case FileInformationClass.FilePipeRemoteInformation:
|
|
throw new NotImplementedException();
|
|
case FileInformationClass.FileCompressionInformation:
|
|
return new FileCompressionInformation(buffer, offset);
|
|
case FileInformationClass.FileNetworkOpenInformation:
|
|
return new FileNetworkOpenInformation(buffer, offset);
|
|
case FileInformationClass.FileAttributeTagInformation:
|
|
return new FileAttributeTagInformation(buffer, offset);
|
|
case FileInformationClass.FileValidDataLengthInformation:
|
|
return new FileValidDataLengthInformation(buffer, offset);
|
|
case FileInformationClass.FileShortNameInformation:
|
|
throw new NotImplementedException();
|
|
default:
|
|
throw new UnsupportedInformationLevelException(String.Format("Unsupported information class: {0}", informationClass));
|
|
}
|
|
}
|
|
}
|
|
}
|