Example #1
0
        public static void InitializeResourceLimit(KResourceLimit ResourceLimit)
        {
            void EnsureSuccess(KernelResult Result)
            {
                if (Result != KernelResult.Success)
                {
                    throw new InvalidOperationException($"Unexpected result \"{Result}\".");
                }
            }

            int KernelMemoryCfg = 0;

            long RamSize = GetRamSize(KernelMemoryCfg);

            EnsureSuccess(ResourceLimit.SetLimitValue(LimitableResource.Memory, RamSize));
            EnsureSuccess(ResourceLimit.SetLimitValue(LimitableResource.Thread, 800));
            EnsureSuccess(ResourceLimit.SetLimitValue(LimitableResource.Event, 700));
            EnsureSuccess(ResourceLimit.SetLimitValue(LimitableResource.TransferMemory, 200));
            EnsureSuccess(ResourceLimit.SetLimitValue(LimitableResource.Session, 900));

            if (!ResourceLimit.Reserve(LimitableResource.Memory, 0) ||
                !ResourceLimit.Reserve(LimitableResource.Memory, 0x60000))
            {
                throw new InvalidOperationException("Unexpected failure reserving memory on resource limit.");
            }
        }