windows-nt/Source/XPSP1/NT/base/boot/setup/ia64/parsebnvr.c
2020-09-26 16:20:57 +08:00

233 lines
4.7 KiB
C

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
initia64.c
Abstract:
Gets boot environment vars from c:\boot.nvr
-- This will go away once we r/w the vars directly to/fro nvram
Author:
Mudit Vats (v-muditv) 11-02-99
Revision History:
--*/
#include "parsebnvr.h"
#include "stdio.h"
#include "string.h"
#define SYSTEMPARTITION 0
#define OSLOADER 1
#define OSLOADPARTITION 2
#define OSLOADFILENAME 3
#define LOADIDENTIFIER 4
#define OSLOADOPTIONS 5
#define COUNTDOWN 6
#define AUTOLOAD 7
#define LASTKNOWNGOOD 8
#define MAXBOOTVARS 9
#define MAXBOOTVARSIZE 1024
CHAR g_szBootVars[MAXBOOTVARS][MAXBOOTVARSIZE];
CHAR szSelectKernelString[MAXBOOTVARSIZE];
VOID
BlGetBootVars(
IN PCHAR szBootNVR,
IN ULONG nLengthBootNVR
)
/*++
Routine Description:
Parses the boot.txt file and determines the fully-qualified name of
the kernel to be booted.
Arguments:
szBootNVR - pointer "boot.nvr" image in memory
nLengthBootNVR - lenghth, in bytes, of szBootNVR
Return Value:
none
--*/
{
ULONG i=0, j;
ULONG nbootvar;
if (*szBootNVR == '\0') {
//
// No boot.nvr file, so we boot the default.
//
strcpy( g_szBootVars[ SYSTEMPARTITION ], "multi(0)disk(0)rdisk(0)partition(1)" );
strcpy( g_szBootVars[ OSLOADER ], "multi(0)disk(0)rdisk(0)partition(1)\\setupldr.efi" );
strcpy( g_szBootVars[ OSLOADPARTITION ], "multi(0)disk(0)rdisk(0)partition(2)" );
strcpy( g_szBootVars[ OSLOADFILENAME ], "\\$WIN_NT$.~LS\\IA64" );
strcpy( g_szBootVars[ LOADIDENTIFIER ], "Windows 2000 Setup" );
strcpy( g_szBootVars[ OSLOADOPTIONS ], "WINNT32" );
strcpy( g_szBootVars[ COUNTDOWN ], "10" );
strcpy( g_szBootVars[ AUTOLOAD ], "YES" );
strcpy( g_szBootVars[ LASTKNOWNGOOD ], "FALSE" );
} else {
//
// Get the boot vars
//
// BOOTVAR ::= =<VARVALUE>
// <VARVALUE> ::= null | {;} | <VALUE>{;} | <VALUE>;<VARVALUE>
//
for( nbootvar = SYSTEMPARTITION; nbootvar<=LASTKNOWNGOOD; nbootvar++ ) {
// read to '='
while( (szBootNVR[i] != '=') && (i<nLengthBootNVR) )
i++;
// read past '='
i++;
j = 0;
// get env var from '=' to CR or ';'
while( (szBootNVR[i] != '\r') && (szBootNVR[i] != ';') && (i<nLengthBootNVR) )
g_szBootVars[nbootvar][j++] = szBootNVR[i++];
g_szBootVars[nbootvar][j++] = '\0';
// if ';' read to CR
if( szBootNVR[i] == ';' ) {
while( (szBootNVR[i] != '\r') && (i<nLengthBootNVR) )
i++;
}
}
}
}
PCHAR
BlSelectKernel(
)
/*++
Routine Description:
Parses the boot.txt file and determines the fully-qualified name of
the kernel to be booted.
Arguments:
Return Value:
Pointer to the name of a kernel to boot.
--*/
{
sprintf( szSelectKernelString, "%s%s", g_szBootVars[OSLOADPARTITION], g_szBootVars[OSLOADFILENAME] );
return szSelectKernelString;
}
/*++
Routine Descriptions:
The following are access functions to GET boot env vars
Arguments:
PCHAR XXX - where the env var is copied to
Return Value:
--*/
VOID
BlGetVarSystemPartition(
OUT PCHAR szSystemPartition
)
{
sprintf( szSystemPartition, "SYSTEMPARTITION=%s", g_szBootVars[SYSTEMPARTITION] );
}
VOID
BlGetVarOsLoader(
OUT PCHAR szOsLoader
)
{
sprintf( szOsLoader, "OSLOADER=%s", g_szBootVars[OSLOADER] );
}
VOID
BlGetVarOsLoadPartition(
OUT PCHAR szOsLoadPartition
)
{
sprintf( szOsLoadPartition, "OSLOADPARTITION=%s", g_szBootVars[OSLOADPARTITION] );
}
VOID
BlGetVarOsLoadFilename(
OUT PCHAR szOsLoadFilename
)
{
sprintf( szOsLoadFilename, "OSLOADFILENAME=%s", g_szBootVars[OSLOADFILENAME] );
}
VOID
BlGetVarOsLoaderShort(
OUT PCHAR szOsLoaderShort
)
{
sprintf( szOsLoaderShort, "%s", g_szBootVars[OSLOADER] );
}
VOID
BlGetVarLoadIdentifier(
OUT PCHAR szLoadIdentifier
)
{
sprintf( szLoadIdentifier, "LOADIDENTIFIER=%s", g_szBootVars[LOADIDENTIFIER] );
}
VOID
BlGetVarOsLoadOptions(
OUT PCHAR szLoadOptions
)
{
sprintf( szLoadOptions, "OSLOADOPTIONS=%s", g_szBootVars[OSLOADOPTIONS] );
}
VOID
BlGetVarCountdown(
OUT PCHAR szCountdown
)
{
sprintf( szCountdown, "COUNTDOWN=%s", g_szBootVars[COUNTDOWN] );
}
VOID
BlGetVarAutoload(
OUT PCHAR szAutoload
)
{
sprintf( szAutoload, "AUTOLOAD=%s", g_szBootVars[AUTOLOAD] );
}
VOID
BlGetVarLastKnownGood(
OUT PCHAR szLastKnownGood
)
{
sprintf( szLastKnownGood, "LASTKNOWNGOOD=%s", g_szBootVars[LASTKNOWNGOOD] );
}