首先是在main.c中ExpInitializeExecutive函数。遍历所有加载的模块,其中有ntoskrnl、各个驱动、nls、注册表文件等。找出驱动程序,依次调用LdrInitializeBootStartDriver函数。

然后调用IoCreateArcNames函数,将\reactos 变为 multi(0)disk(0)rdisk(0)partition(1)\reactos

最后调用IoCreateSystemRootLink函数,建立系统的对象的根目录,系统里所有的系统对象都是这个根的子节点或间接子节点。

IoCreateSystemRootLink函数会根据启动参数找到相应的设备,如multi(0)disk(0)rdisk(0)partition(1)\reactos,它就会定位到\Device\Harddisk0\Partition1\reactos。然后为它建立符号链接\SystemRoot,然后就是用NtOpenFile函数测试这个设备是否能够打开。

multi(0)disk(0)rdisk(0)partition(1)\reactos是传进来的参数,分为两部分。
1)Boot path: \reactos
2)ARC name: multi(0)disk(0)rdisk(0)partition(1)
然后打开符号链接\ArcName\multi(0)disk(0)rdisk(0)partition(1),查看它对应的设备名,发现是\Device\Harddisk0\Partition1

这时候将\Device\Harddisk0\Partition1\reactos。然后为它建立符号链接\SystemRoot。然后用NtOpenFile打开\SystemRoot。

打开驱动调用NtOpenFile=>IoCreateFile
首先调用ObCreateObject创建或打开对象。

ObCreateObject会调用ObFindObject将设备名中,提取出真正的设备对象地址和remaining path。
例如打开\Device\Harddisk0\Partition1\reactos,会分解为\Device\Harddisk0\Partition1 和 \reactos(这部分称为remaining path)。

\Device\Harddisk0\Partition1是设备名,但怎么找到这个设备呢。应该从左扫描,从根目录找起。即
\
\Device
\Device\Harddisk0
\Device\Harddisk0\Partition1
当找到这个设备对象的地址时,调用它的Create回调函数,这个函数一般为IopCreateFile或IopCreateDevice。

\Device\Harddisk0\Partition是disk.sys的设备,不是vtfat.sys的设备

现在问题是ScsiClassCreateDeviceObject得到PartitionEntry,其中的PartitionEntry->PartitionType为6,而不是PARTITION_FAT32或者PARTITION_FAT16

转载于:https://www.cnblogs.com/fanzi2009/archive/2009/06/02/1494648.html

ReactOS 0.0.21从开机启动,到加载驱动的过程相关推荐

  1. ubuntu linux开机启动自动加载ko驱动程序_一文讲透 CentOS 开机流程

    一.Linux开机流程: BIOS: (Basic Input Output System)基本输入输出系统,它是一组固化到计算机内主板上一个ROM芯片 上的程序,保存着计算机最重要的基本输入输出的程 ...

  2. 开机启动加载驱动过程中调用PostMessage函数出错

    今天在WINCE5.0+S3C2440系统调试检测出租车是否载客的驱动的时候遇到这样的问题: 发现在开机启动加载驱动过程中调用PostMessage函数时会导致调用的线程崩溃,比如如果下面的线程在创建 ...

  3. Android 11.0 Settings源码分析 - 主界面加载

    Android 11.0 Settings源码分析 - 主界面加载 本篇主要记录AndroidR Settings源码主界面加载流程,方便后续工作调试其流程. Settings代码路径: packag ...

  4. Vue3.0+Cesium+Tomcat服务下倾斜摄影数据加载详细过程

    Vue3.0+Cesium+Tomcat服务下倾斜摄影数据加载 1.Vue-cli 3.0 + cesium 构建 参考资料地址Vue-cli 3.0 + cesium 构建 注意,因为文档中设置默认 ...

  5. ssl服务器无响应,iOS上的IBM AppCenter 6.2.0 + SSL - 连接服务器时显示永久加载视图(无响应失败/成功/超时))...

    我试图连接iOS 6/8.1上的IBM AppCenter 6.2.0.01.20141013-1735(启用S​​SL)iOS上的IBM AppCenter 6.2.0 + SSL - 连接服务器时 ...

  6. k n:linux kernel 从开机,到加载内核镜像到内存

    原文地址: linux的内核运行原理是怎么样的呢?如何从开机,到加载内核镜像到内存? linux的内核运行原理是怎么样的呢?如何从开机,到加载内核镜像到内存? 最佳答案 本回答由提问者推荐 头像 匿名 ...

  7. 海思篇之开机logo的加载(Hi3531a代码版)

    在看这篇博客之前,建议大家先参考前一篇博客海思篇之开机logo的加载(Hi3531a命令版),在了解了logo加载的流程之后,接下来的代码篇才会更容易理解.我用的开发板是Hi3531a,不同的版本可能 ...

  8. JVM SandBox源码解析(一):启动时初始化、启动时加载模块、ModuleHttpServlet进行Http路由

    前言 上篇JVM SandBox实现原理详解文章中,主要解析了JVM SandBox的核心实现原理,并且对SandBoxClassLoader和ModuleClassLoader做了源码解析,也解释了 ...

  9. 使IEhelper只在iexplorer.exe启动时加载

    //因为IEhelper会在explorer.exe和iexplorer.exe启动时加载, //所以这里设置只允许iexplorer.exe加载这个DLL TCHAR Loader[MAX_PATH ...

最新文章

  1. was修改堆内存_C语言内存泄露很严重,如何应对?
  2. Angular组件——投影
  3. python+opencv用电脑调用手机摄像头或其他网路摄像头
  4. EasyUI中分页的简单使用
  5. python程序结构有哪几种_Python数据结构与算法(几种排序)小结
  6. 测试无数据_fpc柔性线路板压合辅材的测试方法
  7. lnmp mysql 10061问题
  8. Linux学习总结(34)——Linux系统目录结构详解
  9. 【论文解读】如何在只有词典的情况下提升NER落地效果
  10. 使用Async方法 Using Async Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-32.
  11. python版使用tinypng压缩图片大小
  12. obs源码简析之推流
  13. 主观唯心、客观唯心、朴素唯物、历史唯物、辩证唯物主义的内涵、区别和联系
  14. Vue 腾讯防水墙验证
  15. 《数据结构教程(第五版) 李春葆主编》判断题(第一章-第十章)
  16. Go使用gos7实现西门子PLC通讯
  17. 汇总并对比几个数据库存储相关的知识
  18. IOS和安卓展示时间兼容问题
  19. 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国选拔赛规则
  20. ABAP- INCLUDE Zxxx IF FOUND.

热门文章

  1. intelliJ idea 下载安装
  2. mybatis入门-第一个程序
  3. 区块链:新经济蓝图及导读
  4. 重集合中找出最相近的一个数字
  5. 【Java4】IO重定向
  6. Linux 下 ls -l 命令执行显示结果的每一列含义 图解 (附带ls命令详解)
  7. stdio.h: C++输入输出操作
  8. 阿里开源首个DL框架,新型XDL帮你搞定大规模稀疏数据
  9. android系统属性获取及设置
  10. Python科学计算工具:NumPy第一部分