Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

523 lines
18 KiB

#ifndef __BOOTINI_H
#define __BOOTINI_H
#endif // __BOOTINI_H
//
// constants / defines / enumerations
//
#define ADD_OFFSET(_p,_o) (PVOID)((PUCHAR)(_p) + (_p)->_o)
//registry path
#define REGISTRY_PATH L"Software\\Microsoft\\Windows\\CurrentVersion\\Setup"
// Error constants
#define ERROR_CONNECT_SERVERNOTFOUND 0xFFFF0001
#define ERROR_CONNECT_LOGINFAIL 0xFFFF0002
#define ERROR_CONNECT_UNKNOWNERROR 0xFFFF0003
#define ERROR_FMT_INVALID_OPTIONVALUE _T( "ERROR: Invalid value specified for the option '%s'.\n" )
#define ERROR_FMT_INVALIDOSENTRY _T( "ERROR: Invalid OS entry line number specified.\nThere are only '%s' OS keys.\n" )
// Exit values
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#define STRING20 20
#define FRIENDLY_NAME_LENGTH 68
// Options
#define CMDOPTION_QUERY _T( "query" )
#define CMDOPTION_COPY _T( "copy" )
#define CMDOPTION_DELETE _T( "delete" )
#define CMDOPTION_USAGE _T( "?|h" )
#define CMDOPTION_DEFAULT _T( "" )
#define CMDOPTION_RAW _T("raw")
#define CMDOPTION_DEFAULTOS _T("default")
#define CMDOPTION_TIMEOUT _T("timeout")
#define CMDOPTION_DEBUG _T("debug")
#define CMDOPTION_EMS _T("ems")
#define CMDOPTION_DBG1394 _T("dbg1394")
#define CMDOPTION_ADDSW _T("addsw")
#define CMDOPTION_RMSW _T("rmsw")
#define CMDOPTION_APPEND _T("a")
#define CMDOPTION_MIRROR _T("mirror")
#define CMDOPTION_CHANNEL _T("ch")
#define CMDOPTION_LIST _T("list")
#define CMDOPTION_ADD _T("add")
#define CMDOPTION_UPDATE _T("update")
#define OPTION_RAW _T("/raw")
#define OPTION_RAW1 _T("-raw")
#define CMDOPTION_CLONE _T("clone")
#define CMDOTHEROPTIONS _T( "s|server|u|user|p|password|description|descrip|defaultos|basevideo|baudrate|debugport|maxmem|nodebug|crashdebug|noserialmice|sos|redirect|on|off|edit" )
#define BAUD_RATE_VALUES_EMS _T("9600|19200|57600|115200")
#define BAUD_RATE_VALUES_DEBUG _T("9600|19200|38400|57600|115200")
#define COM_PORT_RANGE _T("COM1|COM2|COM3|COM4")
#define EMS_PORT_VALUES _T("COM1|COM2|COM3|COM4|BIOSSET")
#define CMDOPTION_DEBUG_VALUES _T("ON|OFF|EDIT")
#define CMDOPTION_EMS_VALUES _T("ON|OFF|EDIT")
#define CMDOPTION_EMS_VALUES_IA64 _T("ON|OFF")
#define DEBUGPORT_1394 _T("/debugport=1394")
#define DEBUGPORT _T("/debugport=")
#define BAUD_TOKEN _T("/baudrate=")
#define TOKEN_CHANNEL _T("/channel")
#define TOKEN_BACKSLASH4 _T("\\\\")
#define TOKEN_BACKSLASH6 _T("\\\\\\")
// Other switches or sub-options
#define SWITCH_SERVER _T( "s" )
#define SWITCH_USER _T( "u" )
#define SWITCH_PASSWORD _T( "p" )
#define SWITCH_TIMEOUT _T( "to" )
#define SWITCH_DEFAULTOS _T( "do" )
#define SWITCH_BASEVIDEO _T( "bv" )
#define SWITCH_DEBUG _T( "dbg" )
#define SWITCH_BAUDRATE _T( "br" )
#define SWITCH_DEBUGPORT _T( "dp" )
#define SWITCH_MAXMEM _T( "mm" )
#define SWITCH_NODEBUG _T( "nd" )
#define SWITCH_CRASHDEBUG _T( "cd" )
#define SWITCH_NOSERIALMICE _T( "ns" )
#define SWITCH_SOS _T( "so" )
#define SWITCH_REDIRECT _T( "re" )
#define SWITCH_DESCRIPTION _T( "d" )
#define SWITCH_RAWSTRING _T("raw")
#define TIMEOUT_SWITCH _T("timeout")
#define SWITCH_PORT _T("port")
#define SWITCH_BAUD _T("baud")
#define SWITCH_NOGUIBOOT _T("ng")
#define SWITCH_UPTDRV _T("upddrv")
#define SWITCH_ID _T("id")
#define SWITCH_EDIT _T("edit")
#define SWITCH_DISK _T("disk")
#define SWITCH_SOURCEGUID _T("sg")
#define SWITCH_TARGETGUID _T("tg")
// Strings
#define OFF_STRING _T( "OFF" )
#define ON_STRING _T( "ON" )
#define COM_STRING _T( "COM" )
#define INIPATH _T( "c:\\boottest.ini" )
#define OPERATINGSYSTEMSECTION _T( "operating systems" )
#define BOOTLOADERSECTION _T( "boot loader" )
#define COL_FRIENDLYNAME GetResString(IDS_COL_FRIENDLYNAME)
#define COL_BOOTID GetResString(IDS_COL_BOOTID)
#define COL_BOOTOPTION GetResString(IDS_COL_COL_BOOTOPTION)
#define COL_ARCPATH GetResString(IDS_COL_ARCPATH)
#define OS_HEADER GetResString(IDS_OS_HEADER)
#define DASHES_OS GetResString(IDS_DASHES_OS)
#define BOOT_HEADER GetResString(IDS_BOOT_HEADER)
#define DASHES_BOOTOS GetResString(IDS_DASHES_BOOTOS)
#define TIMEOUT_VAL GetResString(IDS_TIMEOUT)
#define DEFAULT_OS GetResString(IDS_DEFAULT_OS)
#define DEFAULT_ARC GetResString(IDS_DEFAULT_ARC)
#define COL_FRIENDLYNAME_WIDTH AsLong(GetResString(IDS_COL_FRIENDLYNAME_SIZE),10)
#define COL_BOOTID_WIDTH AsLong(GetResString(IDS_COL_BOOTID_SIZE),10)
#define COL_BOOTOPTION_WIDTH AsLong(GetResString(IDS_COL_BOOTOPTION_SIZE),10)
#define COL_ARC_WIDTH AsLong(GetResString(IDS_COL_ARCPATH_SIZE),10)
#define TIMEOUT_WIDTH AsLong(GetResString(IDS_TIMEOUT_SIZE),10)
#define DEFAULT_ARC_WIDTH AsLong(GetResString(IDS_DEFAULT_ARC_SIZE),10)
#define KEY_DEFAULT _T("default")
#define ONOFFVALUES _T(" on off ")
#define KEY_REDIRECT _T("redirect")
// Typedefs of standard string sizes
typedef TCHAR STRING256 [ 256 ];
#define ID_DEL_HELP_BEGIN IDS_DELETE_HELP_BEGIN
#define ID_DEL_HELP_END IDS_DELETE_HELP_END
#define ID_CHANGE_HELP_BEGIN IDS_CHANGE_HELP_BEGIN
#define ID_CHANGE_HELP_END IDS_CHANGE_HELP_END
#define ID_QUERY_HELP_BEGIN IDS_QUERY_HELP_BEGIN
#define ID_QUERY_HELP_END IDS_QUERY_HELP_END
#define ID_COPY_HELP_BEGIN IDS_COPY_HELP_BEGIN
#define ID_COPY_HELP_END IDS_COPY_HELP_END
#define ID_MAIN_HELP_BEGIN IDS_MAIN_HELP_BEGIN
#define ID_MAIN_HELP_END IDS_MAIN_HELP_END
#define RAW_HELP_BEGIN IDS_RAW_HELP_BEGIN
#define RAW_HELP_END IDS_RAW_HELP_END
#define TIMEOUT_HELP_BEGIN IDS_TIMOUTHELP_BEGIN
#define TIMEOUT_HELP_END IDS_TIMOUTHELP_END
#define DEFAULT_BEGIN IDS_DEFAULT_BEGIN
#define DEFAULT_END IDS_DEFAULT_END
#define ID_MAIN_HELP_BEGIN1 IDS_MAIN_HELP_BEGIN1
#define ID_MAIN_HELP_END1 IDS_MAIN_HELP_END1
#define ID_MAIN_HELP_IA64_BEGIN IDS_MAIN_HELP_IA64_BEGIN
#define ID_MAIN_HELP_IA64_END IDS_MAIN_HELP_IA64_END
#define RAW_HELP_IA64_BEGIN IDS_RAW_HELP_IA64_BEGIN
#define RAW_HELP_IA64_END IDS_RAW_HELP_IA64_END
#define ID_QUERY_HELP64_BEGIN IDS_QUERY_HELP64_BEGIN
#define ID_QUERY_HELP64_END IDS_QUERY_HELP64_END
#define ID_DEL_HELP_IA64_BEGIN IDS_DELETE_HELP_IA64_BEGIN
#define ID_DEL_HELP_IA64_END IDS_DELETE_HELP_IA64_END
#define ID_COPY_HELP_IA64_BEGIN IDS_COPY_HELP_IA64_BEGIN
#define ID_COPY_HELP_IA64_END IDS_COPY_HELP_IA64_END
#define TIMEOUT_HELP_IA64_BEGIN IDS_TIMOUTHELP_IA64_BEGIN
#define TIMEOUT_HELP_IA64_END IDS_TIMOUTHELP_IA64_END
#define DEFAULT_IA64_BEGIN IDS_DEFAULT_IA64_BEGIN
#define DEFAULT_IA64_END IDS_DEFAULT_IA64_END
#define SAFEFREE(pVal) \
FreeMemory((LPVOID *)&pVal);
#define SIZE_OF_ARRAY_IN_CHARS(x) \
GetBufferSize(x)/sizeof(WCHAR)
#define SAFECLOSE(stream) \
if(stream != NULL) \
{ \
fclose(stream);\
stream = NULL ; \
}
// function prototypes
// Main functions
DWORD ChangeBootIniSettings(DWORD argc, LPCTSTR argv[]);
DWORD CopyBootIniSettings(DWORD argc, LPCTSTR argv[]);
DWORD DeleteBootIniSettings(DWORD argc, LPCTSTR argv[]);
DWORD QueryBootIniSettings(DWORD argc, LPCTSTR argv[]);
DWORD ChangeTimeOut(DWORD argc,LPCTSTR argv[]);
DWORD ChangeDefaultOs(DWORD argc,LPCTSTR argv[]);
// Function used to get all the keys of a specified section in
// the specified INI file
TARRAY getKeysOfINISection( LPTSTR szinifile, LPTSTR sziniSection );
// Function used to get all the key-value pairs of a specified section in
// the specified INI file
TARRAY getKeyValueOfINISection( LPTSTR szinifile, LPTSTR sziniSection );
// Function used to delete a key from a specifed section of the
// specified ini file
BOOL deleteKeyFromINISection( LPTSTR szkey, LPTSTR szinifile, LPTSTR sziniSection );
// Function used to build the INI string containing all the key-value pairs.
LPTSTR stringFromDynamicArray( TARRAY arrKeyValuePairs );
// Function used to remove a sub-string from a given string
DWORD removeSubString( LPTSTR szString, LPCTSTR szSubString );
// Function used to connect to the specified server with the given credentials
// and return the file pointer of the boot.ini file
BOOL openConnection(LPTSTR server, LPTSTR user,
LPTSTR password, LPTSTR filepath,BOOL bNeedPwd,FILE *stream,PBOOL pbConnFlag);
VOID FormHeader1(BOOL bHeader,TCOLUMNS *ResultHeader);
// Exit function
VOID properExit( DWORD dwExitCode, LPTSTR szFilePath );
// Usage functions
VOID displayChangeUsage();
VOID displayDeleteUsage();
VOID displayQueryUsage();
VOID displayRawUsage_X86();
VOID displayRawUsage_IA64();
DWORD displayMainUsage_X86();
VOID displayMainUsage_IA64();
VOID displayChangeOSUsage_X86();
VOID displayDefaultEntryUsage_IA64();
VOID displayRmSwUsage_X86();
VOID displayAddSwUsage_X86();
VOID displayQueryUsage_IA64();
VOID displayQueryUsage_X86();
VOID displayCopyUsage_IA64();
VOID displayCopyUsage_X86();
VOID displayChangeUsage_IA64();
VOID displayChangeUsage_X86();
VOID displayDeleteUsage_IA64();
VOID displayDeleteUsage_X86();
VOID displayTimeOutUsage_IA64();
VOID displayTimeOutUsage_X86();
VOID displayEmsUsage_X86();
VOID displayDebugUsage_X86();
VOID displayDebugUsage_IA64();
VOID displayEmsUsage_IA64();
VOID displayRmSwUsage_IA64();
VOID displayAddSwUsage_IA64();
VOID displayDbg1394Usage_X86();
VOID displayDbg1394Usage_IA64();
VOID displayMirrorUsage_IA64() ;
//VOID displayListUsage_IA64();
//VOID displayUpdateUsage_IA64();
// Function used to process the main options
DWORD preProcessOptions( DWORD argc, LPCTSTR argv[],
PBOOL pbUsage,
PBOOL pbCopy,
PBOOL pbQuery,
PBOOL pbDelete,
PBOOL pbRawString,
PBOOL pbDefault,
PBOOL pbTimeOut,
PBOOL pbDebug,
PBOOL pbEms,
PBOOL pbAddSw,
PBOOL pbRmSw,
PBOOL pbDbg1394,
PBOOL pbMirror,
PBOOL pbList ,
PBOOL pbUpdate,
PBOOL pbClone
);
BOOL resetFileAttrib( LPTSTR szFilePath );
BOOL stringFromDynamicArray1( TARRAY arrKeyValuePairs ,LPTSTR szFinalStr );
DWORD stringFromDynamicArray2( TARRAY arrKeyValuePairs ,LPTSTR *szFinalStr );
BOOL EnumerateOsEntries(PBOOT_ENTRY_LIST *ntBootEntries,PULONG ulLength );
VOID FormHeader(BOOL bHeader,TCOLUMNS *ResultHeader,BOOL bVerbose);
DWORD AppendRawString( DWORD argc, LPCTSTR argv[] );
DWORD ProcessDebugSwitch( DWORD argc, LPCTSTR argv[] );
DWORD ProcessEmsSwitch( DWORD argc, LPCTSTR argv[] );
VOID GetComPortType(LPTSTR szString,LPTSTR szTemp );
VOID GetBaudRateVal(LPTSTR szString, LPTSTR szTemp);
DWORD getKeysOfSpecifiedINISection( LPTSTR sziniFile, LPTSTR sziniSection,LPCWSTR szKeyName ,LPTSTR szValue );
DWORD ValidateSwitches(PBOOT_ENTRY bootEntry, LPTSTR szNewFriendlyName ,LPTSTR szRawString);
DWORD ProcessAddSwSwitch( DWORD argc, LPCTSTR argv[] );
DWORD ProcessRmSwSwitch( DWORD argc, LPCTSTR argv[] );
DWORD GetSubString(LPTSTR szString,LPTSTR szPartString,LPTSTR szFullString);
DWORD ProcessDbg1394Switch( DWORD argc, LPCTSTR argv[] );
DWORD ProcessListSwitch_IA64( DWORD argc, LPCTSTR argv[] );
BOOL IsWin64(void) ;
DWORD GetCPUInfo(LPTSTR szComputerName);
DWORD CheckSystemType(LPTSTR szServer);
VOID SafeCloseConnection(LPTSTR szServer,BOOL bFlag) ;
LPTSTR DivideToken( LPTSTR szString,LPTSTR szFinalString );
//LPWSTR DivideToken( LPWSTR szString );
#define ERROR_TAG GetResString(IDS_ERROR_TAG)
#define ERROR_LOAD_DLL GetResString(IDS_ERROR_LOAD)
#define ERROR_NO_NVRAM GetResString(IDS_ERROR_NO_NVRAM)
#define ERROR_UNEXPECTED GetResString(IDS_UNEXPECTED_ERROR)
#define ERROR_NO_PRIVILAGE GetResString(IDS_NO_PRIVILAGE)
#define DELETE_SUCCESS GetResString(IDS_DELETE_SUCCESS)
#define DELETE_FAILURE GetResString(IDS_DELETE_FAILURE)
#define IDENTIFIER_VALUE _T("Identifier")
#define SUBKEY _T("HARDWARE\\DESCRIPTION\\SYSTEM\\CENTRALPROCESSOR\\0")
#define IDENTIFIER_VALUE2 _T("SystemPartition")
#define IDENTIFIER_VALUE3 _T("OsLoaderPath")
#define X86_MACHINE _T("x86")
#define SYSTEM_64_BIT 2
#define SYSTEM_32_BIT 3
#define ERROR_RETREIVE_REGISTRY 4
#define NODEBUG_SWITCH _T("/nodebug")
#define BASEVIDEO_SWITCH _T("/basevideo")
#define DEBUG_SWITCH _T("/debug")
#define DEBUG_SWITCH1 _T("/DEBUG")
#define COM_SWITCH _T("COM")
#define CRASHDEBUG_SWITCH _T("/crashdebug")
#define SOS_SWITCH _T("/sos")
#define REDIRECT_SWITCH _T("/redirect")
#define OS_FIELD _T( "operating systems" )
#define SOS_VALUE _T("/sos")
#define NOGUI_VALUE _T("/noguiboot")
#define BASEVIDEO_VALUE _T("/basevideo")
#define MAXMEM_VALUE _T("/MAXMEM")
#define MAXMEM_VALUE1 _T("/maxmem")
#define NTDLL_FIELD _T("\\ntdll.dll")
#define TOKEN_EQUAL _T("=")
#define TOKEN_BACKSLASH _T("\"")
#define TOKEN_BRACKET _T('[')
#define TOKEN_DELIM _T('\0')
#define TOKEN_EMPTYSPACE _T(" ")
#define TOKEN_SINGLEQUOTE _T("\"")
#define TOKEN_BACKSLASH4 _T("\\\\")
#define TOKEN_BACKSLASH2 _T("\\")
#define TOKEN_FWDSLASH1 _T("/")
#define TOKEN_C_DOLLAR _T("C$")
#define TOKEN_STAR _T("*")
#define TOKEN_BOOTINI_PATH _T("boot.ini")
#define TOKEN_DOLLAR _T('$')
#define TOKEN_PATH _T("c:\\boot.ini")
#define TOKEN_COLON _T(':')
#define TOKEN_COLONSYMBOL _T(":")
#define TOKEN_50SPACES _T(" ")
#define TOKEN_1394 _T("1394")
#define TOKEN_NA _T("N/A")
#define TOKEN_NEXTLINE _T("\n")
#define MAX_COLUMNS 4
#define TIMEOUT_MAX 999
#define TIMEOUT_MIN 0
#define READ_MODE _T("r")
#define READWRITE_MODE _T("r+")
#define BOOT_COLUMNS 2
#define COL0 0
#define COL1 1
#define COL2 2
#define COL3 3
#define TABLE_FORMAT GetResString(IDS_FORMAT_TABLE)
#define LIST_FORMAT GetResString(IDS_FORMAT_LIST)
#define CSV_FORMAT GetResString(IDS_FORMAT_CSV)
#define MAX_INI_LENGTH 2500
#define MAX_STRING_LENGTH1 5000
#define ON_OFF_EDIT _T("ON|OFF|EDIT")
#define TOKEN_DEBUGPORT _T("/debugport")
#define PORT_COM1 _T("/debugport=com1")
#define PORT_COM2 _T("/debugport=com2")
#define PORT_COM3 _T("/debugport=com3")
#define PORT_COM4 _T("/debugport=com4")
#define PORT_1394 _T("/debugport=1394")
#define BAUD_VAL6 _T("/baudrate=19200")
#define BAUD_VAL7 _T("/baudrate=38400")
#define BAUD_VAL8 _T("/baudrate=57600")
#define BAUD_VAL9 _T("/baudrate=115200")
#define BAUD_VAL10 _T("/baudrate=9600")
#define BAUD_RATE _T("/baudrate")
#define REDIRECT _T("/redirect")
#define VALUE_OFF _T("off")
#define VALUE_ON _T("on")
#define EDIT_STRING _T("EDIT")
#define KEY_BAUDRATE _T("redirectbaudrate")
#define USEBIOSSET _T("biosset")
#define USEBIOSSETTINGS _T("USEBIOSSETTINGS")
#define ERROR_PROFILE_STRING _T("ERROR:")
#define ERROR_PROFILE_STRING1 _T("")
#define REDIRECT_STRING _T("redirect")
#define BAUDRATE_STRING _T("redirectbaudrate")
#define MAX_BOOTID_VAL 20
#define STRING255 255
#define STRING10 10
#define DRIVE_C 'C'
#define DRIVE_D 'D'
#define DRIVE_E 'E'
#define DRIVE_F 'F'
#define DRIVE_G 'G'
#define DRIVE_H 'H'
#define DRIVE_I 'I'
#define DRIVE_J 'J'
#define DRIVE_K 'K'
#define DRIVE_L 'L'
#define DRIVE_M 'M'
#define DRIVE_N 'N'
#define DRIVE_O 'O'
#define DRIVE_P 'P'
#define DRIVE_Q 'Q'
#define DRIVE_R 'R'
#define DRIVE_S 'S'
#define DRIVE_T 'T'
#define DRIVE_U 'U'
#define DRIVE_V 'V'
#define DRIVE_W 'W'
#define DRIVE_X 'X'
#define DRIVE_Y 'Y'
#define DRIVE_Z 'Z'
#define OI_SERVER 1
#define OI_USER 2
#define OI_PASSWORD 3
//global variable to store attributes
DWORD g_dwAttributes;
DWORD IsAdminGroup( BOOL *bAdmin );
BOOL GetTokenHandle(OUT PHANDLE hTokenHandle);
BOOL CheckAdminAccess( LPCTSTR pszMachine );