首页 > 系统相关 >windows XP,ReactOS系统3.4 共享映射区(Section)---2

windows XP,ReactOS系统3.4 共享映射区(Section)---2

时间:2024-11-04 19:46:36浏览次数:5  
标签:ReactOS ULONG 映射 windows Section OBJECT PAGE SECTION 页面

系列文章目录

文章目录


在 ReactOs 内核中

在 ReactOs 内核中,映射区的数据结构是 ROS_SECTION_OBJECT,显然这与 Windows中的“正定义有所不同,但是这并不妨碍我们对映射区的理解:

ROS_SECTION_OBJECT结构体


typedef struct _ROS_SECTION_OBJECT
{
    CSHORT Type;
    CSHORT Size;
    LARGE_INTEGER MaximumSize;
    ULONG SectionPageProtection; //页面保护模式
    ULONG AllocationAttributes;	//属性
    PFILE_OBJECT FileObject;	//指向文件对象
    union
    {
        PMM_IMAGE_SECTION_OBJECT ImageSection;	//如果是可指向影像文件
        PMM_SECTION_SEGMENT Segment;			//如果是数据文件
    };
} ROS_SECTION_OBJECT, *PROS_SECTION_OBJECT;


映射区的数据结构中必须有指向目标文件对象的指针,这是不言而喻的。如果目标文件是可执行映像文件,那就要有个指针指向另一个数据结构,即MM_IMAGE_SECTION_OBJECT,在那里有个映射段结构指针的数组,还有个字段说明段的数量,因为可执行映像文件里面段的数量是不固定的。而如果目标文件是数据文件,则只有一个段,所以直接使这个指针指向一个映射段数据结构即 MM_SECTION_SEGMENT 就可以了。
再看映射段的数据结构MM_SECTION_SEGMENT :

MM_SECTION_SEGMENT结构体


typedef struct _MM_SECTION_SEGMENT
{
    LONGLONG FileOffset;		/* start offset into the file for image sections */		     
    ULONG_PTR VirtualAddress;	/* dtart offset into the address range for image sections */
    ULONG RawLength;		/* length of the segment which is part of the mapped file */
    ULONG Length;			/* absolute length of the segment */
    ULONG Protection;
    FAST_MUTEX Lock;		/* lock which protects the page directory */
    ULONG ReferenceCount;
    SECTION_PAGE_DIRECTORY PageDirectory;
    ULONG Flags;
    ULONG Characteristics;
    BOOLEAN WriteCopy;
} MM_SECTION_SEGMENT, *PMM_SECTION_SEGMENT;

字段FileOffset 说明本映射段的起点对应于文件内部的位移,对于数据文件显然应该是0。读者可以结合这里的注释与上面的代码搞清其余字段的意义和作用。这里要说明的是作为内部成分的映射段页面目录,即SECTION_PAGE_DIRECTORY数据结构PageDirectory。顾名思义,这是个页面目录,其数据结构为:

SECTION_PAGE_DIRECTORY结构体


typedef struct
{
    PSECTION_PAGE_TABLE PageTables[NR_SECTION_PAGE_TABLES];
} SECTION_PAGE_DIRECTORY, *PSECTION_PAGE_DIRECTORY;

这是个指针数组,数组的大小NR_SECTION_PAGE_TABLES定义为1024,所以正好占一个页面。
每个指针指向一个映射段二级页面表,即SECTION_PAGE_TABLE 数据结构。

SECTION_PAGE_TABLE结构体


typedef struct
{
    ULONG Entry[NR_SECTION_PAGE_ENTRIES];
} SECTION_PAGE_TABLE, *PSECTION_PAGE_TABLE;

这又是一个数组,数组的大小NR_SECTION_PAGE_ENTRIES也定义为1024,也占一个页面显然,映射段页面目录和映射段二级页面表构成了映射段的页面映射表,在形式上与内存的页面映射表一致。不过,只要目标文件不是太大,映射段页面目录中的大部分目录项都是NULL,因而二级映射表实际上不会占那么多的页面。
完成了这些操作之后,最后通过 CcRosReferenceCache()递增目标文件的BCB即“缓冲区控制块”的引用计数。
上面只是创建了(文件)映射区对象,而并未实际建立映射。实际的映射是通过另一个系统调用NMapViewOfSection()完成的,这个系统调用将一个映射区对象的一部分或全部映射到某个进程的用户空间,这个进程不必是当前进程。

标签:ReactOS,ULONG,映射,windows,Section,OBJECT,PAGE,SECTION,页面
From: https://blog.csdn.net/zhyjhacker/article/details/143492584

相关文章

  • Windows-DHCP
    AppSrv、RouterSrv服务DHCP(AppSrv)安装和配置dhcp服务,为办公区域网络提供地址上网。创建地址池名为inside_pool,地址池范围:192.168.0.1-192.168.0.100。根据题目要求正确配置网关和dns信息。配置故障转移设置为“热备用服务器”模式。伙伴服务器“DC2”为“待机”状态。为......
  • 在Windows中安装Redis
    1、下载Redis下载地址:https://github.com/microsoftarchive/redis选择Release 3.Windows系统中启动和停止RedisWindows系统中启动Redis,直接双击redis-server.exe即可启动Redis服务,redis服务默认端口号为6379双击redis-cli.exe即可启动Redis客户端,默认连接的是本地的Re......
  • windows命令笔记
    Windows命令笔记准备工作所有主机开机配置IP地址,关闭防火墙。需要加域的主机,改名和加域同时进行。以国赛题为例:具体根据题目来:DC1:开机添加重当D盘;更改主机名,重启。DC2:添加三块10G虚拟磁盘,用来配置Raid5;更改主机名,重启RouterSrv:可以安装路由和转发,不过加域重启后,服务会关......
  • 如何快速定位Windows微信客户端数据库加密秘钥偏移地址
     手工获取网上涉及如何调试微信客户端获取数据库加密key的教程很多,但是每次微信版本更新后都要调试肯定会比较麻烦,但是有一个问题是这个key其实不是经常变更的,具体如何变更我也不清楚,可能是改密码?因此我们可以直接使用CheatEngine等内存搜索工具直接搜索之前获取的key,这样......
  • Windows 虚拟地址 到底是如何映射到 物理地址 的?
    一:背景1.讲故事我发现有很多的.NET程序员写了很多年的代码都没弄清楚什么是 虚拟地址,更不用谈什么是 物理地址 以及Windows是如何实现地址映射的了?这一篇我们就来聊一聊这两者之间的联系。二:地址映射研究1.找虚拟地址怎么去找 虚拟地址 呢?相信很多朋友都知道应用......
  • Windows 系统安装运行ZooKeeper时报:文件名、目录名或卷标语法不正确
    Windows系统安装运行ZooKeeper1.下载官方压缩包下载地址zookeeper-3.8.4,选择apache-zookeeper-3.8.4-bin.tar.gz下载2.解压到合适的位置,最好是纯英文目录修改conf目录下的zoo_sample.cfg为 zoo.cfg外 3.添加data目录并修改zoo.cfg文件 将原来的路径修改为dataDi......
  • Windows Active Directory技术介绍和应用——集中式用户账户管理
    大纲静态IP构建组织用户加域修改DNS加域题外参考资料企业可以将所有员工的账户信息集中存储在ActiveDirectory中,方便管理员进行统一创建、修改、删除用户账号等操作。例如,当新员工入职时,管理员可以快速创建其账号并赋予相应的权限和访问级别;员工离职时,也能及时禁......