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

reactos操作系统实现(63)

发布时间:2020-12-15 05:01:15 所属栏目:百科 来源:网络整理
导读:前面把注册表初始化完成之后,就开始进行安装引导程序了。这里安装的引导程序是分区引导程序,或者安装到软盘引导程序。当然也可以选择跳过不安装它,界面如下: 这个函数的代码如下: #001 static PAGE_NUMBER #002 BootLoaderPage(PINPUT_RECORD Ir) #003

前面把注册表初始化完成之后,就开始进行安装引导程序了。这里安装的引导程序是分区引导程序,或者安装到软盘引导程序。当然也可以选择跳过不安装它,界面如下:

这个函数的代码如下:

#001 static PAGE_NUMBER

#002 BootLoaderPage(PINPUT_RECORD Ir)

#003 {

#004 UCHAR PartitionType;

#005 BOOLEAN InstallOnFloppy;

#006 USHORT Line = 12;

#007

#008 CONSOLE_SetStatusText(MUIGetString(STRING_PLEASEWAIT));

#009

取得分区的磁盘类型。根据不同的分区类型进行检查是否可以安装引导程序。

#010 PartitionType = PartitionList->ActiveBootPartition->PartInfo[0].PartitionType;

#011

#012 if (PartitionType == PARTITION_ENTRY_UNUSED)

#013 {

#014 DPRINT("Error: active partition invalid (unused)/n");

#015 InstallOnFloppy = TRUE;

#016 }

#017 else if (PartitionType == 0x0A)

#018 {

#019 /* OS/2 boot manager partition */

#020 DPRINT("Found OS/2 boot manager partition/n");

#021 InstallOnFloppy = TRUE;

#022 }

#023 else if (PartitionType == 0x83)

#024 {

#025 /* Linux ext2 partition */

#026 DPRINT("Found Linux ext2 partition/n");

#027 InstallOnFloppy = TRUE;

#028 }

#029 else if (PartitionType == PARTITION_IFS)

#030 {

#031 /* NTFS partition */

#032 DPRINT("Found NTFS partition/n");

#033 InstallOnFloppy = TRUE;

#034 }

#035 else if ((PartitionType == PARTITION_FAT_12) ||

#036 (PartitionType == PARTITION_FAT_16) ||

#037 (PartitionType == PARTITION_HUGE) ||

#038 (PartitionType == PARTITION_XINT13) ||

#039 (PartitionType == PARTITION_FAT32) ||

#040 (PartitionType == PARTITION_FAT32_XINT13))

#041 {

目前只支持FAT12FAT16FAT32的文件系统安装引导程序。

#042 DPRINT("Found FAT partition/n");

#043 InstallOnFloppy = FALSE;

#044 }

#045 else

#046 {

#047 /* Unknown partition */

#048 DPRINT("Unknown partition found/n");

#049 InstallOnFloppy = TRUE;

#050 }

#051

#052 if (InstallOnFloppy == TRUE)

#053 {

#054 return BOOT_LOADER_FLOPPY_PAGE;

#055 }

#056

检查是否无人参与安装方式。

#057 if (IsUnattendedSetup)

#058 {

#059 if (UnattendMBRInstallType == 0) /* skip MBR installation */

#060 {

#061 return SUCCESS_PAGE;

#062 }

#063 else if (UnattendMBRInstallType == 1) /* install on floppy */

#064 {

#065 return BOOT_LOADER_FLOPPY_PAGE;

#066 }

#067 else if (UnattendMBRInstallType == 2) /* install on hdd */

#068 {

#069 return BOOT_LOADER_HARDDISK_PAGE;

#070 }

#071 }

#072

开始显示安装引导标题。

#073 MUIDisplayPage(BOOT_LOADER_PAGE);

#074 CONSOLE_InvertTextXY(8,Line,60,1);

#075

循环地检查用户的输入。

#076 while(TRUE)

#077 {

#078 CONSOLE_ConInKey(Ir);

#079

下一行的菜单选择。

#080 if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#081 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_DOWN)) /* DOWN */

#082 {

#083 CONSOLE_NormalTextXY(8,1);

#084

#085 Line++;

#086 if (Line<12) Line=14;

#087 if (Line>14) Line=12;

#088

#089 CONSOLE_InvertTextXY(8,1);

#090 }

上一行的菜单选择。

#091 else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#092 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_UP)) /* UP */

#093 {

#094 CONSOLE_NormalTextXY(8,1);

#095

#096 Line--;

#097 if (Line<12) Line=14;

#098 if (Line>14) Line=12;

#099

#100 CONSOLE_InvertTextXY(8,1);

#101 }

如果按F3就表示退出操作系统安装。

#102 else if ((Ir->Event.KeyEvent.uChar.AsciiChar == 0x00) &&

#103 (Ir->Event.KeyEvent.wVirtualKeyCode == VK_F3)) /* F3 */

#104 {

#105 if (ConfirmQuit(Ir) == TRUE)

#106 return QUIT_PAGE;

#107

#108 break;

#109 }

如果按回车键就检查选择那一个选项,然后进入不同的页面操作。

#110 else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x0D) /* ENTER */

#111 {

#112 if (Line == 12)

#113 {

#114 return BOOT_LOADER_HARDDISK_PAGE;

#115 }

#116 else if (Line == 13)

#117 {

#118 return BOOT_LOADER_FLOPPY_PAGE;

#119 }

#120 else if (Line == 14)

#121 {

#122 return SUCCESS_PAGE;;

#123 }

#124

#125 return BOOT_LOADER_PAGE;

#126 }

#127 }

#128

#129 return BOOT_LOADER_PAGE;

#130}

(编辑:李大同)

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

    推荐文章
      热点阅读