122 if (BcdOption->DataOffset)
125 Size = BcdOption->DataOffset + BcdOption->DataSize;
130 Size =
sizeof(*BcdOption);
134 Offset = BcdOption->ListOffset;
195 Status = RtlULongAdd(StringLength, 1, &StringLength);
199 Status = RtlULongMult(StringLength,
sizeof(
WCHAR), &StringLength);
331 ULONG DeviceSize, ListOffset, ListSize;
395 if (BlpBootOptionCallbacks)
397 DeviceCallback = BlpBootOptionCallbacks->Device;
400 Status = DeviceCallback(BlpBootOptionCallbackCookie,
412 SecureListData = ListCopy;
429 if (SecureListData != ListCopy)
608 *CopiedOptions =
NULL;
644 Option->
Type = OptionId;
676 Option->
Type = OptionId;
724 Option->
Type = OptionId;
742 ULONG OptionsSize, CurrentSize;
748 CurrentOptions = AppEntry->BcdData;
776 }
while (CurrentOffset);
792 AppEntry->BcdData = NewOptions;
852 AppEntry->BcdData =
NULL;
869 AppEntry->BcdData = NewOptions;
NTSTATUS BlAppendBootOptionBoolean(_In_ PBL_LOADED_APPLICATION_ENTRY AppEntry, _In_ ULONG OptionId, _In_ BOOLEAN Value)
#define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL
NTSTATUS BlGetBootOptionGuidList(_In_ PBL_BCD_OPTION List, _In_ ULONG Type, _Out_ PGUID *Value, _In_ PULONG Count)
NTSTATUS BlAppendBootOptions(_In_ PBL_LOADED_APPLICATION_ENTRY AppEntry, _In_ PBL_BCD_OPTION Options)
struct _BL_BCD_OPTION * PBL_BCD_OPTION
#define STATUS_INVALID_PARAMETER
IN PVOID IN PVOID IN USHORT IN USHORT Size
NTSTATUS BlGetBootOptionString(_In_ PBL_BCD_OPTION List, _In_ ULONG Type, _Out_ PWCHAR *Value)
#define BCD_TYPE_INTEGER_LIST
NTSTATUS BlMmFreeHeap(_In_ PVOID Buffer)
NTSTATUS BlGetBootOptionBoolean(_In_ PBL_BCD_OPTION List, _In_ ULONG Type, _Out_ PBOOLEAN Value)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
PBL_BCD_OPTION MiscGetBootOption(_In_ PBL_BCD_OPTION List, _In_ ULONG Type)
NTSTATUS BlCopyBootOptions(_In_ PBL_BCD_OPTION OptionList, _Out_ PBL_BCD_OPTION *CopiedOptions)
PVOID BlMmAllocateHeap(_In_ SIZE_T Size)
BL_DEVICE_DESCRIPTOR DeviceDescriptor
static PCWSTR OptionList[]
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
const KSDEVICE_DESCRIPTOR DeviceDescriptor
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
#define NT_SUCCESS(StatCode)
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
ULONG BlGetBootOptionListSize(_In_ PBL_BCD_OPTION BcdOption)
NTSTATUS BlGetBootOptionDevice(_In_ PBL_BCD_OPTION List, _In_ ULONG Type, _Out_ PBL_DEVICE_DESCRIPTOR *Value, _In_opt_ PBL_BCD_OPTION *ExtraOptions)
NTSTATUS BlGetBootOptionInteger(_In_ PBL_BCD_OPTION List, _In_ ULONG Type, _Out_ PULONGLONG Value)
NTSTATUS BlAppendBootOptionString(_In_ PBL_LOADED_APPLICATION_ENTRY AppEntry, _In_ ULONG OptionId, _In_ PWCHAR OptionString)
PGUID BlGetApplicationIdentifier(VOID)
ULONG BlGetBootOptionSize(_In_ PBL_BCD_OPTION BcdOption)
#define BCD_TYPE_OBJECT_LIST
_Must_inspect_result_ _In_ WDFCMRESLIST List
NTSTATUS BlGetBootOptionGuid(_In_ PBL_BCD_OPTION List, _In_ ULONG Type, _Out_ PGUID Value)
_In_ ULONG _In_ ULONG Offset
_CRTIMP wchar_t *__cdecl wcsncpy(wchar_t *_Dest, const wchar_t *_Source, size_t _Count)
NTSTATUS BlAppendBootOptionInteger(_In_ PBL_LOADED_APPLICATION_ENTRY AppEntry, _In_ ULONG OptionId, _In_ ULONGLONG Value)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
struct _BCD_DEVICE_OPTION * PBCD_DEVICE_OPTION
VOID BlRemoveBootOption(_In_ PBL_BCD_OPTION List, _In_ ULONG Type)
NTSTATUS BlReplaceBootOptions(_In_ PBL_LOADED_APPLICATION_ENTRY AppEntry, _In_ PBL_BCD_OPTION OldOptions)
__GNU_EXTENSION typedef unsigned __int64 * PULONGLONG
#define RtlZeroMemory(Destination, Length)
#define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL
#define RtlCopyMemory(Destination, Source, Length)
NTSTATUS BlpGetBootOptionIntegerList(_In_ PBL_BCD_OPTION List, _In_ ULONG Type, _Out_ PULONGLONG *Value, _Out_ PULONGLONG Count, _In_ BOOLEAN NoCopy)
static char * NextOption(const char *const ostr)