781 lines
14 KiB
C
781 lines
14 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1992 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
setupldr.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Common header file for the setupldr module
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
John Vert (jvert) 6-Oct-1993
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
ARC environment
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
#include "bldr.h"
|
|||
|
#include "haldtect.h"
|
|||
|
#include "setupblk.h"
|
|||
|
#include "msgs.h"
|
|||
|
#include "stdio.h"
|
|||
|
#include "stdarg.h"
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// OEM source device types
|
|||
|
//
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE_LOCAL 0x00008000
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE_REMOVABLE 0x00000001
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE_FIXED 0x00000002
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE_PREINSTALL 0x10000000
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE_DYN_UPDATE 0x20000000
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE_VIRTUAL 0x40000000
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE_REMOTE 0x80000000
|
|||
|
|
|||
|
//
|
|||
|
// OEM source device media states
|
|||
|
//
|
|||
|
#define SL_OEM_SOURCE_MEDIA_ABSENT 0x00000001
|
|||
|
#define SL_OEM_SOURCE_MEDIA_NO_DRIVERS 0x00000002
|
|||
|
#define SL_OEM_SOURCE_MEDIA_HAS_MSD 0x00000004
|
|||
|
#define SL_OEM_SOURCE_MEDIA_HAS_HAL 0x00000008
|
|||
|
#define SL_OEM_SOURCE_MEDIA_HAS_DEFAULT 0x20000000
|
|||
|
#define SL_OEM_SOURCE_MEDIA_HAS_DRIVERS 0x40000000
|
|||
|
#define SL_OEM_SOURCE_MEDIA_PRESENT 0x80000000
|
|||
|
|
|||
|
//
|
|||
|
// OEM source device processing states
|
|||
|
//
|
|||
|
#define SL_OEM_SOURCE_DEVICE_NOT_PROCESSED 0x00000000
|
|||
|
#define SL_OEM_SOURCE_DEVICE_PROCESSED 0x00000001
|
|||
|
#define SL_OEM_SOURCE_DEVICE_SKIPPED 0x00000002
|
|||
|
#define SL_OEM_SOURCE_DEVICE_SCANNED 0x00000004
|
|||
|
#define SL_OEM_SOURCE_DEVICE_HAL_LOADED 0x00000008
|
|||
|
#define SL_OEM_SOURCE_DEVICE_MSD_LOADED 0x00000010
|
|||
|
#define SL_OEM_SOURCE_DEVICE_DRIVERS_LOADED 0x40000000
|
|||
|
#define SL_OEM_SOURCE_DEVICE_PROCESSING 0x80000000
|
|||
|
|
|||
|
typedef struct _OEM_SOURCE_DEVICE {
|
|||
|
CHAR ArcDeviceName[128];
|
|||
|
ULONG DeviceType;
|
|||
|
ULONG MediaType;
|
|||
|
ULONG DeviceState;
|
|||
|
ULONG DeviceId;
|
|||
|
PVOID InfHandle;
|
|||
|
PCSTR DriverDir;
|
|||
|
struct _OEM_SOURCE_DEVICE *Next;
|
|||
|
} OEM_SOURCE_DEVICE, *POEM_SOURCE_DEVICE;
|
|||
|
|
|||
|
|
|||
|
#define SL_OEM_SOURCE_DEVICE_TYPE(DevicePtr, Type) \
|
|||
|
((DevicePtr)->DeviceType & (Type))
|
|||
|
|
|||
|
#define SL_OEM_SET_SOURCE_DEVICE_TYPE(DevicePtr, Type) \
|
|||
|
((DevicePtr)->DeviceType = (Type))
|
|||
|
|
|||
|
#define SL_OEM_SOURCE_MEDIA_TYPE(DevicePtr, Type) \
|
|||
|
((DevicePtr)->MediaType & (Type))
|
|||
|
|
|||
|
#define SL_OEM_SET_SOURCE_MEDIA_TYPE(DevicePtr, Type) \
|
|||
|
((DevicePtr)->MediaType = (Type))
|
|||
|
|
|||
|
#define SL_OEM_SOURCE_DEVICE_STATE(DevicePtr, Type) \
|
|||
|
((DevicePtr)->DeviceState & (Type))
|
|||
|
|
|||
|
#define SL_OEM_SET_SOURCE_DEVICE_STATE(DevicePtr, Type) \
|
|||
|
((DevicePtr)->DeviceState = (Type))
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlInitOemSourceDevices(
|
|||
|
IN OUT POEM_SOURCE_DEVICE *OemSourceDevices,
|
|||
|
IN OUT POEM_SOURCE_DEVICE *DefaultSourceDevice
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
//
|
|||
|
// Functions for managing the display
|
|||
|
//
|
|||
|
//
|
|||
|
|
|||
|
VOID
|
|||
|
SlSetCurrentAttribute(
|
|||
|
IN UCHAR Attribute
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlWriteString(
|
|||
|
IN _PTUCHAR s
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlPositionCursor(
|
|||
|
IN unsigned x,
|
|||
|
IN unsigned y
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlGetCursorPosition(
|
|||
|
OUT unsigned *x,
|
|||
|
OUT unsigned *y
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlClearClientArea(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlClearToEol(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlInitDisplay(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlWriteHeaderText(
|
|||
|
IN ULONG MsgId
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlSetStatusAttribute(
|
|||
|
IN UCHAR Attribute
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlGetStatusBarStatus(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlEnableStatusBar(
|
|||
|
IN BOOLEAN Enable
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlWriteStatusText(
|
|||
|
IN PTCHAR Text
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlGetStatusText(
|
|||
|
OUT PTCHAR Text
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlClearDisplay(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlPrint(
|
|||
|
IN PTCHAR FormatString,
|
|||
|
...
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlConfirmExit(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlPromptForDisk(
|
|||
|
IN PTCHAR DiskName,
|
|||
|
IN BOOLEAN IsCancellable
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlGetDisk(
|
|||
|
IN PCHAR Filename
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Menuing support
|
|||
|
//
|
|||
|
typedef struct _SL_MENU {
|
|||
|
ULONG ItemCount;
|
|||
|
ULONG Width;
|
|||
|
LIST_ENTRY ItemListHead;
|
|||
|
} SL_MENU, *PSL_MENU;
|
|||
|
|
|||
|
typedef struct _SL_MENUITEM {
|
|||
|
LIST_ENTRY ListEntry;
|
|||
|
PTCHAR Text;
|
|||
|
PVOID Data;
|
|||
|
ULONG Attributes;
|
|||
|
} SL_MENUITEM, *PSL_MENUITEM;
|
|||
|
|
|||
|
PSL_MENU
|
|||
|
SlCreateMenu(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
ULONG
|
|||
|
SlAddMenuItem(
|
|||
|
PSL_MENU Menu,
|
|||
|
PTCHAR Text,
|
|||
|
PVOID Data,
|
|||
|
ULONG Attributes
|
|||
|
);
|
|||
|
|
|||
|
PVOID
|
|||
|
SlGetMenuItem(
|
|||
|
IN PSL_MENU Menu,
|
|||
|
IN ULONG Item
|
|||
|
);
|
|||
|
|
|||
|
ULONG
|
|||
|
SlDisplayMenu(
|
|||
|
IN ULONG HeaderId,
|
|||
|
IN PSL_MENU Menu,
|
|||
|
IN OUT PULONG Selection
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlGetMenuItemIndex(
|
|||
|
IN PSL_MENU Menu,
|
|||
|
IN PTCHAR Text,
|
|||
|
OUT PULONG Index
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Bullet character and macro to make a beep at the console
|
|||
|
//
|
|||
|
#ifndef EFI
|
|||
|
#define BULLET "*"
|
|||
|
#define BEEP { ULONG c; ArcWrite(ARC_CONSOLE_OUTPUT,"",1,&c); }
|
|||
|
|
|||
|
#if 0
|
|||
|
#define BULLET ""
|
|||
|
#define BEEP HWCURSOR(0x80000000,0xe07); // int 10 func e, char 7
|
|||
|
#endif
|
|||
|
#endif
|
|||
|
|
|||
|
//
|
|||
|
// Character attributes used for various purposes.
|
|||
|
//
|
|||
|
|
|||
|
UCHAR
|
|||
|
SlGetDefaultAttr(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
UCHAR
|
|||
|
SlGetDefaultInvAttr(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
#define ATT_FG_BLACK 0
|
|||
|
#define ATT_FG_RED 1
|
|||
|
#define ATT_FG_GREEN 2
|
|||
|
#define ATT_FG_YELLOW 3
|
|||
|
#define ATT_FG_BLUE 4
|
|||
|
#define ATT_FG_MAGENTA 5
|
|||
|
#define ATT_FG_CYAN 6
|
|||
|
#define ATT_FG_WHITE 7
|
|||
|
|
|||
|
#define ATT_BG_BLACK (ATT_FG_BLACK << 4)
|
|||
|
#define ATT_BG_BLUE (ATT_FG_BLUE << 4)
|
|||
|
#define ATT_BG_GREEN (ATT_FG_GREEN << 4)
|
|||
|
#define ATT_BG_CYAN (ATT_FG_CYAN << 4)
|
|||
|
#define ATT_BG_RED (ATT_FG_RED << 4)
|
|||
|
#define ATT_BG_MAGENTA (ATT_FG_MAGENTA << 4)
|
|||
|
#define ATT_BG_YELLOW (ATT_FG_YELLOW << 4)
|
|||
|
#define ATT_BG_WHITE (ATT_FG_WHITE << 4)
|
|||
|
|
|||
|
#define ATT_FG_INTENSE 8
|
|||
|
#define ATT_BG_INTENSE (ATT_FG_INTENSE << 4)
|
|||
|
|
|||
|
#define DEFATT SlGetDefaultAttr()
|
|||
|
#define INVATT SlGetDefaultInvAttr()
|
|||
|
|
|||
|
#define DEFIATT (ATT_FG_WHITE | ATT_BG_BLUE | ATT_FG_INTENSE)
|
|||
|
// intense red on blue doesn't show up on all monitors.
|
|||
|
//#define DEFERRATT (ATT_FG_RED | ATT_BG_BLUE | ATT_FG_INTENSE)
|
|||
|
#define DEFERRATT DEFATT
|
|||
|
#define DEFSTATTR (ATT_FG_BLACK | ATT_BG_WHITE)
|
|||
|
#define DEFDLGATT (ATT_FG_RED | ATT_BG_WHITE)
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Function to flush keyboard buffer
|
|||
|
//
|
|||
|
|
|||
|
VOID
|
|||
|
SlFlushConsoleBuffer(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Function to retrieve a keystroke
|
|||
|
//
|
|||
|
|
|||
|
ULONG
|
|||
|
SlGetChar(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Virtualized contants for various keystrokes
|
|||
|
//
|
|||
|
#define ASCI_BS 8
|
|||
|
#define ASCI_CR 13
|
|||
|
#define ASCI_LF 10
|
|||
|
#define ASCI_ESC 27
|
|||
|
#define SL_KEY_UP 0x00010000
|
|||
|
#define SL_KEY_DOWN 0x00020000
|
|||
|
#define SL_KEY_HOME 0x00030000
|
|||
|
#define SL_KEY_END 0x00040000
|
|||
|
#define SL_KEY_PAGEUP 0x00050000
|
|||
|
#define SL_KEY_PAGEDOWN 0x00060000
|
|||
|
#define SL_KEY_F1 0x01000000
|
|||
|
#define SL_KEY_F2 0x02000000
|
|||
|
#define SL_KEY_F3 0x03000000
|
|||
|
#define SL_KEY_F5 0x05000000
|
|||
|
#define SL_KEY_F6 0x06000000
|
|||
|
#define SL_KEY_F7 0x07000000
|
|||
|
#define SL_KEY_F8 0x08000000
|
|||
|
#define SL_KEY_F9 0x09000000
|
|||
|
#define SL_KEY_F10 0x0A000000
|
|||
|
#define SL_KEY_F11 0x0B000000
|
|||
|
#define SL_KEY_F12 0x0C000000
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Standard error handling functions
|
|||
|
//
|
|||
|
|
|||
|
extern TCHAR MessageBuffer[1024];
|
|||
|
|
|||
|
VOID
|
|||
|
SlFriendlyError(
|
|||
|
IN ULONG uStatus,
|
|||
|
IN PCHAR pchBadFile,
|
|||
|
IN ULONG uLine,
|
|||
|
IN PCHAR pchCodeFile
|
|||
|
);
|
|||
|
|
|||
|
ULONG
|
|||
|
SlDisplayMessageBox(
|
|||
|
IN ULONG MessageId,
|
|||
|
...
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlGenericMessageBox(
|
|||
|
IN ULONG MessageId, OPTIONAL
|
|||
|
IN va_list *args, OPTIONAL
|
|||
|
IN PTCHAR Message, OPTIONAL
|
|||
|
IN OUT PULONG xLeft, OPTIONAL
|
|||
|
IN OUT PULONG yTop, OPTIONAL
|
|||
|
OUT PULONG yBottom, OPTIONAL
|
|||
|
IN BOOLEAN bCenterMsg
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlMessageBox(
|
|||
|
IN ULONG MessageId,
|
|||
|
...
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlFatalError(
|
|||
|
IN ULONG MessageId,
|
|||
|
...
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Routines for parsing the setupldr.ini file
|
|||
|
//
|
|||
|
|
|||
|
#define SIF_FILENAME_INDEX 0
|
|||
|
|
|||
|
extern PVOID InfFile;
|
|||
|
extern PVOID WinntSifHandle;
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlInitIniFile(
|
|||
|
IN PCHAR DevicePath,
|
|||
|
IN ULONG DeviceId,
|
|||
|
IN PCHAR INFFile,
|
|||
|
OUT PVOID *pINFHandle,
|
|||
|
OUT PVOID *pINFBuffer OPTIONAL,
|
|||
|
OUT PULONG INFBufferSize OPTIONAL,
|
|||
|
OUT PULONG ErrorLine
|
|||
|
);
|
|||
|
|
|||
|
PCHAR
|
|||
|
SlGetIniValue(
|
|||
|
IN PVOID InfHandle,
|
|||
|
IN PCHAR SectionName,
|
|||
|
IN PCHAR KeyName,
|
|||
|
IN PCHAR Default
|
|||
|
);
|
|||
|
|
|||
|
PCHAR
|
|||
|
SlGetKeyName(
|
|||
|
IN PVOID INFHandle,
|
|||
|
IN PCHAR SectionName,
|
|||
|
IN ULONG LineIndex
|
|||
|
);
|
|||
|
|
|||
|
ULONG
|
|||
|
SlGetSectionKeyOrdinal(
|
|||
|
IN PVOID INFHandle,
|
|||
|
IN PCHAR SectionName,
|
|||
|
IN PCHAR Key
|
|||
|
);
|
|||
|
|
|||
|
PCHAR
|
|||
|
SlGetSectionKeyIndex (
|
|||
|
IN PVOID INFHandle,
|
|||
|
IN PCHAR SectionName,
|
|||
|
IN PCHAR Key,
|
|||
|
IN ULONG ValueIndex
|
|||
|
);
|
|||
|
|
|||
|
PCHAR
|
|||
|
SlCopyStringA(
|
|||
|
IN PCSTR String
|
|||
|
);
|
|||
|
|
|||
|
PTCHAR
|
|||
|
SlCopyString(
|
|||
|
IN PTCHAR String
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
PCHAR
|
|||
|
SlGetSectionLineIndex (
|
|||
|
IN PVOID INFHandle,
|
|||
|
IN PCHAR SectionName,
|
|||
|
IN ULONG LineIndex,
|
|||
|
IN ULONG ValueIndex
|
|||
|
);
|
|||
|
|
|||
|
ULONG
|
|||
|
SlCountLinesInSection(
|
|||
|
IN PVOID INFHandle,
|
|||
|
IN PCHAR SectionName
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SpSearchINFSection (
|
|||
|
IN PVOID INFHandle,
|
|||
|
IN PCHAR SectionName
|
|||
|
);
|
|||
|
|
|||
|
PCHAR
|
|||
|
SlSearchSection(
|
|||
|
IN PCHAR SectionName,
|
|||
|
IN PCHAR TargetName
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// functions for querying the ARC configuration tree
|
|||
|
//
|
|||
|
typedef
|
|||
|
BOOLEAN
|
|||
|
(*PNODE_CALLBACK)(
|
|||
|
IN PCONFIGURATION_COMPONENT_DATA FoundComponent
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlSearchConfigTree(
|
|||
|
IN PCONFIGURATION_COMPONENT_DATA Node,
|
|||
|
IN CONFIGURATION_CLASS Class,
|
|||
|
IN CONFIGURATION_TYPE Type,
|
|||
|
IN ULONG Key,
|
|||
|
IN PNODE_CALLBACK CallbackRoutine
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlFindFloppy(
|
|||
|
IN ULONG FloppyNumber,
|
|||
|
OUT PCHAR ArcName
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Routines for detecting various hardware
|
|||
|
//
|
|||
|
VOID
|
|||
|
SlDetectScsi(
|
|||
|
IN PSETUP_LOADER_BLOCK SetupBlock
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlDetectVideo(
|
|||
|
IN PSETUP_LOADER_BLOCK SetupBlock
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Routines for dealing with OEM disks.
|
|||
|
//
|
|||
|
extern BOOLEAN PromptOemHal;
|
|||
|
extern BOOLEAN PromptOemScsi;
|
|||
|
extern BOOLEAN PromptOemVideo;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Variable indicating whether we are booting into
|
|||
|
// WinPE (aka MiniNT) or not
|
|||
|
//
|
|||
|
extern BOOLEAN WinPEBoot;
|
|||
|
|
|||
|
typedef struct _OEMSCSIINFO {
|
|||
|
|
|||
|
struct _OEMSCSIINFO *Next;
|
|||
|
|
|||
|
//
|
|||
|
// Address where the SCSI driver was loaded
|
|||
|
//
|
|||
|
PVOID ScsiBase;
|
|||
|
|
|||
|
//
|
|||
|
// Name of the SCSI driver
|
|||
|
//
|
|||
|
PCHAR ScsiName;
|
|||
|
|
|||
|
} OEMSCSIINFO, *POEMSCSIINFO;
|
|||
|
|
|||
|
VOID
|
|||
|
SlPromptOemVideo(
|
|||
|
IN POEM_SOURCE_DEVICE VideoSourceDevice,
|
|||
|
IN BOOLEAN AllowUserSelection,
|
|||
|
OUT PVOID *VideoBase,
|
|||
|
OUT PCHAR *VideoName
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SlPromptOemHal(
|
|||
|
IN POEM_SOURCE_DEVICE HalSourceDevice,
|
|||
|
IN BOOLEAN AllowUserSelection,
|
|||
|
OUT PVOID *HalBase,
|
|||
|
OUT PCHAR *ImageName
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
SlPromptOemScsi(
|
|||
|
IN POEM_SOURCE_DEVICE ScsiSourceDevice,
|
|||
|
IN BOOLEAN AllowUserSelection,
|
|||
|
OUT POEMSCSIINFO *pOemScsiInfo
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlLoadOemScsiDriversUnattended(
|
|||
|
IN POEM_SOURCE_DEVICE OemSourceDevice,
|
|||
|
IN PVOID InfHandle,
|
|||
|
IN PCHAR ParamsSectionName,
|
|||
|
IN PCHAR RootDirKeyName,
|
|||
|
IN PCHAR BootDriversKeyName,
|
|||
|
IN POEMSCSIINFO* ScsiInfo,
|
|||
|
OUT PPNP_HARDWARE_ID* HardwareIdDatabase
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
#if defined(_X86_) || defined(_IA64_)
|
|||
|
VOID
|
|||
|
BlInitializeTerminal(
|
|||
|
VOID
|
|||
|
);
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Routine to find the ARC name of a floppy
|
|||
|
//
|
|||
|
BOOLEAN
|
|||
|
SlpFindFloppy(
|
|||
|
IN ULONG Number,
|
|||
|
OUT PCHAR ArcName
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Are all the floppies only removable ATAPI super floppies
|
|||
|
//
|
|||
|
BOOLEAN
|
|||
|
SlpIsOnlySuperFloppy(
|
|||
|
void
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Enums for controlling setupldr process
|
|||
|
//
|
|||
|
typedef enum _SETUP_TYPE {
|
|||
|
SetupInteractive,
|
|||
|
SetupRepair,
|
|||
|
SetupCustom,
|
|||
|
SetupUpgrade,
|
|||
|
SetupExpress
|
|||
|
} SETUP_TYPE;
|
|||
|
|
|||
|
typedef enum _MEDIA_TYPE {
|
|||
|
MediaInteractive,
|
|||
|
MediaFloppy,
|
|||
|
MediaCdRom,
|
|||
|
MediaDisk
|
|||
|
} MEDIA_TYPE;
|
|||
|
|
|||
|
//
|
|||
|
// Enum for status of inserting a new SCSI device
|
|||
|
//
|
|||
|
typedef enum _SCSI_INSERT_STATUS {
|
|||
|
ScsiInsertError,
|
|||
|
ScsiInsertNewEntry,
|
|||
|
ScsiInsertExisting
|
|||
|
} SCSI_INSERT_STATUS;
|
|||
|
|
|||
|
//
|
|||
|
// Routine to insert a DETECTED_DEVICE into its
|
|||
|
// correct position in the ScsiDevices linked list.
|
|||
|
//
|
|||
|
SCSI_INSERT_STATUS
|
|||
|
SlInsertScsiDevice(
|
|||
|
IN ULONG Ordinal,
|
|||
|
OUT PDETECTED_DEVICE *pScsiDevice
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlRemoveInboxDriver(
|
|||
|
IN PCHAR DriverToRemove
|
|||
|
);
|
|||
|
|
|||
|
PDETECTED_DEVICE
|
|||
|
SlCheckForInboxDriver(
|
|||
|
IN PCHAR DriverToCheck
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlConfirmInboxDriverReplacement(
|
|||
|
IN PTCHAR DriverName,
|
|||
|
IN PTCHAR AdditionalInfo
|
|||
|
);
|
|||
|
|
|||
|
typedef enum _VERSION_COMP_RESULT {
|
|||
|
VersionError,
|
|||
|
VersionOemNew,
|
|||
|
VersionInboxNew,
|
|||
|
VersionSame
|
|||
|
} VERSION_COMP_RESULT;
|
|||
|
|
|||
|
|
|||
|
VERSION_COMP_RESULT
|
|||
|
SlCompareDriverVersion(
|
|||
|
IN ULONG InboxDeviceId,
|
|||
|
IN PDETECTED_DEVICE InboxDriver,
|
|||
|
IN ULONG OemDeviceId,
|
|||
|
IN PDETECTED_DEVICE OemDriver
|
|||
|
);
|
|||
|
|
|||
|
//
|
|||
|
// Variables dealing with pre-installation.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _PREINSTALL_DRIVER_INFO {
|
|||
|
|
|||
|
struct _PREINSTALL_DRIVER_INFO *Next;
|
|||
|
|
|||
|
//
|
|||
|
// String that describes the driver to preinstall
|
|||
|
//
|
|||
|
PTCHAR DriverDescription;
|
|||
|
|
|||
|
//
|
|||
|
// Name of the SCSI driver
|
|||
|
//
|
|||
|
BOOLEAN OemDriver;
|
|||
|
|
|||
|
} PREINSTALL_DRIVER_INFO, *PPREINSTALL_DRIVER_INFO;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
extern BOOLEAN PreInstall;
|
|||
|
extern PTCHAR ComputerType;
|
|||
|
extern BOOLEAN OemHal;
|
|||
|
// extern PCHAR OemBootPath;
|
|||
|
extern PPREINSTALL_DRIVER_INFO PreinstallDriverList;
|
|||
|
|
|||
|
PCHAR
|
|||
|
SlPreInstallGetComponentName(
|
|||
|
IN PVOID Inf,
|
|||
|
IN PCHAR SectionName,
|
|||
|
IN PTCHAR TargetName
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlLoadSection(
|
|||
|
IN PVOID Inf,
|
|||
|
IN PCSTR SectionName,
|
|||
|
IN BOOLEAN IsScsiSection,
|
|||
|
IN BOOLEAN AppendLoadSuffix,
|
|||
|
IN OUT PULONG StartingIndexInsert
|
|||
|
);
|
|||
|
|
|||
|
#define WINPE_AUTOBOOT_FILENAME "$WINPE$.$$$"
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SlIsWinPEAutoBoot(
|
|||
|
IN PSTR LoaderDeviceName
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlGetWinPEStartupParams(
|
|||
|
IN PSTR DeviceName,
|
|||
|
IN PSTR StartupDirectory
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlLoadWinPESection(
|
|||
|
IN POEM_SOURCE_DEVICE OemSourceDevice,
|
|||
|
IN PVOID OemInfHandle,
|
|||
|
IN PCSTR OemSectionName,
|
|||
|
IN PVOID InboxInfHandle,
|
|||
|
IN PCSTR InboxSectionName,
|
|||
|
IN BOOLEAN IsScsiSection,
|
|||
|
IN POEMSCSIINFO* ScsiInfo, OPTIONAL
|
|||
|
OUT PPNP_HARDWARE_ID* HardwareIdDatabase OPTIONAL
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlLoadOemScsiDriversFromOemSources(
|
|||
|
IN POEM_SOURCE_DEVICE OemSourceDevices,
|
|||
|
IN OUT PPNP_HARDWARE_ID *HardwareIds,
|
|||
|
OUT POEMSCSIINFO *OemScsiInfo
|
|||
|
);
|
|||
|
|
|||
|
ARC_STATUS
|
|||
|
SlInitVirtualOemSourceDevices(
|
|||
|
IN PSETUP_LOADER_BLOCK SetupLoaderBlock,
|
|||
|
IN POEM_SOURCE_DEVICE OemSourceDevices
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
#if defined(ARCI386)
|
|||
|
BOOLEAN
|
|||
|
SlDetectSifPromVersion(
|
|||
|
IN PSETUP_LOADER_BLOCK SetupBlock
|
|||
|
);
|
|||
|
#endif
|
|||
|
|
|||
|
#define VGA_DRIVER_FILENAME "vga.sys"
|
|||
|
#define VIDEO_DEVICE_NAME "VGA"
|
|||
|
|
|||
|
extern ULONG BootFontImageLength;
|
|||
|
|
|||
|
|