reactos操作系统实现(51)
从前面的分析可以知道,安装Reactos到硬盘里的过程,是由程序usetup.exe来实现的,那么下面就来分析这个程序的实现过程,了解操作系统的安装过程。打开Reactos源码的目录reactos/base/setup/usetup,就可以看到相关工程的代码。
在仔细分析代码之前,我们需要了解什么是内核应用程序。从前面可以知道ntoskrnl.exe内核运行最后,就调用应用程序usetup.exe来运行,再仔细想一下,这个程序运行在smss.exe之前,也运行在所有子系统之前。也就是意味着smss.exe和所有子系统的API接口是不能使用的,只能使用ntoskrnl.exe内核的API接口,否则就会出错。因此,这一类没有使用所有子系统接口API的程序,就称作为内核应用程序。所有在子系统初始化前运行的应用程序,都是内核应用程序。内核应用程序的入口点,也跟其它子系统的应用程序入口点不同,它是从函数NtProcessStartup开始加载运行,而不像WinMain和main作为程序入口点函数。
下面就来分析入口代码,在文件里reactos/base/setup/usetup/interface/usetup.c如下:
#001 #ifdef __REACTOS__
#002
#003 VOID NTAPI
#004 NtProcessStartup(PPEB Peb)
#005 {
从内核里接收到参数Peb。
下面开始把Peb参数进行正规化处理,以便可以访问真实内存的地址,否则访问的只是内存的偏移大小而已。
#006 RtlNormalizeProcessParams(Peb->ProcessParameters);
#007
获取进程的堆空间。
#008 ProcessHeap = Peb->ProcessHeap;
设置ProcessHeap为INF的堆空间。
#009 INF_SetHeap(ProcessHeap);
下面调用函数RunUSetup来处理安装系统的流程。
#010 RunUSetup();
#011 }
#012 #endif /* __REACTOS__ */
在上面的函数里调用函数RtlNormalizeProcessParams来处理参数正规化,为什么要这样处理呢?因为在调用在内核函数已经反正规化处理,如下:
#174 Status = RtlCreateUserProcess(&SmssName,
#175 OBJ_CASE_INSENSITIVE,
#176 RtlDeNormalizeProcessParams(ProcessParams),
#177 NULL,
#178 NULL,
#179 NULL,
#180 FALSE,
#181 NULL,
#182 NULL,
#183 ProcessInformation);
在176行代码里,就是调用函数RtlDeNormalizeProcessParams反正规化处理。这样处理有什么样的作用呢?我想是把参数指针设置为偏移值后,如果再非法访问,就会访问系统保留内存空间,而出现异常处理。
相关文章
- 树莓派操作系统
- 操作系统之——银行家算法C语言实现
- 从零开始学习UCOSII操作系统2–UCOSII的内核实现「建议收藏」
- 【系统架构设计师】第一章:操作系统(1.2.2) 信号量与pv操作
- 操作系统生成镜像封装类
- 【操作系统】期末复习
- 深度解读火山引擎官方操作系统 veLinux
- [轻量级RTSP服务]Linux|麒麟操作系统下实现屏幕|摄像头|声音采集
- win7 64位操作系统中Oracle 11g + plsql安装教程详解(图解)
- Linux服务端编程:实现全新操作系统构建(linux服务端编程)
- 操作系统用Linux体验Mac的美妙体验!(仿mac的linux)
- Linux内核:强大的操作系统核心(linux内核简述)
- 利用嵌入式Linux操作系统实现自动化(嵌入式linux操作系统)
- Linux操作系统:实现中文桌面化(linux中文桌面系统)
- Linux:开放式操作系统的新时代(linux什么系统)
- Linux分支:开启操作系统新时代(linux的分支)
- Linux分支:实现操作系统多样性(linux的分支)
- 操作系统大神 Andrew Tanenbaum 教授即将退休
- MSC(中文全称:米鼠即时通讯系统),全程采用JAVA开发,是国内第一款可同时支持Windows(兼容Vista)、Linux、Unix操作系统的IM软件
- 轻松安装Linux系统:利用虚拟光驱来实现操作系统的安装(虚拟光驱安装linux)
- Linux操作系统:如何给文件添加可执行权限(linux给执行权限)
- Linux ISA: 认识ISA总线和Linux操作系统之间的关系(linuxisa)
- 探秘Linux操作系统中网卡源码的实现原理(linux网卡源码)
- 信佑Linux:轻松实现无盘操作系统(信佑linux无盘)
- Linux操作系统持续更新,实现更安全性能体验(linux更新)
- 开启lcx Linux之旅:极尽体验自多操作系统之美(lcxlinux)
- 使用 Linux 操作系统对磁盘进行分区(linux磁盘分区)
- 利用Oracle操作系统实现表格删除(Oracle之删除表)
- java实现操作系统的短进程作业调度示例分享