mirror of
https://github.com/TalAloni/SMBLibrary.git
synced 2025-07-21 16:55:54 +02:00
NTFileStore: Added FileLinkInformationType1 and FileRenameInformationType1 implementations
This commit is contained in:
parent
7a6469f3c2
commit
09419f145f
5 changed files with 150 additions and 0 deletions
|
@ -0,0 +1,69 @@
|
|||
/* Copyright (C) 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
|
||||
{
|
||||
/// <summary>
|
||||
/// [MS-FSCC] 2.4.21.1 - FileLinkInformation Type 1
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// [MS-FSA] 2.1.5.14.6
|
||||
/// FILE_LINK_INFORMATION_TYPE_1: Used for 32-bit local clients.
|
||||
/// FILE_LINK_INFORMATION_TYPE_2: Used for remote clients or 64-bit local clients.
|
||||
/// </remarks>
|
||||
public class FileLinkInformationType1 : FileInformation
|
||||
{
|
||||
public const int FixedLength = 12;
|
||||
|
||||
public bool ReplaceIfExists;
|
||||
// 3 reserved bytes
|
||||
public uint RootDirectory;
|
||||
private uint FileNameLength;
|
||||
public string FileName = String.Empty;
|
||||
|
||||
public FileLinkInformationType1()
|
||||
{
|
||||
}
|
||||
|
||||
public FileLinkInformationType1(byte[] buffer, int offset)
|
||||
{
|
||||
ReplaceIfExists = Conversion.ToBoolean(ByteReader.ReadByte(buffer, offset + 0));
|
||||
RootDirectory = LittleEndianConverter.ToUInt32(buffer, offset + 4);
|
||||
FileNameLength = LittleEndianConverter.ToUInt32(buffer, offset + 8);
|
||||
FileName = ByteReader.ReadUTF16String(buffer, offset + 12, (int)FileNameLength / 2);
|
||||
}
|
||||
|
||||
public override void WriteBytes(byte[] buffer, int offset)
|
||||
{
|
||||
FileNameLength = (uint)(FileName.Length * 2);
|
||||
ByteWriter.WriteByte(buffer, offset + 0, Convert.ToByte(ReplaceIfExists));
|
||||
LittleEndianWriter.WriteUInt32(buffer, offset + 4, RootDirectory);
|
||||
LittleEndianWriter.WriteUInt32(buffer, offset + 8, FileNameLength);
|
||||
ByteWriter.WriteUTF16String(buffer, offset + 12, FileName);
|
||||
}
|
||||
|
||||
public override FileInformationClass FileInformationClass
|
||||
{
|
||||
get
|
||||
{
|
||||
return FileInformationClass.FileLinkInformation;
|
||||
}
|
||||
}
|
||||
|
||||
public override int Length
|
||||
{
|
||||
get
|
||||
{
|
||||
return FixedLength + FileName.Length * 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,6 +14,11 @@ namespace SMBLibrary
|
|||
/// <summary>
|
||||
/// [MS-FSCC] 2.4.21.2 - FileLinkInformation Type 2
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// [MS-FSA] 2.1.5.14.6
|
||||
/// FILE_LINK_INFORMATION_TYPE_1: Used for 32-bit local clients.
|
||||
/// FILE_LINK_INFORMATION_TYPE_2: Used for remote clients or 64-bit local clients.
|
||||
/// </remarks>
|
||||
public class FileLinkInformationType2 : FileInformation
|
||||
{
|
||||
public const int FixedLength = 20;
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
/* Copyright (C) 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
|
||||
{
|
||||
/// <summary>
|
||||
/// [MS-FSCC] 2.4.34.1 - FileRenameInformation Type 1
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// [MS-FSA] 2.1.5.14.11
|
||||
/// FILE_RENAME_INFORMATION_TYPE_1: Used for 32-bit local clients.
|
||||
/// FILE_RENAME_INFORMATION_TYPE_2: Used for remote clients or 64-bit local clients.
|
||||
/// </remarks>
|
||||
public class FileRenameInformationType1 : FileInformation
|
||||
{
|
||||
public const int FixedLength = 12;
|
||||
|
||||
public bool ReplaceIfExists;
|
||||
// 3 reserved bytes
|
||||
public uint RootDirectory;
|
||||
private uint FileNameLength;
|
||||
public string FileName = String.Empty;
|
||||
|
||||
public FileRenameInformationType1()
|
||||
{
|
||||
}
|
||||
|
||||
public FileRenameInformationType1(byte[] buffer, int offset)
|
||||
{
|
||||
ReplaceIfExists = Conversion.ToBoolean(ByteReader.ReadByte(buffer, offset + 0));
|
||||
RootDirectory = LittleEndianConverter.ToUInt32(buffer, offset + 4);
|
||||
FileNameLength = LittleEndianConverter.ToUInt32(buffer, offset + 8);
|
||||
FileName = ByteReader.ReadUTF16String(buffer, offset + 12, (int)FileNameLength / 2);
|
||||
}
|
||||
|
||||
public override void WriteBytes(byte[] buffer, int offset)
|
||||
{
|
||||
FileNameLength = (uint)(FileName.Length * 2);
|
||||
ByteWriter.WriteByte(buffer, offset + 0, Convert.ToByte(ReplaceIfExists));
|
||||
LittleEndianWriter.WriteUInt32(buffer, offset + 4, RootDirectory);
|
||||
LittleEndianWriter.WriteUInt32(buffer, offset + 8, FileNameLength);
|
||||
ByteWriter.WriteUTF16String(buffer, offset + 12, FileName);
|
||||
}
|
||||
|
||||
public override FileInformationClass FileInformationClass
|
||||
{
|
||||
get
|
||||
{
|
||||
return FileInformationClass.FileRenameInformation;
|
||||
}
|
||||
}
|
||||
|
||||
public override int Length
|
||||
{
|
||||
get
|
||||
{
|
||||
return FixedLength + FileName.Length * 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,6 +14,11 @@ namespace SMBLibrary
|
|||
/// <summary>
|
||||
/// [MS-FSCC] 2.4.34.2 - FileRenameInformation Type 2
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// [MS-FSA] 2.1.5.14.11
|
||||
/// FILE_RENAME_INFORMATION_TYPE_1: Used for 32-bit local clients.
|
||||
/// FILE_RENAME_INFORMATION_TYPE_2: Used for remote clients or 64-bit local clients.
|
||||
/// </remarks>
|
||||
public class FileRenameInformationType2 : FileInformation
|
||||
{
|
||||
public const int FixedLength = 20;
|
||||
|
|
|
@ -142,7 +142,9 @@
|
|||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileDispositionInformation.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileEndOfFileInformation.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileFullEAInformation.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileLinkInformationType1.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileLinkInformationType2.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileRenameInformationType1.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileRenameInformationType2.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileInformation\Set\FileValidDataLengthInformation.cs" />
|
||||
<Compile Include="NTFileStore\Structures\FileNotifyInformation.cs" />
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue