SMB_COM_NT_CREATE_ANDX Response: Added support for relative time (negative value) as specified in MS-CIFS

This commit is contained in:
Tal Aloni 2017-02-07 14:08:02 +02:00
parent c46e638879
commit 3ed2bbcd1c
2 changed files with 11 additions and 7 deletions

View file

@ -45,10 +45,10 @@ namespace SMBLibrary.SMB1
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(buffer, ref parametersOffset);
LastAccessTime = FileTimeHelper.ReadNullableFileTime(buffer, ref parametersOffset);
LastWriteTime = FileTimeHelper.ReadNullableFileTime(buffer, ref parametersOffset);
LastChangeTime = FileTimeHelper.ReadNullableFileTime(buffer, ref parametersOffset);
CreateTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
LastAccessTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
LastWriteTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
LastChangeTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset);
AllocationSize = LittleEndianReader.ReadUInt64(buffer, ref parametersOffset);
EndOfFile = LittleEndianReader.ReadUInt64(buffer, ref parametersOffset);

View file

@ -13,13 +13,17 @@ namespace SMBLibrary.SMB1
{
public class SMB1Helper
{
public static DateTime ReadFileTime(byte[] buffer, int offset)
public static DateTime? ReadNullableFileTime(byte[] buffer, int offset)
{
long span = LittleEndianConverter.ToInt64(buffer, offset);
if (span >= 0)
{
return DateTime.FromFileTimeUtc(span);
}
else if (span == 0)
{
return null;
}
else
{
// Tick = 100ns
@ -27,10 +31,10 @@ namespace SMBLibrary.SMB1
}
}
public static DateTime ReadFileTime(byte[] buffer, ref int offset)
public static DateTime? ReadNullableFileTime(byte[] buffer, ref int offset)
{
offset += 8;
return ReadFileTime(buffer, offset - 8);
return ReadNullableFileTime(buffer, offset - 8);
}
/// <summary>