微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactos操作系统实现(59)

用户安装ReactOS系统时,需要选择合适的安装目录,因为同一个类型的操作系统,可以安装多次,可以选择不同的目录来安装,以便在同一台电脑,同一个磁盘分区里安装不同的系统。如下图:

选择系统目录的实现代码如下:

#001 static PAGE_NUMBER

#002 InstallDirectoryPage(PINPUT_RECORD Ir)

#003 {

#004 PdisKENTRY diskEntry;

#005 PPARTENTRY PartEntry;

#006 WCHAR InstallDir[51];

#007 PWCHAR DefaultPath;

#008 INFCONTEXT Context;

#009 ULONG Length;

#010

判断分区列表是否存在。

#011 if (PartitionList == NULL ||

#012 PartitionList->Currentdisk == NULL ||

#013 PartitionList->CurrentPartition == NULL)

#014 {

#015 /* FIXME: show an error dialog */

#016 return QUIT_PAGE;

#017 }

#018

获取磁盘分区的入口项。

#019 diskEntry = PartitionList->Currentdisk;

#020 PartEntry = PartitionList->CurrentPartition;

#021

查找安装目录里的路径数据。

#022 /* Search for 'DefaultPath' in the 'SetupData' section */

#023 if (!SetupFindFirstLineW (SetupInf,L"SetupData",L"DefaultPath",&Context))

#024 {

#025 MUIdisplayError(ERROR_FIND_SETUPDATA,Ir,POPUP_WAIT_ENTER);

#026 return QUIT_PAGE;

#027 }

#028

读取缺省路径数据。

#029 /* Read the 'DefaultPath' data */

#030 if (INF_GetData (&Context,NULL,&DefaultPath))

#031 {

#032 wcscpy(InstallDir,DefaultPath);

#033 }

#034 else

#035 {

如果没有配置,认安装的目录,就是ReactOS目录。

#036 wcscpy(InstallDir,L"//ReactOS");

#037 }

#038

#039 Length = wcslen(InstallDir);

#040 CONSOLE_SetInputtextxY(8,11,51,InstallDir);

#041 MUIdisplayPage(INSTALL_DIRECTORY_PAGE);

#042

#043 if (IsUnattendedSetup)

#044 {

#045 return(InstallDirectoryPage1 (InstallDir,diskEntry,PartEntry));

#046 }

#047

循环地检查输入的目录。

#048 while(TRUE)

#049 {

#050 CONSOLE_ConInKey(Ir);

#051

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

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

#054 {

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

#056 return(QUIT_PAGE);

#057

#058 break;

#059 }

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

#061 {

这里调用函数InstallDirectoryPage1来设置安装目录。

#062 return (InstallDirectoryPage1 (InstallDir,PartEntry));

#063 }

#064 else if (Ir->Event.KeyEvent.uChar.AsciiChar == 0x08) /* BACKSPACE */

#065 {

#066 if (Length > 0)

#067 {

#068 Length--;

#069 InstallDir[Length] = 0;

#070 CONSOLE_SetInputtextxY(8,InstallDir);

#071 }

#072 }

#073 else if (isprint(Ir->Event.KeyEvent.uChar.AsciiChar))

#074 {

#075 if (Length < 50)

#076 {

#077 InstallDir[Length] = (WCHAR)Ir->Event.KeyEvent.uChar.AsciiChar;

#078 Length++;

#079 InstallDir[Length] = 0;

#080 CONSOLE_SetInputtextxY(8,InstallDir);

#081 }

#082 }

#083 }

#084

#085 return(INSTALL_DIRECTORY_PAGE);

#086 }

通过上面函数处理,如果选择合适目录,就进入下一步的页面PREPARE_copY_PAGE

原文地址:https://www.jb51.cc/react/308474.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐