public void DecrementPagesReferenceCount(KMemoryManager manager) { foreach (var node in this) { manager.DecrementPagesReferenceCount(node.Address, node.PagesCount); } }
public KernelResult MapIntoProcess( KMemoryManager memoryManager, ulong address, ulong size, KProcess process, MemoryPermission permission) { ulong pagesCountRounded = BitUtils.DivRoundUp(size, KMemoryManager.PageSize); if (_pageList.GetPagesCount() != pagesCountRounded) { return(KernelResult.InvalidSize); } MemoryPermission expectedPermission = process.Pid == _ownerPid ? _ownerPermission : _userPermission; if (permission != expectedPermission) { return(KernelResult.InvalidPermission); } return(memoryManager.MapPages(address, _pageList, MemoryState.SharedMemory, permission)); }
public KernelResult UnmapFromProcess( KMemoryManager memoryManager, ulong address, ulong size, KProcess process) { ulong pagesCountRounded = BitUtils.DivRoundUp(size, KMemoryManager.PageSize); if (_pageList.GetPagesCount() != pagesCountRounded) { return(KernelResult.InvalidSize); } return(memoryManager.UnmapPages(address, _pageList, MemoryState.SharedMemory)); }
public KScopedPageList(KMemoryManager manager, KPageList pageList) { _manager = manager; _pageList = pageList; pageList.IncrementPagesReferenceCount(manager); }