diff --git a/BOOT/ENVIRON/INC/bootlib.h b/BOOT/ENVIRON/INC/bootlib.h index ed3c543..bb79085 100644 --- a/BOOT/ENVIRON/INC/bootlib.h +++ b/BOOT/ENVIRON/INC/bootlib.h @@ -23,6 +23,16 @@ typedef struct { ULONG Flags; } BOOT_LIBRARY_PARAMETERS, *PBOOT_LIBRARY_PARAMETERS; +ULONG +BlGetBootOptionSize ( + IN PBOOT_APPLICATION_ENTRY_OPTION Option + ); + +ULONG +BlGetBootOptionListSize ( + IN PBOOT_APPLICATION_ENTRY_OPTION Options + ); + NTSTATUS BlInitializeLibrary ( IN PBOOT_INPUT_PARAMETERS InputParameters, diff --git a/BOOT/ENVIRON/LIB/bootlib.c b/BOOT/ENVIRON/LIB/bootlib.c index 395ae76..5b1b1fa 100644 --- a/BOOT/ENVIRON/LIB/bootlib.c +++ b/BOOT/ENVIRON/LIB/bootlib.c @@ -25,6 +25,84 @@ Abstract: sizeof(BOOT_RETURN_DATA) \ ) +ULONG +BlGetBootOptionListSize ( + IN PBOOT_APPLICATION_ENTRY_OPTION Options + ); + +ULONG +BlGetBootOptionSize ( + IN PBOOT_APPLICATION_ENTRY_OPTION Option + ) + +/*++ + +Routine Description: + + Gets the size of a boot option. + +Arguments: + + Option - the boot option to get the size of. + +Return Value: + + The size of the option. + +--*/ + +{ + ULONG TotalSize; + + if (Option->DataOffset != 0) { + TotalSize = Option->DataOffset + Option->DataSize; + } else { + TotalSize = sizeof(BOOT_APPLICATION_ENTRY_OPTION); + } + + if (Option->OtherOptionsOffset != 0) { + TotalSize += BlGetBootOptionListSize((PBOOT_APPLICATION_ENTRY_OPTION)((PUCHAR)Option + Option->OtherOptionsOffset)); + } + + return TotalSize; +} + +ULONG +BlGetBootOptionListSize ( + IN PBOOT_APPLICATION_ENTRY_OPTION Options + ) + +/*++ + +Routine Description: + + Gets the total size of a list boot options. + +Arguments: + + Options - the boot option list to get the size of. + +Return Value: + + The size of the options. + +--*/ + +{ + ULONG TotalSize, NextOffset; + PBOOT_APPLICATION_ENTRY_OPTION Option; + + TotalSize = 0; + NextOffset = 0; + do { + Option = (PBOOT_APPLICATION_ENTRY_OPTION)((PUCHAR)Options + NextOffset); + NextOffset = Option->NextOptionOffset; + TotalSize += BlGetBootOptionSize(Option); + } while (NextOffset != 0); + + return TotalSize; +} + NTSTATUS InitializeLibrary ( IN PBOOT_INPUT_PARAMETERS InputParameters,