当用户安装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 }
原文链接:https://www.f2er.com/react/308474.html