Преглед на файлове

NTTransactHelper: Minor code refactoring

Tal Aloni преди 7 години
родител
ревизия
7a0b0b4a15
променени са 1 файла, в които са добавени 19 реда и са изтрити 20 реда
  1. 19 20
      SMBLibrary/Server/SMB1/NTTransactHelper.cs

+ 19 - 20
SMBLibrary/Server/SMB1/NTTransactHelper.cs

@@ -132,32 +132,31 @@ namespace SMBLibrary.Server.SMB1
         private static NTTransactIOCTLResponse GetSubcommandResponse(SMB1Header header, uint maxDataCount, NTTransactIOCTLRequest subcommand, ISMBShare share, SMB1ConnectionState state)
         {
             SMB1Session session = state.GetSession(header.UID);
-            NTTransactIOCTLResponse response = new NTTransactIOCTLResponse();
-            if (subcommand.IsFsctl)
+            if (!subcommand.IsFsctl)
             {
-                OpenFileObject openFile = session.GetOpenFileObject(subcommand.FID);
-                if (openFile == null)
-                {
-                    header.Status = NTStatus.STATUS_INVALID_HANDLE;
-                    return null;
-                }
-                int maxOutputLength = (int)maxDataCount;
-                byte[] output;
-                header.Status = share.FileStore.DeviceIOControl(openFile.Handle, subcommand.FunctionCode, subcommand.Data, out output, maxOutputLength);
-                if (header.Status != NTStatus.STATUS_SUCCESS && header.Status != NTStatus.STATUS_BUFFER_OVERFLOW)
-                {
-                    return null;
-                }
+                // [MS-SMB] If the IsFsctl field is set to zero, the server SHOULD fail the request with STATUS_NOT_SUPPORTED
+                header.Status = NTStatus.STATUS_NOT_SUPPORTED;
+                return null;
+            }
 
-                response.Data = output;
-                return response;
+            OpenFileObject openFile = session.GetOpenFileObject(subcommand.FID);
+            if (openFile == null)
+            {
+                header.Status = NTStatus.STATUS_INVALID_HANDLE;
+                return null;
             }
-            else
+
+            int maxOutputLength = (int)maxDataCount;
+            byte[] output;
+            header.Status = share.FileStore.DeviceIOControl(openFile.Handle, subcommand.FunctionCode, subcommand.Data, out output, maxOutputLength);
+            if (header.Status != NTStatus.STATUS_SUCCESS && header.Status != NTStatus.STATUS_BUFFER_OVERFLOW)
             {
-                // [MS-SMB] If the IsFsctl field is set to zero, the server SHOULD fail the request with STATUS_NOT_SUPPORTED
-                header.Status = NTStatus.STATUS_NOT_SUPPORTED;
                 return null;
             }
+
+            NTTransactIOCTLResponse response = new NTTransactIOCTLResponse();
+            response.Data = output;
+            return response;
         }
 
         internal static List<SMB1Command> GetNTTransactResponse(byte[] responseSetup, byte[] responseParameters, byte[] responseData, int maxBufferSize)