加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(141)

发布时间:2020-12-15 04:59:28 所属栏目:百科 来源:网络整理
导读:在操作系统启动的早期阶段,由于很多基本的功能没有初始化(比如 IO 管理器都没有初始化),因此完整和功能强大的显示驱动程序是不可能运行的,那么就需要在这个阶段写一个比较简单的 VGA 显示驱动程序给内核引导时使用,这个驱动程序就是 bootvid.dll 。 先

在操作系统启动的早期阶段,由于很多基本的功能没有初始化(比如IO管理器都没有初始化),因此完整和功能强大的显示驱动程序是不可能运行的,那么就需要在这个阶段写一个比较简单的VGA显示驱动程序给内核引导时使用,这个驱动程序就是bootvid.dll

先来分析在内核里调用初始化的位置,具体如下:

#001 VOID

#002 NTAPI

#003 Phase1InitializationDiscard(IN PVOID Context)

#004 {

......

#045

检查是否需要使用GUI显示引导信息,如果不需要GUI显示,那么NoGuiBoot就为TRUE

#046 /* Check if GUI Boot is enabled */

#047 NoGuiBoot = (strstr(CommandLine,"NOGUIBOOT")) ? TRUE: FALSE;

#048

#049 /* Get the SOS setting */

#050 SosEnabled = strstr(CommandLine,"SOS") ? TRUE: FALSE;

#051

下面就是调用bootvid.dll里的函数来初始化。

#052 /* Setup the boot driver */

#053 InbvEnableBootDriver(!NoGuiBoot);

#054 InbvDriverInitialize(LoaderBlock,18);

InbvEnableBootDriver函数用来清除已经显示的状态,并且根据是否使用GUI显示设置InbvDisplayState显示状态。

#001 NTAPI

#002 InbvEnableBootDriver(IN BOOLEAN Enable)

#003 {

#004 /* Check if we're installed */

检查是否已经加载了显示驱动程序。

#005 if (InbvBootDriverInstalled)

#006 {

是否已经失去显示控制。

#007 /* Check for lost state */

#008 if (InbvDisplayState >= INBV_DISPLAY_STATE_LOST) return;

#009

获取显示控制权,然后清空当前显示内容。

#010 /* Acquire the lock */

#011 InbvAcquireLock();

#012

#013 /* Cleanup the screen if we own it */

#014 if (InbvDisplayState == INBV_DISPLAY_STATE_OWNED) VidCleanUp();

#015

设置是否显示GUI界面。

#016 /* Set the new display state */

#017 InbvDisplayState = Enable ? INBV_DISPLAY_STATE_OWNED:

#018 INBV_DISPLAY_STATE_DISABLED;

#019

#020 /* Release the lock */

#021 InbvReleaseLock();

#022 }

#023 else

#024 {

设置是否显示GUI界面。

#025 /* Set the new display state */

#026 InbvDisplayState = Enable ? INBV_DISPLAY_STATE_OWNED:

#027 INBV_DISPLAY_STATE_DISABLED;

#028 }

#029}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读