ReactOS 0.0.21从开机启动,到加载驱动的过程
首先是在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从开机启动,到加载驱动的过程相关推荐
- ubuntu linux开机启动自动加载ko驱动程序_一文讲透 CentOS 开机流程
一.Linux开机流程: BIOS: (Basic Input Output System)基本输入输出系统,它是一组固化到计算机内主板上一个ROM芯片 上的程序,保存着计算机最重要的基本输入输出的程 ...
- 开机启动加载驱动过程中调用PostMessage函数出错
今天在WINCE5.0+S3C2440系统调试检测出租车是否载客的驱动的时候遇到这样的问题: 发现在开机启动加载驱动过程中调用PostMessage函数时会导致调用的线程崩溃,比如如果下面的线程在创建 ...
- Android 11.0 Settings源码分析 - 主界面加载
Android 11.0 Settings源码分析 - 主界面加载 本篇主要记录AndroidR Settings源码主界面加载流程,方便后续工作调试其流程. Settings代码路径: packag ...
- Vue3.0+Cesium+Tomcat服务下倾斜摄影数据加载详细过程
Vue3.0+Cesium+Tomcat服务下倾斜摄影数据加载 1.Vue-cli 3.0 + cesium 构建 参考资料地址Vue-cli 3.0 + cesium 构建 注意,因为文档中设置默认 ...
- ssl服务器无响应,iOS上的IBM AppCenter 6.2.0 + SSL - 连接服务器时显示永久加载视图(无响应失败/成功/超时))...
我试图连接iOS 6/8.1上的IBM AppCenter 6.2.0.01.20141013-1735(启用SSL)iOS上的IBM AppCenter 6.2.0 + SSL - 连接服务器时 ...
- k n:linux kernel 从开机,到加载内核镜像到内存
原文地址: linux的内核运行原理是怎么样的呢?如何从开机,到加载内核镜像到内存? linux的内核运行原理是怎么样的呢?如何从开机,到加载内核镜像到内存? 最佳答案 本回答由提问者推荐 头像 匿名 ...
- 海思篇之开机logo的加载(Hi3531a代码版)
在看这篇博客之前,建议大家先参考前一篇博客海思篇之开机logo的加载(Hi3531a命令版),在了解了logo加载的流程之后,接下来的代码篇才会更容易理解.我用的开发板是Hi3531a,不同的版本可能 ...
- JVM SandBox源码解析(一):启动时初始化、启动时加载模块、ModuleHttpServlet进行Http路由
前言 上篇JVM SandBox实现原理详解文章中,主要解析了JVM SandBox的核心实现原理,并且对SandBoxClassLoader和ModuleClassLoader做了源码解析,也解释了 ...
- 使IEhelper只在iexplorer.exe启动时加载
//因为IEhelper会在explorer.exe和iexplorer.exe启动时加载, //所以这里设置只允许iexplorer.exe加载这个DLL TCHAR Loader[MAX_PATH ...
最新文章
- was修改堆内存_C语言内存泄露很严重,如何应对?
- Angular组件——投影
- python+opencv用电脑调用手机摄像头或其他网路摄像头
- EasyUI中分页的简单使用
- python程序结构有哪几种_Python数据结构与算法(几种排序)小结
- 测试无数据_fpc柔性线路板压合辅材的测试方法
- lnmp mysql 10061问题
- Linux学习总结(34)——Linux系统目录结构详解
- 【论文解读】如何在只有词典的情况下提升NER落地效果
- 使用Async方法 Using Async Methods 精通ASP-NET-MVC-5-弗瑞曼 Listing 4-32.
- python版使用tinypng压缩图片大小
- obs源码简析之推流
- 主观唯心、客观唯心、朴素唯物、历史唯物、辩证唯物主义的内涵、区别和联系
- Vue 腾讯防水墙验证
- 《数据结构教程(第五版) 李春葆主编》判断题(第一章-第十章)
- Go使用gos7实现西门子PLC通讯
- 汇总并对比几个数据库存储相关的知识
- IOS和安卓展示时间兼容问题
- 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国选拔赛规则
- ABAP- INCLUDE Zxxx IF FOUND.