|
|
#define ADD_OFFSET(_p,_o) (PVOID)((PUCHAR)(_p) + (_p)->_o)
#define ALIGN_DOWN(length, type) \
((ULONG)(length) & ~(sizeof(type) - 1))
#define ALIGN_UP(length, type) \
(ALIGN_DOWN(((ULONG)(length) + sizeof(type) - 1), type))
#define MBE_STATUS_IS_NT 0x00000001
#define MBE_IS_NT(_be) (((_be)->Status & MBE_STATUS_IS_NT) != 0)
#define MBE_SET_IS_NT(_be) ((_be)->Status |= MBE_STATUS_IS_NT)
typedef struct _MY_BOOT_ENTRY { LIST_ENTRY ListEntry; PLIST_ENTRY ListHead; PUCHAR AllocationEnd; ULONG Ordered; ULONG Status; ULONG myId; ULONG Id; ULONG Attributes; PWSTR FriendlyName; ULONG FriendlyNameLength; PWSTR OsLoadOptions; ULONG OsLoadOptionsLength; PFILE_PATH BootFilePath; PFILE_PATH OsFilePath; PUCHAR ForeignOsOptions; ULONG ForeignOsOptionsLength; BOOT_ENTRY NtBootEntry; } MY_BOOT_ENTRY, *PMY_BOOT_ENTRY;
DWORD InitializeEFI(void); BOOL QueryBootIniSettings_IA64(DWORD argc, LPCTSTR argv[]); DWORD DeleteBootIniSettings_IA64(DWORD argc, LPCTSTR argv[]); DWORD CopyBootIniSettings_IA64(DWORD argc, LPCTSTR argv[]); DWORD ChangeTimeOut_IA64(DWORD argc, LPCTSTR argv[]); DWORD RawStringOsOptions_IA64(DWORD argc, LPCTSTR argv[]); DWORD ChangeDefaultBootEntry_IA64(DWORD argc, LPCTSTR argv[]);
NTSTATUS BootCfg_EnumerateBootEntries(PBOOT_ENTRY_LIST *ntBootEntries); NTSTATUS BootCfg_QueryBootOptions(PBOOT_OPTIONS *ppBootOptions);
PWSTR GetNtNameForFilePath (IN PFILE_PATH FilePath); DWORD ChangeBootEntry(PBOOT_ENTRY bootEntry, LPTSTR lpNewFriendlyName, LPTSTR lpOSLoadOptions); //DWORD CopyBootEntry(PBOOT_ENTRY bootEntry, LPTSTR lpNewFriendlyName);
DWORD ModifyBootOptions(ULONG Timeout, LPTSTR pHeadlessRedirection, ULONG NextBootEntryID, ULONG Flag);
PMY_BOOT_ENTRY CreateBootEntryFromBootEntry (IN PMY_BOOT_ENTRY OldBootEntry);
BOOL IsBootEntryWindows(PBOOT_ENTRY bootEntry);
PWSTR GetNtNameForFilePath (IN PFILE_PATH FilePath);
DWORD ConvertBootEntries (PBOOT_ENTRY_LIST BootEntries); VOID DisplayBootEntry(); DWORD DisplayBootOptions(); DWORD GetCurrentBootEntryID(DWORD Id);
DWORD ProcessDebugSwitch_IA64( DWORD argc, LPCTSTR argv[] );
VOID GetComPortType_IA64( LPTSTR szString,LPTSTR szTemp ); DWORD ProcessEmsSwitch_IA64( DWORD argc, LPCTSTR argv[] ); DWORD ProcessAddSwSwitch_IA64( DWORD argc, LPCTSTR argv[] ); DWORD ProcessRmSwSwitch_IA64( DWORD argc, LPCTSTR argv[] ); DWORD ProcessDbg1394Switch_IA64(DWORD argc,LPCTSTR argv[]);
VOID displayListUsage_IA64(); VOID displayUpdateUsage_IA64(); DWORD ProcessUpdateSwitch_IA64( DWORD argc, LPCTSTR argv[] );
#define PORT_COM1A _T("/debugport=COM1")
#define PORT_COM2A _T("/debugport=COM2")
#define PORT_COM3A _T("/debugport=COM3")
#define PORT_COM4A _T("/debugport=COM4")
#define PORT_1394A _T("/debugport=1394")
//#ifdef _WIN64
#define PARTITION_TABLE_OFFSET 446
#define PART_NAME_LEN 36
#define GPT_PART_SIGNATURE 0x5452415020494645
#define TOKEN_BACKSLASH4 _T("\\\\")
#define SUBKEY1 _T("SYSTEM\\SETUP")
#define IDENTIFIER_VALUE2 _T("SystemPartition")
#define IDENTIFIER_VALUE3 _T("OsLoaderPath")
#define ARC_SIGNATURE _T("signature({%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}-%08x-%016I64x-%016I64x)")
typedef struct _GPT_ENTRY { GUID PartitionTypeGUID; // declartion of this partition's type
GUID UniquePartitionGUID; // Unique ID for this particular partition
// (unique to this instance)
UINT64 StartingLBA; // 0 based block (sector) address of the
// first block included in the partition.
UINT64 EndingLBA; // 0 based block (sector) address of the
// last block included in the partition.
// If StartingLBA == EndingLBA then the
// partition is 1 block long. this is legal.
UINT64 Attributes; // Always ZERO for now
WCHAR PartitionName[PART_NAME_LEN]; // 36 unicode characters of name
struct _GPT_ENTRY *NextGPTEntry; } GPT_ENTRY, *PGPT_ENTRY;
typedef struct _GPT_HEADER { UINT64 Signature; // GPT PART
UINT32 Revision; UINT32 HeaderSize; UINT32 HeaderCRC32; // computed using 0 for own init value
UINT32 Reserved0; UINT64 MyLBA; // 0 based sector number of the first
// sector of this structure
UINT64 AlternateLBA; // 0 based sector (block) number of the
// first sector of the secondary
// GPT_HEADER, or 0 if this is the
// secondary.
UINT64 FirstUsableLBA; // 0 based sector number of the first
// sector that may be included in a partition.
UINT64 LastUsableLBA; // last legal LBA, inclusive.
GUID DiskGUID; // The unique ID of this LUN/spindle/disk
UINT64 PartitionEntryLBA; // The start of the table of entries...
UINT32 NumberOfPartitionEntries; // Number of entries in the table, this is
// how many allocated, NOT how many used.
UINT32 SizeOfPartitionEntry; // sizeof(GPT_ENTRY) always mult. of 8
UINT32 PartitionEntryArrayCRC32; // CRC32 of the table.
// Reserved and zeros to the end of the block
// Don't declare an array or sizeof() gives a nonsense answer..
// Computed data
UINT32 ComputedHeaderCRC32; UINT32 ComputedPartitionEntryArrayCRC32; UINT32 UsedPartitionEntries; PGPT_ENTRY FirstGPTEntry; BOOLEAN Healthy; } GPT_HEADER, *PGPT_HEADER;
UINT32 ScanGPT(DWORD nPhysicalDisk); DWORD ProcessMirrorSwitch_IA64(DWORD argc,LPCTSTR argv[]) ; DWORD GetBootFilePath(LPTSTR szComputerName,LPTSTR szBootPath); BOOL GetARCSignaturePath(LPTSTR szString,LPTSTR szFinalPath);
DWORD ProcessMirrorBootEntry(PBOOT_ENTRY bootEntry, PWSTR lpBootFilePath,LPTSTR OsFilePath); DWORD GetDeviceInfo(LPTSTR szGUID,LPTSTR szFinalStr,DWORD dwDriveNum,DWORD dwActuals);
PBOOT_ENTRY FillBootEntry(PBOOT_ENTRY bootEntry,LPTSTR szBootPath,LPTSTR szArcPath);
LPVOID MEMALLOC( ULONG size );
VOID MEMFREE ( LPVOID block );
LONG LowNtAddBootEntry( IN WCHAR *pwszLoaderPath, IN WCHAR *pwszArcString );
DWORD FormARCPath(LPTSTR szGUID,LPTSTR szFinalStr);
LONG LowNtAddBootEntry( IN WCHAR *pwszLoaderPath,IN WCHAR *pwszArcString) ;
DWORD GetBootPath(LPTSTR szValue,LPTSTR szResult); LONG AddBootEntry( IN WCHAR *pwszLoaderPath,IN WCHAR *pwszArcString );
NTSTATUS LowGetPartitionInfo( IN HANDLE handle,OUT PARTITION_INFORMATION_EX *partitionData );
LONG DmCommonNtOpenFile(IN PWSTR Name, IN ULONG access, IN PHANDLE Handle );
DWORD AddMirrorPlex(LPTSTR szOsLoadPath , LPTSTR szLoaderPath , LPTSTR szValue ,BOOL bFlag,LPTSTR szFriendlyName);
BOOL FormatAccToLocale( NUMBERFMT *pNumberFmt,LPTSTR* pszGroupSep,LPTSTR* pszDecimalSep,LPTSTR* pszGroupThousSep);
BOOL GetInfo( LCTYPE lctype, LPTSTR* pszData );
DWORD ConvertintoLocale( IN LPWSTR szTempBuf, OUT LPWSTR szOutputStr );
DWORD CopyBootEntry(PBOOT_ENTRY bootEntry, LPTSTR lpNewFriendlyName,BOOL bFlag);
#define SAFEMEMFREE(pVal) \
if ( pVal ) { \ MEMFREE(pVal);\ pVal = NULL ; \ }
DWORD IsAdminGroup( BOOL *bAdmin ); BOOL GetTokenHandle(OUT PHANDLE hTokenHandle); BOOL CheckAdminAccess( LPCTSTR pszMachine ); VOID Freelist(); PWSTR GetDefaultBootEntry();
|