mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +00:00
- Add setupblk.h from TinyKRNL with all the definitions for NT's SETUPLDR structures (SETUP_LOADER_BLOCK and hardware configuration stuff). Update KiRosFrldrLpbToNtLpb to setup the Flags field of this block to "Text-Mode Setup Active" when we know that we're in ROS text mode.
- Update ExpInitializeExecutive to check for a valid setup block and detect text-mode and network installation modes. Use ExpInTextModeSetup instead of SetupMode variable, to make detection compatible with NTLDR. svn path=/trunk/; revision=24347
This commit is contained in:
parent
cbfbbdb7f1
commit
9f40202dfc
7 changed files with 195 additions and 23 deletions
|
@ -24,20 +24,6 @@ typedef enum _CONFIGURATION_CLASS
|
||||||
MaximumClass
|
MaximumClass
|
||||||
} CONFIGURATION_CLASS;
|
} CONFIGURATION_CLASS;
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
HwFileDriver,
|
|
||||||
HwFilePort,
|
|
||||||
HwFileClass,
|
|
||||||
HwFileInf,
|
|
||||||
HwFileDll,
|
|
||||||
HwFileDetect,
|
|
||||||
HwFileHal,
|
|
||||||
HwFileCatalog,
|
|
||||||
HwFileMax,
|
|
||||||
HwFileDynUpdt = 31,
|
|
||||||
} HwFileType;
|
|
||||||
|
|
||||||
typedef enum _TYPE_OF_MEMORY
|
typedef enum _TYPE_OF_MEMORY
|
||||||
{
|
{
|
||||||
LoaderExceptionBlock,
|
LoaderExceptionBlock,
|
||||||
|
|
152
reactos/include/reactos/arc/setupblk.h
Normal file
152
reactos/include/reactos/arc/setupblk.h
Normal file
|
@ -0,0 +1,152 @@
|
||||||
|
#ifndef _SETUPBLK_
|
||||||
|
#define _SETUPBLK_
|
||||||
|
|
||||||
|
//
|
||||||
|
// Type of file described in DETECTED_DEVICE_FILE
|
||||||
|
//
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HwFileDriver,
|
||||||
|
HwFilePort,
|
||||||
|
HwFileClass,
|
||||||
|
HwFileInf,
|
||||||
|
HwFileDll,
|
||||||
|
HwFileDetect,
|
||||||
|
HwFileHal,
|
||||||
|
HwFileCatalog,
|
||||||
|
HwFileMax,
|
||||||
|
HwFileDynUpdt = 31,
|
||||||
|
} HwFileType;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Hardware ID for the detected device
|
||||||
|
//
|
||||||
|
typedef struct _PNP_HARDWARE_ID
|
||||||
|
{
|
||||||
|
struct _PNP_HARDWARE_ID *Next;
|
||||||
|
PCHAR Id;
|
||||||
|
PCHAR DriverName;
|
||||||
|
PCHAR ClassGuid;
|
||||||
|
} PNP_HARDWARE_ID, *PPNP_HARDWARE_ID;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Structures for detected device data (file/registry)
|
||||||
|
//
|
||||||
|
typedef struct _DETECTED_DEVICE_REGISTRY
|
||||||
|
{
|
||||||
|
struct _DETECTED_DEVICE_REGISTRY *Next;
|
||||||
|
PCHAR KeyName;
|
||||||
|
PCHAR ValueName;
|
||||||
|
ULONG ValueType;
|
||||||
|
PVOID Buffer;
|
||||||
|
ULONG BufferSize;
|
||||||
|
} DETECTED_DEVICE_REGISTRY, *PDETECTED_DEVICE_REGISTRY;
|
||||||
|
|
||||||
|
typedef struct _DETECTED_DEVICE_FILE
|
||||||
|
{
|
||||||
|
struct _DETECTED_DEVICE_FILE *Next;
|
||||||
|
PCHAR FileName;
|
||||||
|
HwFileType FileType;
|
||||||
|
PCHAR ConfigName;
|
||||||
|
PDETECTED_DEVICE_REGISTRY RegistryValueList;
|
||||||
|
PCHAR DiskDescription;
|
||||||
|
PCHAR DiskTagfile;
|
||||||
|
PCHAR Directory;
|
||||||
|
PCHAR ArcDeviceName;
|
||||||
|
} DETECTED_DEVICE_FILE, *PDETECTED_DEVICE_FILE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Structure for any detected device
|
||||||
|
//
|
||||||
|
typedef struct _DETECTED_DEVICE
|
||||||
|
{
|
||||||
|
struct _DETECTED_DEVICE *Next;
|
||||||
|
PCHAR IdString;
|
||||||
|
ULONG Ordinal;
|
||||||
|
PCHAR Description;
|
||||||
|
BOOLEAN ThirdPartyOptionSelected;
|
||||||
|
ULONG FileTypeBits;
|
||||||
|
PDETECTED_DEVICE_FILE Files;
|
||||||
|
PCHAR BasedllName;
|
||||||
|
BOOLEAN MigratedDriver;
|
||||||
|
PPNP_HARDWARE_ID HardwareIds;
|
||||||
|
} DETECTED_DEVICE, *PDETECTED_DEVICE;
|
||||||
|
|
||||||
|
typedef struct _DETECTED_OEM_SOURCE_DEVICE
|
||||||
|
{
|
||||||
|
struct _DETECTED_OEM_SOURCE_DEVICE *Next;
|
||||||
|
PCHAR ArcDeviceName;
|
||||||
|
ULONG ImageBase;
|
||||||
|
ULONGLONG ImageSize;
|
||||||
|
} DETECTED_OEM_SOURCE_DEVICE, *PDETECTED_OEM_SOURCE_DEVICE;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Setup Loader Parameter Block
|
||||||
|
//
|
||||||
|
typedef struct _SETUP_LOADER_BLOCK_SCALARS
|
||||||
|
{
|
||||||
|
ULONG SetupOperation;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
UCHAR SetupFromCdRom:1;
|
||||||
|
UCHAR LoadedScsi:1;
|
||||||
|
UCHAR LoadedFloppyDrivers:1;
|
||||||
|
UCHAR LoadedDiskDrivers:1;
|
||||||
|
UCHAR LoadedCdRomDrivers:1;
|
||||||
|
UCHAR LoadedFileSystems:1;
|
||||||
|
};
|
||||||
|
ULONG AsULong;
|
||||||
|
};
|
||||||
|
} SETUP_LOADER_BLOCK_SCALARS, *PSETUP_LOADER_BLOCK_SCALARS;
|
||||||
|
|
||||||
|
typedef struct _SETUP_LOADER_BLOCK
|
||||||
|
{
|
||||||
|
PCHAR ArcSetupDeviceName;
|
||||||
|
DETECTED_DEVICE VideoDevice;
|
||||||
|
PDETECTED_DEVICE KeyboardDevices;
|
||||||
|
DETECTED_DEVICE ComputerDevice;
|
||||||
|
PDETECTED_DEVICE ScsiDevices;
|
||||||
|
PDETECTED_OEM_SOURCE_DEVICE OemSourceDevices;
|
||||||
|
SETUP_LOADER_BLOCK_SCALARS ScalarValues;
|
||||||
|
PCHAR IniFile;
|
||||||
|
ULONG IniFileLength;
|
||||||
|
PCHAR WinntSifFile;
|
||||||
|
ULONG WinntSifFileLength;
|
||||||
|
PCHAR MigrateInfFile;
|
||||||
|
ULONG MigrateInfFileLength;
|
||||||
|
PCHAR UnsupDriversInfFile;
|
||||||
|
ULONG UnsupDriversInfFileLength;
|
||||||
|
PVOID BootFontFile;
|
||||||
|
ULONG BootFontFileLength;
|
||||||
|
MONITOR_CONFIGURATION_DATA Monitor;
|
||||||
|
PCHAR MonitorId;
|
||||||
|
PDETECTED_DEVICE BootBusExtenders;
|
||||||
|
PDETECTED_DEVICE BusExtenders;
|
||||||
|
PDETECTED_DEVICE InputDevicesSupport;
|
||||||
|
PPNP_HARDWARE_ID HardwareIdDatabase;
|
||||||
|
WCHAR ComputerName[64];
|
||||||
|
ULONG IpAddress;
|
||||||
|
ULONG SubnetMask;
|
||||||
|
ULONG ServerIpAddress;
|
||||||
|
ULONG DefaultRouter;
|
||||||
|
ULONG DnsNameServer;
|
||||||
|
WCHAR NetbootCardHardwareId[64];
|
||||||
|
WCHAR NetbootCardDriverName[24];
|
||||||
|
WCHAR NetbootCardServiceName[24];
|
||||||
|
PCHAR NetbootCardRegistry;
|
||||||
|
ULONG NetbootCardRegistryLength;
|
||||||
|
PCHAR NetbootCardInfo;
|
||||||
|
ULONG NetbootCardInfoLength;
|
||||||
|
ULONG Flags;
|
||||||
|
PCHAR MachineDirectoryPath;
|
||||||
|
PCHAR NetBootSifPath;
|
||||||
|
PVOID NetBootSecret;
|
||||||
|
CHAR NetBootIMirrorFilePath[26];
|
||||||
|
PCHAR ASRPnPSifFile;
|
||||||
|
ULONG ASRPnPSifFileLength;
|
||||||
|
CHAR NetBootAdministratorPassword[64];
|
||||||
|
} SETUP_LOADER_BLOCK, *PSETUP_LOADER_BLOCK;
|
||||||
|
|
||||||
|
#endif
|
|
@ -41,7 +41,6 @@ extern PRTL_MESSAGE_RESOURCE_DATA KiBugCodeMessages;
|
||||||
BOOLEAN NoGuiBoot = FALSE;
|
BOOLEAN NoGuiBoot = FALSE;
|
||||||
static BOOLEAN BootLog = FALSE;
|
static BOOLEAN BootLog = FALSE;
|
||||||
static ULONG MaxMem = 0;
|
static ULONG MaxMem = 0;
|
||||||
BOOLEAN SetupMode = TRUE;
|
|
||||||
static BOOLEAN ForceAcpiDisable = FALSE;
|
static BOOLEAN ForceAcpiDisable = FALSE;
|
||||||
|
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
|
@ -51,6 +50,8 @@ PspInitPhase0(
|
||||||
);
|
);
|
||||||
|
|
||||||
ULONG ExpInitializationPhase;
|
ULONG ExpInitializationPhase;
|
||||||
|
BOOLEAN ExpInTextModeSetup;
|
||||||
|
BOOLEAN IoRemoteBootClient;
|
||||||
|
|
||||||
/* FUNCTIONS ****************************************************************/
|
/* FUNCTIONS ****************************************************************/
|
||||||
|
|
||||||
|
@ -279,7 +280,6 @@ ParseAndCacheLoadedModules(VOID)
|
||||||
} else if (!_stricmp(Name, "system") || !_stricmp(Name, "system.hiv")) {
|
} else if (!_stricmp(Name, "system") || !_stricmp(Name, "system.hiv")) {
|
||||||
|
|
||||||
CachedModules[SystemRegistry] = &KeLoaderModules[i];
|
CachedModules[SystemRegistry] = &KeLoaderModules[i];
|
||||||
SetupMode = FALSE;
|
|
||||||
|
|
||||||
} else if (!_stricmp(Name, "hardware") || !_stricmp(Name, "hardware.hiv")) {
|
} else if (!_stricmp(Name, "hardware") || !_stricmp(Name, "hardware.hiv")) {
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ ExpDisplayNotice(VOID)
|
||||||
{
|
{
|
||||||
CHAR str[50];
|
CHAR str[50];
|
||||||
|
|
||||||
if (SetupMode)
|
if (ExpInTextModeSetup)
|
||||||
{
|
{
|
||||||
HalDisplayString(
|
HalDisplayString(
|
||||||
"\n\n\n ReactOS " KERNEL_VERSION_STR " Setup \n");
|
"\n\n\n ReactOS " KERNEL_VERSION_STR " Setup \n");
|
||||||
|
@ -534,6 +534,30 @@ ExpInitializeExecutive(IN ULONG Cpu,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Assume no text-mode or remote boot */
|
||||||
|
ExpInTextModeSetup = FALSE;
|
||||||
|
IoRemoteBootClient = FALSE;
|
||||||
|
|
||||||
|
/* Check if we have a setup loader block */
|
||||||
|
if (LoaderBlock->SetupLdrBlock)
|
||||||
|
{
|
||||||
|
/* Check if this is text-mode setup */
|
||||||
|
if (LoaderBlock->SetupLdrBlock->Flags & 1) ExpInTextModeSetup = TRUE;
|
||||||
|
|
||||||
|
/* Check if this is network boot */
|
||||||
|
if (LoaderBlock->SetupLdrBlock->Flags & 2)
|
||||||
|
{
|
||||||
|
/* Set variable */
|
||||||
|
IoRemoteBootClient = TRUE;
|
||||||
|
|
||||||
|
/* Make sure we're actually booting off the network */
|
||||||
|
ASSERT(!_memicmp(LoaderBlock->ArcBootDeviceName, "net(0)", 6));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set phase to 0 */
|
||||||
|
ExpInitializationPhase = 0;
|
||||||
|
|
||||||
/* Initialize HAL */
|
/* Initialize HAL */
|
||||||
HalInitSystem (0, KeLoaderBlock);
|
HalInitSystem (0, KeLoaderBlock);
|
||||||
|
|
||||||
|
@ -658,7 +682,7 @@ ExPhase2Init(PVOID Context)
|
||||||
RtlpInitNls();
|
RtlpInitNls();
|
||||||
|
|
||||||
/* Import and Load Registry Hives */
|
/* Import and Load Registry Hives */
|
||||||
CmInitHives(SetupMode);
|
CmInitHives(ExpInTextModeSetup);
|
||||||
|
|
||||||
/* Initialize VDM support */
|
/* Initialize VDM support */
|
||||||
KeI386VdmInitialize();
|
KeI386VdmInitialize();
|
||||||
|
|
|
@ -44,6 +44,9 @@
|
||||||
#define ExRaiseStatus RtlRaiseStatus
|
#define ExRaiseStatus RtlRaiseStatus
|
||||||
#include <reactos/probe.h>
|
#include <reactos/probe.h>
|
||||||
|
|
||||||
|
/* SetupLDR Support */
|
||||||
|
#include <arc/setupblk.h>
|
||||||
|
|
||||||
/* PNP GUIDs */
|
/* PNP GUIDs */
|
||||||
#include <umpnpmgr/sysguid.h>
|
#include <umpnpmgr/sysguid.h>
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ UNICODE_STRING IopHardwareDatabaseKey =
|
||||||
|
|
||||||
POBJECT_TYPE IoDriverObjectType = NULL;
|
POBJECT_TYPE IoDriverObjectType = NULL;
|
||||||
|
|
||||||
extern BOOLEAN SetupMode;
|
extern BOOLEAN ExpInTextModeSetup;
|
||||||
extern BOOLEAN NoGuiBoot;
|
extern BOOLEAN NoGuiBoot;
|
||||||
|
|
||||||
/* DECLARATIONS ***************************************************************/
|
/* DECLARATIONS ***************************************************************/
|
||||||
|
@ -311,7 +311,7 @@ IopDisplayLoadingMessage(PVOID ServiceName,
|
||||||
BOOLEAN Unicode)
|
BOOLEAN Unicode)
|
||||||
{
|
{
|
||||||
CHAR TextBuffer[256];
|
CHAR TextBuffer[256];
|
||||||
if (SetupMode || !NoGuiBoot) return;
|
if (ExpInTextModeSetup || !NoGuiBoot) return;
|
||||||
if (Unicode)
|
if (Unicode)
|
||||||
{
|
{
|
||||||
sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
|
sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
|
||||||
|
|
|
@ -41,7 +41,6 @@ typedef struct _SERVICE
|
||||||
|
|
||||||
LIST_ENTRY GroupListHead = {NULL, NULL};
|
LIST_ENTRY GroupListHead = {NULL, NULL};
|
||||||
LIST_ENTRY ServiceListHead = {NULL, NULL};
|
LIST_ENTRY ServiceListHead = {NULL, NULL};
|
||||||
extern BOOLEAN SetupMode;
|
|
||||||
extern BOOLEAN NoGuiBoot;
|
extern BOOLEAN NoGuiBoot;
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
|
|
@ -47,6 +47,7 @@ LDR_DATA_TABLE_ENTRY BldrModules[64];
|
||||||
MEMORY_ALLOCATION_DESCRIPTOR BldrMemoryDescriptors[64];
|
MEMORY_ALLOCATION_DESCRIPTOR BldrMemoryDescriptors[64];
|
||||||
WCHAR BldrModuleStrings[64][260];
|
WCHAR BldrModuleStrings[64][260];
|
||||||
NLS_DATA_BLOCK BldrNlsDataBlock;
|
NLS_DATA_BLOCK BldrNlsDataBlock;
|
||||||
|
SETUP_LOADER_BLOCK BldrSetupBlock;
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
||||||
|
@ -78,8 +79,8 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
|
||||||
/* Set the NLS Data block */
|
/* Set the NLS Data block */
|
||||||
LoaderBlock->NlsData = &BldrNlsDataBlock;
|
LoaderBlock->NlsData = &BldrNlsDataBlock;
|
||||||
|
|
||||||
/* Set an invalid pointer, but used as a flag (SetupBoot) */
|
/* Assume this is from FreeLDR's SetupLdr */
|
||||||
LoaderBlock->SetupLdrBlock = (PVOID)1;
|
LoaderBlock->SetupLdrBlock = &BldrSetupBlock;
|
||||||
|
|
||||||
/* Setup the list heads */
|
/* Setup the list heads */
|
||||||
InitializeListHead(&LoaderBlock->LoadOrderListHead);
|
InitializeListHead(&LoaderBlock->LoadOrderListHead);
|
||||||
|
@ -248,6 +249,13 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
|
||||||
LoaderBlock->Extension->Size = sizeof(LOADER_PARAMETER_EXTENSION);
|
LoaderBlock->Extension->Size = sizeof(LOADER_PARAMETER_EXTENSION);
|
||||||
LoaderBlock->Extension->MajorVersion = 5;
|
LoaderBlock->Extension->MajorVersion = 5;
|
||||||
LoaderBlock->Extension->MinorVersion = 2;
|
LoaderBlock->Extension->MinorVersion = 2;
|
||||||
|
|
||||||
|
/* Now setup the setup block if we have one */
|
||||||
|
if (LoaderBlock->SetupLdrBlock)
|
||||||
|
{
|
||||||
|
/* All we'll setup right now is the flag for text-mode setup */
|
||||||
|
LoaderBlock->SetupLdrBlock->Flags = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
|
|
Loading…
Reference in a new issue