首页 > 其他分享 >ReactOS系统中平衡二叉树。给定地址超导其所属区块MmFindRegion()

ReactOS系统中平衡二叉树。给定地址超导其所属区块MmFindRegion()

时间:2024-10-24 12:21:26浏览次数:8  
标签:区块 ReactOS REGION current 二叉树 MmFindRegion StartAddress entry PVOID

系列文章目录

PMM_REGION NTAPI MmFindRegion(
PVOID BaseAddress,
PLIST_ENTRY RegionListHead,
PVOID Address,
PVOID* RegionBaseAddress
);

宏函数
//给定地址找到其中所属区块

#define CONTAINING_RECORD(address,type,field) ((type FAR *\
    (PCHAR)(address)-(PCHAR)(&((type *)0)->field)))获取外层数据结构的指针
    ```
@[TOC](文章目录)

---

# MmFindRegion()
```c
//给定地址超导其所属区块
PMM_REGION NTAPI 
MmFindRegion(PVOID BaseAddress, PLIST_ENTRY RegionListHead,
    PVOID Address, PVOID * RegionBaseAddress)
{
    PLIST_ENTRY current_entry;
    PMM_REGION current;
    PVOID StartAddress = BaseAddress;//搜索的起点
    current_entry = RegionListHead->Flink;//获得第一个MM REGION区块指针
    while (current_entry != RegionListHead)//遍历一个MEMORY AREA即某个区间的区块双向链表
    {
        //curren获得该指向该结构的首地址
        current = CONTAINING_RECORD(current entry, MM REGION, RegionListEntry);
        //若目标地址在(StartAddress ~startAddress+current->Length)说明找到了该地址所在区块
        if (StartAddress <= Address &&
            ((char*)StartAddresS + current->Length) > (char*)Address) {//找到了
            if (RegionBaseAddress != NULL)
                *RegionBaseAddress = StartAddress;//将区块开始地址给RegionBaseAddress返回return(current);//返回该区块的结构信息
            currententry = current_entry->Flink://下一个区块StartAddress =(PVOID)((ULONG PTR)StartAddress + current->Length);
            return(NULL);
        }
        current_entry = current_entry->Flink;//下一个区块
        StartAddress = (PVOID)((ULONG_PTR)StartAddress + current->Length);
    }
    return (NULL);
}
c

标签:区块,ReactOS,REGION,current,二叉树,MmFindRegion,StartAddress,entry,PVOID
From: https://blog.csdn.net/zhyjhacker/article/details/143205941

相关文章

  • 力扣 简单 111.二叉树的最小深度
    文章目录题目介绍题解题目介绍题解最小深度:从根节点到最近叶子结点的最短路径上节点数量。分三种情况讨论即可:当前节点为空,则返回当前节点minDepth=0;当前节点左右子树都存在,则返回当前节点minDepth=左右子树最小深度的最小值+1;当前节点的左右子树其中一个不存......
  • 二叉树路径问题模板总结
    二叉树路径问题模板总结文章目录二叉树路径问题模板总结问题分类1、自顶向下257.二叉树的所有路径112.路径总和113.路径总和II437.路径总和III面试题04.12.求和路径998.从叶节点开始的最小字符串2、非自顶向下543.二叉树的直径124.二叉树中的最大路径和687.最长同值路径......
  • P1040 [NOIP2003 提高组] 加分二叉树
    P1040[NOIP2003提高组]加分二叉树题目描述设一个\(n\)个节点的二叉树\(\text{tree}\)的中序遍历为\((1,2,3,\ldots,n)\),其中数字\(1,2,3,\ldots,n\)为节点编号。每个节点都有一个分数(均为正整数),记第\(i\)个节点的分数为\(d_i\),\(\text{tree}\)及它的每个子树都有一......
  • 全局平衡二叉树学习笔记
    先挂一张jijidawang的图所以学这玩意就是被TopTree薄纱的有人把这玩意叫静态的LCT,然而可能只需要一些LCT的知识,并不需要会LCT。起码我不会注意这叫GBT,不叫GPT,能聊天的那个是CatGPT,不是CatGBT。前置知识:树链剖分用途\(O(\logn)\)处理树上链修改、链查询、子树修改、子树查......
  • 10/22二叉树 求度为1的结点个数
    includeusingnamespacestd;typedefstructBiNode{chardata;structBiNode*lchild,*rchild;}BiTNode,*BiTree;voidCreateBiTree(BiTree&T)//创建一个二叉树{charch;cin>>ch;if(ch=='#')T=NULL;else{T=newBiTNode;T->da......
  • 10.22随笔,二叉树求度为一的节点的个数
    今天去健身房锻炼了身体这是关于二叉树如何求度为一的节点的个数,同理还能求度为零和二的,不难。还又复习了一遍前序中序后续的遍历方法,已经可以由任意两种推出二叉树结构了,不过二叉树的样子和模式我还是有点不太能和代码结合去理解,还需要多加练习include<stdio.h>include<std......
  • 计算法统计二叉树中度为1的节点个数
    最近学习有关于二叉树类的知识,学习时使用的是C语言。代码如下:include<stdio.h>include<stdlib.h>//添加这一行,包含malloc的声明typedefstructTreeNode{intval;structTreeNode*left;structTreeNode*right;}TreeNode;//创建树节点TreeNode*createNode(in......
  • 统计二叉树中度为1的结点个数
    `classTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(intval){this.val=val;this.left=null;this.right=null;}}classBinaryTree{publicstaticintcountNodesWithDegreeOne(TreeNoderoot){if(root==null){return0;......
  • PTA 生成格雷码 | C++ | 二叉树
    格雷码是一种包含2n个数串的序列,这种序列:1不存在重复的元素,2每个元素都是长度为n的二进制数串,3相邻元素只有一位不同。例如,长度为23的格雷码为:000,001,011,010,110,111,101,100。请使用分治法构造格雷码。提示,使用分治法构造格雷码,详见百度百科。输入格式:输入一个正整数n(1<=......
  • ReactOS寻找病返回最小StartingAddress所在结点。
    ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNode()函数文章目录ReactOS寻找病返回最小StartingAddress所在结点。MmIterateFirstNodeMmIterateFirstNode/*INCLUDES*****************************************************************/#incl......