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

devtools/2024/10/25 8:42:06/

系列文章目录

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/devtools/128637.html

相关文章

【Nginx】win10 安装Nginx

1.下载 nginx: download 2.安装 解压即可 3.启动 可以自己修改端口&#xff0c;conf/nginx.conf 确保端口不被占用cmd启动&#xff08;不要双击nginx.exe启动&#xff0c;至于原因我粘贴一下&#xff09; start nginx.exe 可以看到是后台运行&#xff0c;还不错 访问&…

keil兼容C51和ARM,C251

三合一 C51,AEM,C251获取STC32的包 将 C51,AEM,C251安装到一块。 C51,AEM,C251 将三个软件分别下载到不同的文件夹KEIL,MDK,KEIL2里。 然后打开KEIL,MDK,KEIL2文件夹&#xff0c;复制KEIL文件夹里的C51和KEIL2文件夹里的C251的文件夹到MDK文件夹里。 打开KEIL和KEIL2文件夹里…

SPI通信协议

SPI通信协议 软件SPI 全双工&#xff0c;一主多从&#xff0c;同步。 四根线&#xff1a;片选SS(CS)&#xff0c;主发从收MOSI(DO)&#xff0c;主收从收MISO(DI)&#xff0c;时钟SCK。 一共四种模式&#xff1a; CPOL01CPHA0空闲状态下&#xff0c;SCL-低&#xff1b;第0个边缘…

【Android】JNI报错 non-zero capacity for nullptr pointer分析

【Android】JNI报错 non-zero capacity for nullptr pointer分析 背景 某天&#xff0c;运行Android App时程序报错。 Abort message: JNI DETECTED ERROR IN APPLICATION: non-zero capacity for nullptr pointer: 1in call to NewDirectByteBufferfrom *****出错部分&#…

《YOLO目标检测》—— YOLOv1 详细介绍

文章目录 一、算法特点二、网络结构三、检测过程四、损失函数五、性能表现六、优缺点 YOLO v1&#xff08;You Only Look Once version 1&#xff09;是一种快速的目标检测算法&#xff0c;以下是对YOLO v1的详细介绍&#xff1a; 一、算法特点 端到端的网络结构&#xff1a;Y…

axios退休了吗?现代Web开发的新请求策略

表单草稿功能的实用价值 在软件开发中&#xff0c;表单是用户与系统交互的重要界面。用户通过填写表单来提交数据&#xff0c;而系统则需要确保这些数据的准确性和完整性。然而&#xff0c;在实际使用中&#xff0c;用户可能会因为各种原因中断填写过程&#xff0c;比如网络问…

内网穿透工具——Cpolar

什么是内网穿透 内网穿透是一种网络技术&#xff0c;它允许从公共网络&#xff08;例如互联网&#xff09;访问位于私有网络&#xff08;内网&#xff09;中的设备或服务。在传统的网络环境中&#xff0c;私有网络通常由路由器、防火墙和网络地址转换&#xff08;NAT&#xff…

Ubuntu 通过Supervisor 或者 systemd 管理 .Net应用

在 Ubuntu 上安装 .NET 8.0&#xff0c;通过 supervisor 或 systemd 管理 .NET 应用服务&#xff0c;确保应用能够自动启动、运行以及在崩溃时重启。 1. 安装 .NET 8.0 最新的Ubuntu版本已经不需要注册 Microsoft 包存储库了&#xff0c;具体的可以参考微软官方文档安装&…