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); OpLockLevel = (OpLockLevel)ByteReader.ReadByte(this.SMBParameters, ref parametersOffset);
FID = LittleEndianReader.ReadUInt16(this.SMBParameters, ref parametersOffset); FID = LittleEndianReader.ReadUInt16(this.SMBParameters, ref parametersOffset);
CreateDisposition = (CreateDisposition)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset); CreateDisposition = (CreateDisposition)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset);
CreateTime = FileTimeHelper.ReadNullableFileTime(buffer, ref parametersOffset); CreateTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
LastAccessTime = FileTimeHelper.ReadNullableFileTime(buffer, ref parametersOffset); LastAccessTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
LastWriteTime = FileTimeHelper.ReadNullableFileTime(buffer, ref parametersOffset); LastWriteTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
LastChangeTime = FileTimeHelper.ReadNullableFileTime(buffer, ref parametersOffset); LastChangeTime = SMB1Helper.ReadNullableFileTime(buffer, ref parametersOffset);
ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset); ExtFileAttributes = (ExtendedFileAttributes)LittleEndianReader.ReadUInt32(this.SMBParameters, ref parametersOffset);
AllocationSize = LittleEndianReader.ReadUInt64(buffer, ref parametersOffset); AllocationSize = LittleEndianReader.ReadUInt64(buffer, ref parametersOffset);
EndOfFile = LittleEndianReader.ReadUInt64(buffer, ref parametersOffset); EndOfFile = LittleEndianReader.ReadUInt64(buffer, ref parametersOffset);

View file

@ -13,13 +13,17 @@ namespace SMBLibrary.SMB1
{ {
public class SMB1Helper 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); long span = LittleEndianConverter.ToInt64(buffer, offset);
if (span >= 0) if (span >= 0)
{ {
return DateTime.FromFileTimeUtc(span); return DateTime.FromFileTimeUtc(span);
} }
else if (span == 0)
{
return null;
}
else else
{ {
// Tick = 100ns // 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; offset += 8;
return ReadFileTime(buffer, offset - 8); return ReadNullableFileTime(buffer, offset - 8);
} }
/// <summary> /// <summary>