private T?GetNetRateValue <T>(JobObjectNetRateControlFlags enable_flag,
                                      Func <JobObjectNetRateControlInformation, T> callback) where T : struct
        {
            var result = GetNetRateControlInformation();

            if (result.ControlFlags.HasFlag(JobObjectNetRateControlFlags.Enable) &&
                result.ControlFlags.HasFlag(enable_flag))
            {
                return(callback(result));
            }
            return(null);
        }
        private void SetNetRateValue <T>(T?value, JobObjectNetRateControlFlags enable_flag,
                                         Func <T, JobObjectNetRateControlInformation, JobObjectNetRateControlInformation> update_func) where T : struct
        {
            var result = GetNetRateControlInformation();

            if (value.HasValue)
            {
                result = update_func(value.Value, result);
                result.ControlFlags |= JobObjectNetRateControlFlags.Enable | enable_flag;
            }
            else
            {
                result.ControlFlags &= ~enable_flag;
                if (result.ControlFlags == JobObjectNetRateControlFlags.Enable)
                {
                    result.ControlFlags = JobObjectNetRateControlFlags.None;
                }
            }
            SetInfo(JobObjectInformationClass.JobObjectNetRateControlInformation, result);
        }