Пример #1
0
 public void DecrementPagesReferenceCount(KMemoryManager manager)
 {
     foreach (var node in this)
     {
         manager.DecrementPagesReferenceCount(node.Address, node.PagesCount);
     }
 }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
 public KScopedPageList(KMemoryManager manager, KPageList pageList)
 {
     _manager  = manager;
     _pageList = pageList;
     pageList.IncrementPagesReferenceCount(manager);
 }