2025-11-28 00:35:46 +09:00

217 lines
7.1 KiB
C#

// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved
using System;
using System.Collections.Generic;
using System.Text;
namespace Microsoft.Samples.BcdSampleLib
{
/// <summary>
/// This class was originallys borrowed from Nick Elliot's excellent work on bcd
/// (Nick Elliot was a contractor who is not working for MS at this
/// time but did some great foundational work with bcd and C#, including this highly useful constants class).
/// various enhancements and additions have been made.
/// </summary>
public class Constants
{
// Known GUIDS
public static readonly string GUID_WINDOWS_BOOTMGR = "{9dea862c-5cdd-4e70-acc1-f32b344d4795}";
public static readonly string GUID_DEBUGGER_SETTINGS_GROUP = "{4636856e-540f-4170-a130-a84776f4c654}";
public static readonly string GUID_CURRENT_BOOT_ENTRY = "{fa926493-6f1c-4193-a414-58f0b2456d1e}";
public static readonly string GUID_WINDOWS_LEGACY_NTLDR = "{466f5a88-0af2-4f76-9038-095b170dc21c}";
// Known Types (Dunno About the format?)
public static readonly UInt32 BCDE_DEVICE_TYPE_BOOT_DEVICE =0x00000001;
public static readonly UInt32 BCDE_DEVICE_TYPE_PARTITION =0x00000002;
public static readonly UInt32 BCDE_DEVICE_TYPE_FILE =0x00000003;
public static readonly UInt32 BCDE_DEVICE_TYPE_RAMDISK =0x00000004;
public static readonly UInt32 BCDE_DEVICE_TYPE_UNKNOWN =0x00000005;
public static readonly UInt32 BCD_COPY_CREATE_NEW_OBJECT_IDENTIFIER = 0x00000001;
//
// Apply to all
//
public static readonly UInt32 BCDE_LIBRARY_TYPE_APPLICATIONPATH =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.STRING, 0x000002);
public static readonly UInt32 BCDE_LIBRARY_TYPE_APPLICATIONDEVICE =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.DEVICE, 0x000001);
public static readonly UInt32 BCDE_LIBRARY_TYPE_DESCRIPTION =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.STRING, 0x000004);
public static readonly UInt32 BCDE_LIBRARY_TYPE_DEBUGGER_ENABLED =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.BOOLEAN, 0x000010);
public static readonly UInt32 BCDE_LIBRARY_TYPE_DEBUGGER_TYPE =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.INTEGER, 0x000011);
public static readonly UInt32 BCDE_LIBRARY_TYPE_DEBUGGER_PORT_ADDRESS =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.INTEGER, 0x000012);
public static readonly UInt32 BCDE_LIBRARY_TYPE_DEBUGGER_PORT_NUMBER =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.INTEGER, 0x000013);
public static readonly UInt32 BCDE_LIBRARY_TYPE_DEBUGGER_BAUDRATE =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.INTEGER, 0x000014);
public static readonly UInt32 BCDE_LIBRARY_TYPE_DEBUGGER_1394_CHANNEL =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.LIBRARY, BCDE_FORMAT.INTEGER, 0x000015);
//
// Valid types for the Windows Boot Manager.
//
public static readonly UInt32 BCDE_BOOTMGR_TYPE_DISPLAY_ORDER =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.OBJECT_LIST, 0x000001);
public static readonly UInt32 BCDE_BOOTMGR_TYPE_BOOT_SEQUENCE =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.OBJECT_LIST, 0x000002);
public static readonly UInt32 BCDE_BOOTMGR_TYPE_DEFAULT_OBJECT =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.OBJECT, 0x000003);
public static readonly UInt32 BCDE_BOOTMGR_TYPE_TIMEOUT =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.INTEGER, 0x000004);
//
// Apply to OS Loader
//
public static readonly UInt32 BCDE_OSLOADER_TYPE_OS_DEVICE =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.DEVICE, 0x000001);
public static readonly UInt32 BCDE_OSLOADER_TYPE_SYSTEM_ROOT =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.STRING, 0x000002);
public static readonly UInt32 BCDE_OSLOADER_TYPE_KERNEL_PATH =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.STRING, 0x000011);
public static readonly UInt32 BCDE_OSLOADER_TYPE_KERNEL_DEBUGGER_ENABLED =
MAKE_BCDE_DATA_TYPE(BCDE_CLASS.APPLICATION, BCDE_FORMAT.BOOLEAN, 0x0000A0);
// new add - slaing - using hex values for speed but these could be created thru the MAKE TYPE macros also
public static readonly UInt32 BCDE_VISTA_OS_ENTRY = 0x10200003;
public static readonly UInt32 BCDE_LEGACY_OS_ENTRY = 0x10300006;
// Enumerations
public enum BCDE_CLASS
{
NONE = 0x0,
LIBRARY = 0x1,
APPLICATION = 0x2,
DEVICE = 0x3,
SETUP_TEMPLATE = 0x4
}
public enum BCDE_FORMAT
{
NONE =0x0,
DEVICE =0x1,
STRING =0x2,
OBJECT =0x3,
OBJECT_LIST =0x4,
INTEGER =0x5,
BOOLEAN =0x6,
}
public enum BCDE_DEBUGGER_TYPE
{
DebuggerSerial,
Debugger1394,
DebuggerUsb,
DebuggerNone
}
public enum BCDE_OBJECT_TYPE
{
APPLICATION = 0x1,
INHERITED = 0x2,
DEVICE = 0x3
}
public enum BCDE_IMAGE_TYPE
{
FIRMWARE_APPLICATION = 0x1,
BOOT_APPLICATION = 0x2,
LEGACY_LOADER = 0x3,
REALMODE_CODE = 0x4
}
public enum BCDE_APPLICATION_TYPE
{
FIRMWARE_BOOT_MANAGER = 0x00001,
WINDOWS_BOOT_MANAGER = 0x00002,
WINDOWS_BOOT_LOADER = 0x00003,
WINDOWS_RESUME_APPLICATION = 0x00004,
MEMORY_TESTER = 0x00005,
LEGACY_NTLDR = 0x00006,
LEGACY_SETUPLDR = 0x00007,
BOOT_SECTOR = 0x00008,
STARTUP_MODULE = 0x00009,
RESERVED = 0xFFFFF
}
// Conversion / utility routines
// Composition of a type id
public static UInt32 MAKE_BCDE_DATA_TYPE(BCDE_CLASS _Class, BCDE_FORMAT _Format, UInt32 _Subtype)
{
return
(((((UInt32)_Class) & 0xF) << 28) |
((((UInt32)_Format) & 0xF) << 24) |
((_Subtype) & 0x00FFFFFF));
}
public static UInt32 MAKE_BCD_APPLICATION_OBJECT(BCDE_IMAGE_TYPE imageType,
BCDE_APPLICATION_TYPE applicationType)
{
return
(((((UInt32)BCDE_OBJECT_TYPE.APPLICATION) & 0xF) << 28) |
((((UInt32)imageType) & 0xF) << 20) |
(((UInt32)applicationType) & 0x000FFFFF));
}
// #define MAKE_BCD_APPLICATION_OBJECT(_ImageType, _ApplicationType) \
//(((ULONG)BCD_OBJECT_TYPE_APPLICATION << 28) | \
// (((ULONG)(_ImageType) & 0xF) << 20) | \
// ((ULONG)(_ApplicationType) & 0xFFFFF))
public static BCDE_CLASS GET_BCDE_DATA_CLASS(UInt32 _DataType)
{
return (BCDE_CLASS)((((_DataType)) >> 28) & 0xF);
}
public static BCDE_FORMAT GET_BCDE_DATA_FORMAT(UInt32 _DataType)
{
return (BCDE_FORMAT)((((_DataType)) >> 24) & 0xF);
}
public static UInt32 GET_BCDE_DATA_SUBTYPE(UInt32 _DataType)
{
return (((_DataType)) & 0x00FFFFFF);
}
}
public class ElementConstants
{
public static readonly UInt32 BcdOSLoaderBoolean_SafeBootAlternateShell = 0x26000081;
public static readonly UInt32 BcdOSLoaderInteger_SafeBoot = 0x25000080;
}
}