public static ExtendedLimitInformation GetExtendedLimitInformation(int maximumTime, int maximumMemory)
        {
            var info = new BasicLimitInformation
            {
                LimitFlags =
                    (int)(LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY
                          //// The following two flags are causing the process to have unexpected behavior
                          //// | LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME
                          //// | LimitFlags.JOB_OBJECT_LIMIT_PROCESS_TIME
                          | LimitFlags.JOB_OBJECT_LIMIT_ACTIVE_PROCESS
                          | LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
                          | LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE),
                PerJobUserTimeLimit     = maximumTime, // TODO: Remove or rework
                PerProcessUserTimeLimit = maximumTime,
                ActiveProcessLimit      = 1,
            };

            var extendedInfo = new ExtendedLimitInformation
            {
                BasicLimitInformation = info,
                JobMemoryLimit        = (UIntPtr)maximumMemory,
                IoInfo =
                {
                    ReadTransferCount   = 0,
                    ReadOperationCount  = 0,
                    WriteOperationCount = 0,
                    WriteTransferCount  = 0
                }
            };

            return(extendedInfo);
        }
        public static ExtendedLimitInformation GetExtendedLimitInformation(int maximumTime, int maximumMemory)
        {
            var info = new BasicLimitInformation
            {
                LimitFlags = (int)
                    (LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY
                     //// The following two flags are causing the process to have unexpected behavior
                     //// | LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME
                     //// | LimitFlags.JOB_OBJECT_LIMIT_PROCESS_TIME
                     | LimitFlags.JOB_OBJECT_LIMIT_ACTIVE_PROCESS
                     | LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
                     | LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE),
                PerJobUserTimeLimit = maximumTime, // TODO: Remove or rework
                PerProcessUserTimeLimit = maximumTime,
                ActiveProcessLimit = 1,
            };

            var extendedInfo = new ExtendedLimitInformation
            {
                BasicLimitInformation = info,
                JobMemoryLimit = (UIntPtr)maximumMemory,
                IoInfo =
                {
                    ReadTransferCount = 0,
                    ReadOperationCount = 0,
                    WriteOperationCount = 0,
                    WriteTransferCount = 0
                }
            };

            return extendedInfo;
        }