reactos操作系统实现(141)
在操作系统启动的早期阶段,由于很多基本的功能没有初始化(比如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} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |