13a19ee6aSHermès Bélusca-Maïto /* 23a19ee6aSHermès Bélusca-Maïto * PROJECT: ReactOS Setup Library 33a19ee6aSHermès Bélusca-Maïto * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 43a19ee6aSHermès Bélusca-Maïto * PURPOSE: Public header 53a19ee6aSHermès Bélusca-Maïto * COPYRIGHT: Copyright 2017-2018 Hermes Belusca-Maito 63a19ee6aSHermès Bélusca-Maïto */ 73a19ee6aSHermès Bélusca-Maïto 83a19ee6aSHermès Bélusca-Maïto #pragma once 93a19ee6aSHermès Bélusca-Maïto 109348fe1fSHermès Bélusca-Maïto /* INCLUDES *****************************************************************/ 119348fe1fSHermès Bélusca-Maïto 123a19ee6aSHermès Bélusca-Maïto /* Needed PSDK headers when using this library */ 133a19ee6aSHermès Bélusca-Maïto #if 0 143a19ee6aSHermès Bélusca-Maïto 153a19ee6aSHermès Bélusca-Maïto #define WIN32_NO_STATUS 163a19ee6aSHermès Bélusca-Maïto #define _INC_WINDOWS 173a19ee6aSHermès Bélusca-Maïto #define COM_NO_WINDOWS_H 183a19ee6aSHermès Bélusca-Maïto 19cacae6d9SHermès Bélusca-Maïto #include <winxxx.h> 203a19ee6aSHermès Bélusca-Maïto 213a19ee6aSHermès Bélusca-Maïto #endif 223a19ee6aSHermès Bélusca-Maïto 233a19ee6aSHermès Bélusca-Maïto /* NOTE: Please keep the header inclusion order! */ 243a19ee6aSHermès Bélusca-Maïto 253a19ee6aSHermès Bélusca-Maïto extern HANDLE ProcessHeap; 263a19ee6aSHermès Bélusca-Maïto 273a19ee6aSHermès Bélusca-Maïto #include "errorcode.h" 288f1ab791SHermès Bélusca-Maïto #include "spapisup/fileqsup.h" 298f1ab791SHermès Bélusca-Maïto #include "spapisup/infsupp.h" 306f19c83bSHermès Bélusca-Maïto #include "utils/linklist.h" 316f19c83bSHermès Bélusca-Maïto #include "utils/ntverrsrc.h" 326f19c83bSHermès Bélusca-Maïto // #include "utils/arcname.h" 336f19c83bSHermès Bélusca-Maïto #include "utils/bldrsup.h" 346f19c83bSHermès Bélusca-Maïto #include "utils/filesup.h" 35b51b8ee2SHermès Bélusca-Maïto #include "utils/fsrec.h" 366f19c83bSHermès Bélusca-Maïto #include "utils/genlist.h" 376f19c83bSHermès Bélusca-Maïto #include "utils/inicache.h" 3874c0a37eSHermès Bélusca-Maïto #include "utils/partinfo.h" 396f19c83bSHermès Bélusca-Maïto #include "utils/partlist.h" 406f19c83bSHermès Bélusca-Maïto #include "utils/arcname.h" 416f19c83bSHermès Bélusca-Maïto #include "utils/osdetect.h" 426f19c83bSHermès Bélusca-Maïto #include "utils/regutil.h" 43b3cd5767SHermès Bélusca-Maïto 44b3cd5767SHermès Bélusca-Maïto typedef enum _ARCHITECTURE_TYPE 45b3cd5767SHermès Bélusca-Maïto { 46b3cd5767SHermès Bélusca-Maïto ARCH_PcAT, //< Standard BIOS-based PC-AT 47b3cd5767SHermès Bélusca-Maïto ARCH_NEC98x86, //< NEC PC-98 48b3cd5767SHermès Bélusca-Maïto ARCH_Xbox, //< Original Xbox 49b3cd5767SHermès Bélusca-Maïto ARCH_Arc, //< ARC-based (MIPS, SGI) 50b3cd5767SHermès Bélusca-Maïto ARCH_Efi, //< EFI and UEFI 51b3cd5767SHermès Bélusca-Maïto // Place other architectures supported by the Setup below. 52b3cd5767SHermès Bélusca-Maïto } ARCHITECTURE_TYPE; 53b3cd5767SHermès Bélusca-Maïto 54593bcce9SHermès Bélusca-Maïto #include "bootcode.h" 55593bcce9SHermès Bélusca-Maïto #include "fsutil.h" 56593bcce9SHermès Bélusca-Maïto #include "bootsup.h" 5760d9ea76SHermès Bélusca-Maïto #include "registry.h" 58e405ad25SHermès Bélusca-Maïto #include "mui.h" 597af2f717SHermès Bélusca-Maïto #include "settings.h" 603a19ee6aSHermès Bélusca-Maïto 613d137b05SHermès Bélusca-Maïto // #include "install.h" // See at the end... 623d137b05SHermès Bélusca-Maïto 639348fe1fSHermès Bélusca-Maïto 649348fe1fSHermès Bélusca-Maïto /* DEFINES ******************************************************************/ 659348fe1fSHermès Bélusca-Maïto 669348fe1fSHermès Bélusca-Maïto #define KB ((ULONGLONG)1024) 679348fe1fSHermès Bélusca-Maïto #define MB (KB*KB) 689348fe1fSHermès Bélusca-Maïto #define GB (KB*KB*KB) 699348fe1fSHermès Bélusca-Maïto // #define TB (KB*KB*KB*KB) 709348fe1fSHermès Bélusca-Maïto // #define PB (KB*KB*KB*KB*KB) 719348fe1fSHermès Bélusca-Maïto 729348fe1fSHermès Bélusca-Maïto 737e248feaSHermès Bélusca-Maïto /* TYPEDEFS *****************************************************************/ 747e248feaSHermès Bélusca-Maïto 751a173dfdSHermès Bélusca-Maïto struct _USETUP_DATA; 761a173dfdSHermès Bélusca-Maïto 77f8946314SHermès Bélusca-Maïto typedef VOID 78f8946314SHermès Bélusca-Maïto (__cdecl *PSETUP_ERROR_ROUTINE)(IN struct _USETUP_DATA*, ...); 79f8946314SHermès Bélusca-Maïto 807e248feaSHermès Bélusca-Maïto typedef struct _USETUP_DATA 817e248feaSHermès Bélusca-Maïto { 82f8946314SHermès Bélusca-Maïto /* Error handling *****/ 83f8946314SHermès Bélusca-Maïto ERROR_NUMBER LastErrorNumber; 84f8946314SHermès Bélusca-Maïto PSETUP_ERROR_ROUTINE ErrorRoutine; 85f8946314SHermès Bélusca-Maïto 861a173dfdSHermès Bélusca-Maïto /* Setup INFs *****/ 871a173dfdSHermès Bélusca-Maïto HINF SetupInf; 881a173dfdSHermès Bélusca-Maïto 891a173dfdSHermès Bélusca-Maïto /* Installation *****/ 901a173dfdSHermès Bélusca-Maïto PVOID SetupFileQueue; // HSPFILEQ 911a173dfdSHermès Bélusca-Maïto 927e248feaSHermès Bélusca-Maïto /* SOURCE Paths *****/ 937e248feaSHermès Bélusca-Maïto UNICODE_STRING SourceRootPath; 947e248feaSHermès Bélusca-Maïto UNICODE_STRING SourceRootDir; 957e248feaSHermès Bélusca-Maïto UNICODE_STRING SourcePath; 967e248feaSHermès Bélusca-Maïto 977e248feaSHermès Bélusca-Maïto /* DESTINATION Paths *****/ 987e248feaSHermès Bélusca-Maïto /* 997e248feaSHermès Bélusca-Maïto * Path to the system partition, where the boot manager resides. 1007e248feaSHermès Bélusca-Maïto * On x86 PCs, this is usually the active partition. 1017e248feaSHermès Bélusca-Maïto * On ARC, (u)EFI, ... platforms, this is a dedicated partition. 1027e248feaSHermès Bélusca-Maïto * 1037e248feaSHermès Bélusca-Maïto * For more information, see: 1047e248feaSHermès Bélusca-Maïto * https://en.wikipedia.org/wiki/System_partition_and_boot_partition 1057e248feaSHermès Bélusca-Maïto * http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/boot-and-system-volumes.html 1067e248feaSHermès Bélusca-Maïto * http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/arc-boot-process.html 1077e248feaSHermès Bélusca-Maïto * http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/efi-boot-process.html 1087e248feaSHermès Bélusca-Maïto * http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-system-volume.html 1097e248feaSHermès Bélusca-Maïto * http://homepage.ntlworld.com/jonathan.deboynepollard/FGA/determining-boot-volume.html 1107e248feaSHermès Bélusca-Maïto */ 1117e248feaSHermès Bélusca-Maïto UNICODE_STRING SystemRootPath; 1127e248feaSHermès Bélusca-Maïto 1137e248feaSHermès Bélusca-Maïto /* Path to the installation directory inside the ReactOS boot partition */ 1147e248feaSHermès Bélusca-Maïto UNICODE_STRING DestinationArcPath; /** Equivalent of 'NTOS_INSTALLATION::SystemArcPath' **/ 1151a173dfdSHermès Bélusca-Maïto UNICODE_STRING DestinationPath; /** Equivalent of 'NTOS_INSTALLATION::SystemNtPath' **/ 1167e248feaSHermès Bélusca-Maïto UNICODE_STRING DestinationRootPath; 1177e248feaSHermès Bélusca-Maïto 1181a173dfdSHermès Bélusca-Maïto // FIXME: This is only temporary!! Must be removed later! 1191a173dfdSHermès Bélusca-Maïto UNICODE_STRING InstallPath; 1201a173dfdSHermès Bélusca-Maïto 1217e248feaSHermès Bélusca-Maïto LONG DestinationDiskNumber; 1227e248feaSHermès Bélusca-Maïto LONG DestinationPartitionNumber; 1237e248feaSHermès Bélusca-Maïto 124c9c5fd1aSHermès Bélusca-Maïto LONG BootLoaderLocation; 1257e248feaSHermès Bélusca-Maïto LONG FormatPartition; 1267e248feaSHermès Bélusca-Maïto LONG AutoPartition; 1274ed6b1ffSPierre Schweitzer LONG FsType; 1287e248feaSHermès Bélusca-Maïto 1291a173dfdSHermès Bélusca-Maïto /* Settings lists *****/ 1301a173dfdSHermès Bélusca-Maïto PGENERIC_LIST ComputerList; 1311a173dfdSHermès Bélusca-Maïto PGENERIC_LIST DisplayList; 1321a173dfdSHermès Bélusca-Maïto PGENERIC_LIST KeyboardList; 1331a173dfdSHermès Bélusca-Maïto PGENERIC_LIST LayoutList; 1341a173dfdSHermès Bélusca-Maïto PGENERIC_LIST LanguageList; 1351a173dfdSHermès Bélusca-Maïto 136b02dd8ebSHermès Bélusca-Maïto /* Settings *****/ 1378056081cSHermès Bélusca-Maïto ARCHITECTURE_TYPE ArchType; //< Target architecture (MachineType) 138b02dd8ebSHermès Bélusca-Maïto PCWSTR ComputerType; 139b02dd8ebSHermès Bélusca-Maïto PCWSTR DisplayType; 140b02dd8ebSHermès Bélusca-Maïto // PCWSTR KeyboardDriver; 141b02dd8ebSHermès Bélusca-Maïto // PCWSTR MouseDriver; 142b02dd8ebSHermès Bélusca-Maïto PCWSTR LayoutId; // DefaultKBLayout 143b02dd8ebSHermès Bélusca-Maïto 1441a173dfdSHermès Bélusca-Maïto /* Other stuff *****/ 1457e248feaSHermès Bélusca-Maïto WCHAR LocaleID[9]; 1467e248feaSHermès Bélusca-Maïto LANGID LanguageId; 1477e248feaSHermès Bélusca-Maïto 1487e248feaSHermès Bélusca-Maïto ULONG RequiredPartitionDiskSpace; 1497e248feaSHermès Bélusca-Maïto WCHAR InstallationDirectory[MAX_PATH]; 1507e248feaSHermès Bélusca-Maïto } USETUP_DATA, *PUSETUP_DATA; 1517e248feaSHermès Bélusca-Maïto 1523d137b05SHermès Bélusca-Maïto 1533d137b05SHermès Bélusca-Maïto #include "install.h" 1543d137b05SHermès Bélusca-Maïto 1553d137b05SHermès Bélusca-Maïto 1567e248feaSHermès Bélusca-Maïto // HACK!! 1577e248feaSHermès Bélusca-Maïto extern BOOLEAN IsUnattendedSetup; 1587e248feaSHermès Bélusca-Maïto 1597e248feaSHermès Bélusca-Maïto 1607e248feaSHermès Bélusca-Maïto /* FUNCTIONS ****************************************************************/ 1617e248feaSHermès Bélusca-Maïto 162b539dd1cSKatayama Hirofumi MZ #include "substset.h" 163b539dd1cSKatayama Hirofumi MZ 1647e248feaSHermès Bélusca-Maïto VOID 1657e248feaSHermès Bélusca-Maïto CheckUnattendedSetup( 1667e248feaSHermès Bélusca-Maïto IN OUT PUSETUP_DATA pSetupData); 1677e248feaSHermès Bélusca-Maïto 1687e248feaSHermès Bélusca-Maïto VOID 1697e248feaSHermès Bélusca-Maïto InstallSetupInfFile( 1707e248feaSHermès Bélusca-Maïto IN OUT PUSETUP_DATA pSetupData); 1717e248feaSHermès Bélusca-Maïto 1727e248feaSHermès Bélusca-Maïto NTSTATUS 1737e248feaSHermès Bélusca-Maïto GetSourcePaths( 174*3ddb05d4SHermès Bélusca-Maïto _Out_ PUNICODE_STRING SourcePath, 175*3ddb05d4SHermès Bélusca-Maïto _Out_ PUNICODE_STRING SourceRootPath, 176*3ddb05d4SHermès Bélusca-Maïto _Out_ PUNICODE_STRING SourceRootDir); 1777e248feaSHermès Bélusca-Maïto 1787e248feaSHermès Bélusca-Maïto ERROR_NUMBER 1797e248feaSHermès Bélusca-Maïto LoadSetupInf( 1801a173dfdSHermès Bélusca-Maïto IN OUT PUSETUP_DATA pSetupData); 1811a173dfdSHermès Bélusca-Maïto 182a7a7e6a0SHermès Bélusca-Maïto #define ERROR_SYSTEM_PARTITION_NOT_FOUND (ERROR_LAST_ERROR_CODE + 1) 183a7a7e6a0SHermès Bélusca-Maïto 184a7a7e6a0SHermès Bélusca-Maïto BOOLEAN 185a7a7e6a0SHermès Bélusca-Maïto InitSystemPartition( 186a7a7e6a0SHermès Bélusca-Maïto /**/_In_ PPARTLIST PartitionList, /* HACK HACK! */ 187a7a7e6a0SHermès Bélusca-Maïto /**/_In_ PPARTENTRY InstallPartition, /* HACK HACK! */ 188a7a7e6a0SHermès Bélusca-Maïto /**/_Out_ PPARTENTRY* pSystemPartition, /* HACK HACK! */ 189a7a7e6a0SHermès Bélusca-Maïto _In_opt_ PFSVOL_CALLBACK FsVolCallback, 190a7a7e6a0SHermès Bélusca-Maïto _In_opt_ PVOID Context); 191a7a7e6a0SHermès Bélusca-Maïto 192259abe59SHermès Bélusca-Maïto /** 193259abe59SHermès Bélusca-Maïto * @brief 194259abe59SHermès Bélusca-Maïto * Defines the class of characters valid for the installation directory. 195259abe59SHermès Bélusca-Maïto * 196259abe59SHermès Bélusca-Maïto * The valid characters are: ASCII alphanumericals (a-z, A-Z, 0-9), 197259abe59SHermès Bélusca-Maïto * and: '.', '\\', '-', '_' . Spaces are not allowed. 198259abe59SHermès Bélusca-Maïto **/ 199785cc215SHermès Bélusca-Maïto #define IS_VALID_INSTALL_PATH_CHAR(c) \ 200259abe59SHermès Bélusca-Maïto (isalnum(c) || (c) == L'.' || (c) == L'\\' || (c) == L'-' || (c) == L'_') 201785cc215SHermès Bélusca-Maïto 202785cc215SHermès Bélusca-Maïto BOOLEAN 203785cc215SHermès Bélusca-Maïto IsValidInstallDirectory( 204785cc215SHermès Bélusca-Maïto _In_ PCWSTR InstallDir); 205785cc215SHermès Bélusca-Maïto 2061a173dfdSHermès Bélusca-Maïto NTSTATUS 2071a173dfdSHermès Bélusca-Maïto InitDestinationPaths( 2086f15802aSHermès Bélusca-Maïto _Inout_ PUSETUP_DATA pSetupData, 2096f15802aSHermès Bélusca-Maïto _In_ PCWSTR InstallationDir, 2106f15802aSHermès Bélusca-Maïto _In_ PVOLENTRY Volume); 2111a173dfdSHermès Bélusca-Maïto 2121a173dfdSHermès Bélusca-Maïto // NTSTATUS 2131a173dfdSHermès Bélusca-Maïto ERROR_NUMBER 2141a173dfdSHermès Bélusca-Maïto InitializeSetup( 2151a173dfdSHermès Bélusca-Maïto IN OUT PUSETUP_DATA pSetupData, 2161a173dfdSHermès Bélusca-Maïto IN ULONG InitPhase); 2171a173dfdSHermès Bélusca-Maïto 2181a173dfdSHermès Bélusca-Maïto VOID 2191a173dfdSHermès Bélusca-Maïto FinishSetup( 2207e248feaSHermès Bélusca-Maïto IN OUT PUSETUP_DATA pSetupData); 2217e248feaSHermès Bélusca-Maïto 2227e248feaSHermès Bélusca-Maïto 2236c2d3deeSHermès Bélusca-Maïto typedef enum _REGISTRY_STATUS 2246c2d3deeSHermès Bélusca-Maïto { 2256c2d3deeSHermès Bélusca-Maïto Success = 0, 2266c2d3deeSHermès Bélusca-Maïto RegHiveUpdate, 2276c2d3deeSHermès Bélusca-Maïto ImportRegHive, 2286c2d3deeSHermès Bélusca-Maïto DisplaySettingsUpdate, 2296c2d3deeSHermès Bélusca-Maïto LocaleSettingsUpdate, 2306c2d3deeSHermès Bélusca-Maïto KeybLayouts, 2316c2d3deeSHermès Bélusca-Maïto KeybSettingsUpdate, 2326c2d3deeSHermès Bélusca-Maïto CodePageInfoUpdate, 2336c2d3deeSHermès Bélusca-Maïto } REGISTRY_STATUS; 2346c2d3deeSHermès Bélusca-Maïto 2356c2d3deeSHermès Bélusca-Maïto typedef VOID 2366c2d3deeSHermès Bélusca-Maïto (__cdecl *PREGISTRY_STATUS_ROUTINE)(IN REGISTRY_STATUS, ...); 2376c2d3deeSHermès Bélusca-Maïto 2386c2d3deeSHermès Bélusca-Maïto ERROR_NUMBER 2396c2d3deeSHermès Bélusca-Maïto UpdateRegistry( 2406c2d3deeSHermès Bélusca-Maïto IN OUT PUSETUP_DATA pSetupData, 2416c2d3deeSHermès Bélusca-Maïto /**/IN BOOLEAN RepairUpdateFlag, /* HACK HACK! */ 2426c2d3deeSHermès Bélusca-Maïto /**/IN PPARTLIST PartitionList, /* HACK HACK! */ 2436c2d3deeSHermès Bélusca-Maïto /**/IN WCHAR DestinationDriveLetter, /* HACK HACK! */ 2446c2d3deeSHermès Bélusca-Maïto /**/IN PCWSTR SelectedLanguageId, /* HACK HACK! */ 245b539dd1cSKatayama Hirofumi MZ IN PREGISTRY_STATUS_ROUTINE StatusRoutine OPTIONAL, 246b539dd1cSKatayama Hirofumi MZ IN PFONTSUBSTSETTINGS SubstSettings OPTIONAL); 2476c2d3deeSHermès Bélusca-Maïto 2483a19ee6aSHermès Bélusca-Maïto /* EOF */ 249