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

embedded/2024/10/25 9:51:17/

系列文章目录

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

http://www.ppmy.cn/embedded/132296.html

相关文章

Android Studio 的 Gradle 任务列表只显示测试任务

问题现象如下&#xff1a; 问题原因&#xff1a; 这是因为Android Studio 设置中勾选了屏蔽其他gradle任务的选项。 解决方法&#xff1a; File -> Settings -> Experimental 取消勾选Only include test tasks in the Gradle task list generated during Gradle Sync&…

基于知识图谱的诗词推荐系统

你是否曾经想在浩如烟海的古代诗词中找到属于自己的那几首“知己”&#xff1f;现在&#xff0c;借助人工智能与知识图谱&#xff0c;古典诗词不再是玄之又玄的文本&#xff0c;而是变成了让你“个性化定制”的文化体验&#xff01;我们带来的这款基于知识图谱的诗词推荐系统&a…

Linux 操作系统的版本 +编程语言之间的关系

个人主页&#xff1a;Jason_from_China-CSDN博客 所属栏目&#xff1a;Linux系统性学习_Jason_from_China的博客-CSDN博客 所属栏目&#xff1a;Linux知识点的补充_Jason_from_China的博客-CSDN博客 Linux 操作系统的版本 一、Ubuntu 版本发布周期与支持政策 Ubuntu 通常每 6 …

PDF.js的使用及其跨域问题解决

目录 一、PDF.js 简介 二、使用配置和步骤 1.引入PDF.js 2.加载PDF文件 3.渲染PDF页面 三、在Vue中使用PDF.js示例 1.安装PDF.js 2.在Vue组件中使用 四、在原生js中使用PDF.js示例 1.加载PDF文件并渲染页面 五、解决跨域问题 1.服务器配置 2.使用代理服务器 下面介…

不推荐使用Scilab作为MATLAB的开源替代

安装了Scilab2024.1.0&#xff0c;随便试了几分钟就发现有严重影响使用的Bug(也可能是就是这样设计的&#xff0c;有一个所谓的“暂停模式”)&#xff0c;复现步骤&#xff1a;主界面上点击“Scilab示例”按钮&#xff0c;打开“演示”窗口&#xff0c;点击左侧列表中的“多项式…

Kmeans聚类算法简述

Kmeans聚类算法 1、概述 是一种无监督学习算法&#xff0c;根据样本之间的相似性将样本划分到不同的类别中&#xff0c;不同的相似度计算方式&#xff0c;会得到不同的聚类结果&#xff0c;常用的相似度计算方式有欧式距离。 目的是在没有先验条件知识的情况下&#xff0c;自…

Element UI

Element ui 就是基于vue的一个ui框架,该框架基于vue开发了很多相关组件,方便我们快速开发页面。 官网: https://element.eleme.io/#/zh-CN 安装Element UI vue init webpack element(项目名)确认项目是否构建成功&#xff1a;进入到项目的根路径 执行 npm start 访问 h…

嵌入式硬件设计:技术与实践

嵌入式系统是现代技术世界中的重要组成部分,几乎遍布所有领域,从消费电子产品、医疗设备到工业自动化和智能交通系统。嵌入式硬件设计是这一领域的核心,它涉及到对处理器、存储器、接口、传感器等多种硬件元件的选择、集成与优化,使系统能够在特定环境下执行特定任务。本文…