mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +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
|
||||
} CONFIGURATION_CLASS;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
HwFileDriver,
|
||||
HwFilePort,
|
||||
HwFileClass,
|
||||
HwFileInf,
|
||||
HwFileDll,
|
||||
HwFileDetect,
|
||||
HwFileHal,
|
||||
HwFileCatalog,
|
||||
HwFileMax,
|
||||
HwFileDynUpdt = 31,
|
||||
} HwFileType;
|
||||
|
||||
typedef enum _TYPE_OF_MEMORY
|
||||
{
|
||||
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;
|
||||
static BOOLEAN BootLog = FALSE;
|
||||
static ULONG MaxMem = 0;
|
||||
BOOLEAN SetupMode = TRUE;
|
||||
static BOOLEAN ForceAcpiDisable = FALSE;
|
||||
|
||||
BOOLEAN
|
||||
|
@ -51,6 +50,8 @@ PspInitPhase0(
|
|||
);
|
||||
|
||||
ULONG ExpInitializationPhase;
|
||||
BOOLEAN ExpInTextModeSetup;
|
||||
BOOLEAN IoRemoteBootClient;
|
||||
|
||||
/* FUNCTIONS ****************************************************************/
|
||||
|
||||
|
@ -279,7 +280,6 @@ ParseAndCacheLoadedModules(VOID)
|
|||
} else if (!_stricmp(Name, "system") || !_stricmp(Name, "system.hiv")) {
|
||||
|
||||
CachedModules[SystemRegistry] = &KeLoaderModules[i];
|
||||
SetupMode = FALSE;
|
||||
|
||||
} else if (!_stricmp(Name, "hardware") || !_stricmp(Name, "hardware.hiv")) {
|
||||
|
||||
|
@ -361,7 +361,7 @@ ExpDisplayNotice(VOID)
|
|||
{
|
||||
CHAR str[50];
|
||||
|
||||
if (SetupMode)
|
||||
if (ExpInTextModeSetup)
|
||||
{
|
||||
HalDisplayString(
|
||||
"\n\n\n ReactOS " KERNEL_VERSION_STR " Setup \n");
|
||||
|
@ -534,6 +534,30 @@ ExpInitializeExecutive(IN ULONG Cpu,
|
|||
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 */
|
||||
HalInitSystem (0, KeLoaderBlock);
|
||||
|
||||
|
@ -658,7 +682,7 @@ ExPhase2Init(PVOID Context)
|
|||
RtlpInitNls();
|
||||
|
||||
/* Import and Load Registry Hives */
|
||||
CmInitHives(SetupMode);
|
||||
CmInitHives(ExpInTextModeSetup);
|
||||
|
||||
/* Initialize VDM support */
|
||||
KeI386VdmInitialize();
|
||||
|
|
|
@ -44,6 +44,9 @@
|
|||
#define ExRaiseStatus RtlRaiseStatus
|
||||
#include <reactos/probe.h>
|
||||
|
||||
/* SetupLDR Support */
|
||||
#include <arc/setupblk.h>
|
||||
|
||||
/* PNP GUIDs */
|
||||
#include <umpnpmgr/sysguid.h>
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ UNICODE_STRING IopHardwareDatabaseKey =
|
|||
|
||||
POBJECT_TYPE IoDriverObjectType = NULL;
|
||||
|
||||
extern BOOLEAN SetupMode;
|
||||
extern BOOLEAN ExpInTextModeSetup;
|
||||
extern BOOLEAN NoGuiBoot;
|
||||
|
||||
/* DECLARATIONS ***************************************************************/
|
||||
|
@ -311,7 +311,7 @@ IopDisplayLoadingMessage(PVOID ServiceName,
|
|||
BOOLEAN Unicode)
|
||||
{
|
||||
CHAR TextBuffer[256];
|
||||
if (SetupMode || !NoGuiBoot) return;
|
||||
if (ExpInTextModeSetup || !NoGuiBoot) return;
|
||||
if (Unicode)
|
||||
{
|
||||
sprintf(TextBuffer, "Loading %S...\n", (PWCHAR)ServiceName);
|
||||
|
|
|
@ -41,7 +41,6 @@ typedef struct _SERVICE
|
|||
|
||||
LIST_ENTRY GroupListHead = {NULL, NULL};
|
||||
LIST_ENTRY ServiceListHead = {NULL, NULL};
|
||||
extern BOOLEAN SetupMode;
|
||||
extern BOOLEAN NoGuiBoot;
|
||||
|
||||
VOID
|
||||
|
|
|
@ -47,6 +47,7 @@ LDR_DATA_TABLE_ENTRY BldrModules[64];
|
|||
MEMORY_ALLOCATION_DESCRIPTOR BldrMemoryDescriptors[64];
|
||||
WCHAR BldrModuleStrings[64][260];
|
||||
NLS_DATA_BLOCK BldrNlsDataBlock;
|
||||
SETUP_LOADER_BLOCK BldrSetupBlock;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
|
@ -78,8 +79,8 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
|
|||
/* Set the NLS Data block */
|
||||
LoaderBlock->NlsData = &BldrNlsDataBlock;
|
||||
|
||||
/* Set an invalid pointer, but used as a flag (SetupBoot) */
|
||||
LoaderBlock->SetupLdrBlock = (PVOID)1;
|
||||
/* Assume this is from FreeLDR's SetupLdr */
|
||||
LoaderBlock->SetupLdrBlock = &BldrSetupBlock;
|
||||
|
||||
/* Setup the list heads */
|
||||
InitializeListHead(&LoaderBlock->LoadOrderListHead);
|
||||
|
@ -248,6 +249,13 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
|
|||
LoaderBlock->Extension->Size = sizeof(LOADER_PARAMETER_EXTENSION);
|
||||
LoaderBlock->Extension->MajorVersion = 5;
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue