Sfoglia il codice sorgente

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

Tal Aloni 8 anni fa
parent
commit
3ed2bbcd1c

+ 4 - 4
SMBLibrary/SMB1/Commands/NTCreateAndXResponse.cs

@@ -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);

+ 7 - 3
SMBLibrary/SMB1/SMB1Helper.cs

@@ -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>