101 ULONG FinalPathLength;
104 if (NewPathLength & 1)
111 if (NewPathLength >=
sizeof(
WCHAR))
114 if (NewPathString[(NewPathLength -
sizeof(
WCHAR)) /
sizeof(
WCHAR)] ==
122 if (NewPathLength >=
sizeof(
WCHAR))
133 if (NewPathLength >=
sizeof(
WCHAR))
136 if (NewPathString[(NewPathLength -
sizeof(
WCHAR)) /
sizeof(
WCHAR)] ==
147 if (NewPathLength != 0)
223 Option->DataOffset =
sizeof(*Option);
284 Option->Empty =
TRUE;
325 DevicePath = NextPath;
362 DeviceEntry->Size =
sizeof(*DeviceEntry);
376 DeviceEntry->Local.RamDisk.ImageBase.QuadPart = MemDevicePath->
StartingAddress;
377 DeviceEntry->Local.RamDisk.ImageSize.QuadPart = MemDevicePath->
EndingAddress -
379 DeviceEntry->Local.RamDisk.ImageOffset = 0;
403 DeviceEntry->Local.FloppyDisk.DriveNumber = AcpiPath->
UID;
415 DeviceEntry->Remote.Unknown = 256;
422 DeviceEntry->Local.FloppyDisk.DriveNumber = 0;
439 DeviceEntry->Partition.Disk.HardDisk.PartitionType =
MbrPartition;
440 DeviceEntry->Partition.Disk.HardDisk.Mbr.PartitionSignature =
442 DeviceEntry->Partition.Mbr.PartitionNumber = DiskPath->
PartitionNumber;
454 DeviceEntry->Partition.Disk.HardDisk.PartitionType =
GptPartition;
461 DeviceEntry->Flags |= 4u;
468 DeviceEntry->Partition.Disk.HardDisk.PartitionType =
RawPartition;
469 DeviceEntry->Partition.Disk.HardDisk.Raw.DiskNumber = 0;
478 DeviceEntry->Local.FloppyDisk.DriveNumber = 0;
550 Option->DataOffset =
sizeof(*Option);
613 PWCHAR ObjectString, CommandLine;
615 ULONG HeaderSize, TotalOptionSize,
Size, CommandLineSize, RemainingSize;
620 BOOLEAN HaveBinaryOptions, HaveGuid;
626 *AppEntryDevice =
NULL;
631 if ((WindowsOptions !=
NULL) &&
642 HaveBinaryOptions =
TRUE;
647 CommandLine = LoadOptions;
648 CommandLineSize = LoadOptionsSize;
651 HaveBinaryOptions =
FALSE;
655 CommandLineSize /=
sizeof(
WCHAR);
656 if (CommandLineSize != 0)
659 if (
wcsnlen(CommandLine, CommandLineSize) == CommandLineSize)
682 ObjectString =
wcsstr(CommandLine,
L"BCDOBJECT=");
683 if (ObjectString !=
NULL)
690 Entry->Guid = ObjectGuid;
724 RemainingSize -= TotalOptionSize;
730 if ((*AppEntryDevice)->DeviceType ==
UdpDevice)
751 Entry->BcdData.NextEntryOffset = TotalOptionSize;
755 TotalOptionSize +=
Size;
758 PreviousOption = Option;
761 RemainingSize -=
Size;
767 if ((HaveBinaryOptions) && !(HaveGuid))
793 TotalOptionSize +=
Size;
796 PreviousOption = Option;
799 RemainingSize -=
Size;
819 TotalOptionSize +=
Size;
822 PreviousOption = Option;
825 RemainingSize -=
Size;
872 ULONG FirmwareOffset, ConsumedSize;
891 BootServices = SystemTable->BootServices;
894 (
VOID**)&LoadedImage);
907 (
VOID**)&DevicePath);
952 if (AppDevice !=
NULL)
1020 if (BootParameters !=
NULL)
#define MEDIA_FILEPATH_DP
#define HARDWARE_DEVICE_PATH
#define MEDIA_DEVICE_PATH
FORCEINLINE EFI_DEVICE_PATH_PROTOCOL * NextDevicePathNode(_In_ PVOID Node)
#define SIGNATURE_TYPE_GUID
#define MEDIA_HARDDRIVE_DP
#define SIGNATURE_TYPE_MBR
#define EISA_PNP_ID(_PNPId)
FORCEINLINE UINTN DevicePathNodeLength(_In_ PVOID Node)
FORCEINLINE BOOLEAN IsDevicePathEndType(_In_ PVOID Node)
#define MESSAGING_DEVICE_PATH
#define ALIGN_UP_BY(size, align)
static IN ULONG IN PWSTR OUT PCWSTR OUT PBOOLEAN OUT PATH_TYPE_AND_UNKNOWN * PathType
PRTL_UNICODE_STRING_BUFFER Path
#define EFI_IMAGE_MACHINE_IA32
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
#define OBJ_NAME_PATH_SEPARATOR
@ BcdOSLoaderDevice_OSDevice
@ BcdOSLoaderString_SystemRoot
struct _BCD_DEVICE_OPTION * PBCD_DEVICE_OPTION
@ BcdLibraryDevice_ApplicationDevice
@ BcdLibraryString_ApplicationPath
struct _BL_MEMORY_DESCRIPTOR BL_MEMORY_DESCRIPTOR
struct _BL_FIRMWARE_DESCRIPTOR BL_FIRMWARE_DESCRIPTOR
#define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI
#define BL_FIRMWARE_DESCRIPTOR_VERSION
struct _BL_WINDOWS_LOAD_OPTIONS BL_WINDOWS_LOAD_OPTIONS
struct _BL_DEVICE_DESCRIPTOR BL_DEVICE_DESCRIPTOR
#define BOOT_APPLICATION_SIGNATURE_2
EFI_GUID EfiDevicePathProtocol
#define BL_MEMORY_DATA_VERSION
EFI_GUID EfiLoadedImageProtocol
ULONG BlGetBootOptionSize(_In_ PBL_BCD_OPTION BcdOption)
ULONG BlpApplicationFlags
#define BL_APPLICATION_ENTRY_FLAG_NO_GUID
#define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL
EFI_STATUS EfiGetEfiStatusCode(_In_ NTSTATUS Status)
struct _BL_WINDOWS_LOAD_OPTIONS * PBL_WINDOWS_LOAD_OPTIONS
#define BOOT_APPLICATION_VERSION
#define BL_APP_ENTRY_SIGNATURE
#define BOOT_APPLICATION_SIGNATURE_1
struct _BL_RETURN_ARGUMENTS BL_RETURN_ARGUMENTS
struct _BL_BCD_OPTION BL_BCD_OPTION
#define BL_RETURN_ARGUMENTS_VERSION
#define STATUS_NOT_IMPLEMENTED
#define NT_SUCCESS(StatCode)
struct _BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH
BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH EfiInitScratch
NTSTATUS EfiInitTranslateDevicePath(_In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath, _In_ PBL_DEVICE_DESCRIPTOR DeviceEntry)
NTSTATUS EfiInitpConvertEfiDevicePath(_In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath, _In_ ULONG DeviceType, _In_ PBL_BCD_OPTION Option, _In_ ULONG MaximumLength)
EFI_DEVICE_PATH_PROTOCOL * EfiInitpGetDeviceNode(_In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath)
NTSTATUS EfiInitpConvertEfiFilePath(_In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath, _In_ ULONG PathType, _In_ PBL_BCD_OPTION Option, _In_ ULONG MaximumLength)
VOID EfiInitpCreateApplicationEntry(__in EFI_SYSTEM_TABLE *SystemTable, __in PBL_APPLICATION_ENTRY Entry, __in ULONG MaximumLength, __in EFI_DEVICE_PATH *DevicePath, __in EFI_DEVICE_PATH *FilePath, __in PWCHAR LoadOptions, __in ULONG LoadOptionsSize, __in ULONG Flags, __out PULONG ResultLength, __out PBL_DEVICE_DESCRIPTOR *AppEntryDevice)
NTSTATUS EfiInitpAppendPathString(_In_ PWCHAR PathString, _In_ ULONG MaximumLength, _In_ PWCHAR NewPathString, _In_ ULONG NewPathLength, _Out_ PULONG ResultLength)
NTSTATUS AhCreateLoadOptionsList(_In_ PWCHAR CommandLine, _In_ PBL_BCD_OPTION BootOptions, _In_ ULONG MaximumLength, _Out_ PULONG OptionSize, _In_ PBL_BCD_OPTION *PreviousOption, _In_ PULONG PreviousOptionSize)
PBOOT_APPLICATION_PARAMETER_BLOCK EfiInitCreateInputParametersEx(_In_ EFI_HANDLE ImageHandle, _In_ EFI_SYSTEM_TABLE *SystemTable)
EFI_STATUS EFIAPI EfiEntry(_In_ EFI_HANDLE ImageHandle, _In_ EFI_SYSTEM_TABLE *SystemTable)
NTSTATUS NTAPI BmMain(_In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootParameters)
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
NTSYSAPI NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING, GUID *)
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define STATUS_INTEGER_OVERFLOW
#define STATUS_BUFFER_TOO_SMALL
const KSDEVICE_DESCRIPTOR DeviceDescriptor
size_t __cdecl wcsnlen(wchar_t const *const string, size_t const maximum_count)
EFI_HANDLE_PROTOCOL HandleProtocol
EFI_DEVICE_PATH_PROTOCOL * FilePath
that the EFI Image was loaded from.
VOID * LoadOptions
A pointer to the image's binary load options.
EFI_HANDLE DeviceHandle
The device handle that the EFI Image was loaded from.
UINT32 LoadOptionsSize
The size in bytes of LoadOptions.
UINT64 ImageSize
The size in bytes of the loaded image.
VOID * ImageBase
The base address at which the image was loaded.
base of all file and directory entries
EFI_PHYSICAL_ADDRESS StartingAddress
EFI_PHYSICAL_ADDRESS EndingAddress
BL_DEVICE_DESCRIPTOR DeviceDescriptor
UCHAR Path[ANYSIZE_ARRAY]
EFI_SYSTEM_TABLE * SystemTable
WCHAR LoadOptions[ANYSIZE_ARRAY]
BL_MEMORY_DATA BootMemoryData
BL_MEMORY_DESCRIPTOR MemEntry
BOOT_APPLICATION_PARAMETER_BLOCK
#define FIELD_OFFSET(t, f)
#define RtlCopyMemory(Destination, Source, Length)
#define RtlZeroMemory(Destination, Length)
#define STATUS_INVALID_PARAMETER
#define STATUS_UNSUCCESSFUL
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG _Out_ PULONG ResultLength
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
_In_ WDFDMATRANSACTION _In_ size_t MaximumLength
_Must_inspect_result_ _In_ ULONG Flags