private KernelResult TerminateProcess(int handle) { KProcess process = _process.HandleTable.GetObject <KProcess>(handle); KernelResult result; if (process != null) { if (process == _system.Scheduler.GetCurrentProcess()) { result = KernelResult.Success; process.DecrementToZeroWhileTerminatingCurrent(); } else { result = process.Terminate(); process.DecrementReferenceCount(); } } else { result = KernelResult.InvalidHandle; } return(result); }
protected override void Destroy() { if (_hasBeenInitialized) { KProcess creatorProcess = ClientSession.CreatorProcess; creatorProcess.ResourceLimit?.Release(LimitableResource.Session, 1); creatorProcess.DecrementReferenceCount(); } }
protected override void Destroy() { if (_hasBeenInitialized) { if (!_isMapped && _creator.MemoryManager.UnborrowTransferMemory(Address, Size, _pageList) != KernelResult.Success) { throw new InvalidOperationException("Unexpected failure restoring transfer memory attributes."); } _creator.ResourceLimit?.Release(LimitableResource.TransferMemory, 1); _creator.DecrementReferenceCount(); } }