Added SMB_GEA_LIST / SMB_GEA structures

This commit is contained in:
Tal Aloni 2017-02-07 13:52:44 +02:00
parent cd03f7c946
commit 794b1b30e1
3 changed files with 116 additions and 0 deletions

View file

@ -0,0 +1,47 @@
/* 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.SMB1
{
/// <summary>
/// [MS-CIFS] 2.2.1.2.1 - SMB_GEA
/// </summary>
public class ExtendedAttributeName
{
private byte AttributeNameLengthInBytes;
public string AttributeName; // ANSI, AttributeNameLengthInBytes + 1 byte null termination
public ExtendedAttributeName()
{
}
public ExtendedAttributeName(byte[] buffer, int offset)
{
AttributeNameLengthInBytes = ByteReader.ReadByte(buffer, offset + 0);
AttributeName = ByteReader.ReadAnsiString(buffer, offset + 1, AttributeNameLengthInBytes);
}
public void WriteBytes(byte[] buffer, int offset)
{
AttributeNameLengthInBytes = (byte)AttributeName.Length;
ByteWriter.WriteByte(buffer, offset + 0, AttributeNameLengthInBytes);
ByteWriter.WriteAnsiString(buffer, offset + 1, AttributeName, AttributeName.Length);
}
public int Length
{
get
{
return 1 + AttributeName.Length + 1;
}
}
}
}

View file

@ -0,0 +1,67 @@
/* 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.SMB1
{
/// <summary>
/// [MS-CIFS] 2.2.1.2.1.1 - SMB_GEA_LIST
/// </summary>
public class ExtendedAttributeNameList : List<ExtendedAttributeName>
{
public ExtendedAttributeNameList()
{
}
public ExtendedAttributeNameList(byte[] buffer, int offset)
{
// [MS-CIFS] length MUST contain the total size of the GEAList field, plus the size of the SizeOfListInBytes field
int length = (int)LittleEndianConverter.ToUInt32(buffer, offset + 0);
int position = offset + 4;
int eof = offset + length;
while (position < eof)
{
ExtendedAttributeName attribute = new ExtendedAttributeName(buffer, position);
this.Add(attribute);
position += attribute.Length;
}
}
public byte[] GetBytes()
{
byte[] buffer = new byte[this.Length];
WriteBytes(buffer, 0);
return buffer;
}
public void WriteBytes(byte[] buffer, int offset)
{
LittleEndianWriter.WriteUInt32(buffer, ref offset, (uint)Length);
foreach (ExtendedAttributeName entry in this)
{
entry.WriteBytes(buffer, offset);
offset += entry.Length;
}
}
public int Length
{
get
{
int length = 4;
foreach (ExtendedAttributeName entry in this)
{
length += entry.Length;
}
return length;
}
}
}
}

View file

@ -328,6 +328,8 @@
<Compile Include="SMB1\Transaction2Subcommands\Structures\DFSReferral\DfsReferralEntry.cs" />
<Compile Include="SMB1\Transaction2Subcommands\Structures\DFSReferral\RequestGetDfsReferral.cs" />
<Compile Include="SMB1\Transaction2Subcommands\Structures\DFSReferral\ResponseGetDfsReferral.cs" />
<Compile Include="SMB1\Transaction2Subcommands\Structures\ExtendedAttributeName.cs" />
<Compile Include="SMB1\Transaction2Subcommands\Structures\ExtendedAttributeNameList.cs" />
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileBothDirectoryInfo.cs" />
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileDirectoryInfo.cs" />
<Compile Include="SMB1\Transaction2Subcommands\Structures\FindInformation\FindFileFullDirectoryInfo.cs" />