ReactOS代码精读
文章平均质量分 80
cradiator
这个作者很懒,什么都没留下…
展开
-
ReactOS-Freeldr磁盘及文件管理
Freeldr提供了对fat12、fat32、fatx、ntfs等文件系统的只读功能。这部分代码主要集中在boot/freeldr/freeldr/fs/fs.c文件中。首先计算机加电后会把mbr读取到物理内存的0x7c00位置,mbr搜索活动分区并加载活动分区根目录下的Freeldr.sys文件。加载后跳入Freeldr入口start。Freeldr进行32为初始化后跳入主初始化函数B原创 2011-06-08 11:36:00 · 985 阅读 · 0 评论 -
ReactOS-Freeldr磁盘及文件管理2
ArcOpen的大体流程我们看过了。大致分为这几步1. 函数会尝试找到文件所在分区的设备句柄,如果还没有对应的句柄。那么使用DEVICE.FuncTable中的Open函数打开设备,并为这个设备分配句柄。2. 打开设备后条用XxxMount识别分区格式,识别成功返回另外的FuncTable,存储到设备的FileData.FileFuncTable域。3. 为文件分配一个句柄,在对原创 2011-06-08 11:38:00 · 549 阅读 · 0 评论 -
ReactOS-Freeldr镜像加载
Freeldr中镜像加载相关的操作在Freeldr/Freeldr/windows/Peloader.c文件中。首先来看看如何加载一个PE镜像。这个操作在WinLdrLoadImage函数中。这个函数的三个参数分别为镜像的Arc路径FileName, 镜像所处内存的内存属性MemoryType, 加载后镜像的基地址由ImageBasePA返回。BOOLEANWinLdrL原创 2011-06-08 11:42:00 · 686 阅读 · 0 评论 -
ReactOS-Freeldr镜像加载2
先来介绍几个重要的结构。Freeldr虽然是个引导程序,严格来讲不属于操作系统的一部分,但它也有一些类似Windows系统中的数据结构。LOADER_PARAMETER_BLOCK这个可以看作Freeldr的PEB,结构也和PEB非常相似。/include/reactos/arc/arc.htypedef struct _LOADER_PARAMETER_BLOCK{原创 2011-06-08 13:32:00 · 1340 阅读 · 0 评论 -
ReactOS-Freeldr镜像加载3
上一次篇我们留下了WinLdrpScanImportAddressTable函数。当WinLdrScanImportDescriptorTable调用这个函数时,当前需要处理的DLL已经加载到内存而且已经初始化完毕。现在我们需要调用WinLdrpScanImportAddressTable来填写模块本身的IAT。这个函数有三个参数,WinLdrBlock是Freeldr的LOADER_P原创 2011-06-09 11:24:00 · 919 阅读 · 0 评论 -
ReactOS-Freeldr注册表
body, td { font-family: tahoma; font-size: 10pt; } 这里介绍的注册表是Freeldr实现的一个简易版本,和Windows系统提供的还是有一些差异的。注册表在磁盘中是以HIVE文件形式存在的,格式比较复杂,放到后面。这一节说的是注册表的内存结构。 Freeldr中注册表操作的代码原创 2011-06-13 10:52:00 · 764 阅读 · 0 评论 -
ReactOS-Freeldr注册表HIVE文件格式2
上一节读了HIVE文件读入内存时的初始化操作。现在来看看实际对内存中的HIVE文件的操作。首先是从空闲CELL中分配一个指定大小的CELL。HvAllocateCell就是做这件事情的。这个函数有四个参数:1. RegistryHive HHIVE结构指针2. Size 需要分配的CELL大小(不包括HCELL结构的大小)3. Storage 分配的CELL是Stabl原创 2011-06-14 22:02:00 · 992 阅读 · 0 评论 -
ReactOS-Freeldr注册表HIVE文件格式
ReactOS的注册表信息存储在ReactOS/System32/CONFIG/SYSTEM文件中。注册表文件使用的一种特殊的格式——HIVE。HIVE文件主要由BASE_BLOCK/BIN/CELL三部分组成的。BASE_BLOCK是文件头,大小为4KB,里面存储了整个文件的一些全局信息。BIN是以4KB对其的一段空间,里面管理了若干个CELL。CELL是一段用户自定义大小的空间,注册表的键原创 2011-06-14 15:35:00 · 1283 阅读 · 0 评论 -
ReactOS-Freeldr内存管理
Freeldr内存管理模块的代码大多在freeldr/freeldr/mm文件夹中。我们从初始化部分开始看起。 freeldr/freeldr/mm/Meminit.c BOOLEAN MmInitializeMemoryManager(VOID) { // 获得内存总页数 TotalPagesInLookup原创 2011-06-19 12:20:00 · 891 阅读 · 1 评论