xref: /reactos/base/setup/lib/setuplib.h (revision 3ddb05d4)
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