diff --git a/sdk/xtdk/bltypes.h b/sdk/xtdk/bltypes.h index 78ea37f..8093122 100644 --- a/sdk/xtdk/bltypes.h +++ b/sdk/xtdk/bltypes.h @@ -31,6 +31,7 @@ /* Loader protocol routine pointers */ typedef EFI_STATUS (*PBL_ALLOCATE_PAGES)(IN UINT64 Size, OUT PEFI_PHYSICAL_ADDRESS Memory); typedef EFI_STATUS (*PBL_ALLOCATE_POOL)(IN UINT_PTR Size, OUT PVOID *Memory); +typedef EFI_STATUS (*PBL_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle); typedef VOID (*PBL_CONSOLE_CLEAR_SCREEN)(); typedef VOID (*PBL_CONSOLE_DISABLE_CURSOR)(); typedef VOID (*PBL_CONSOLE_ENABLE_CURSOR)(); @@ -39,6 +40,7 @@ typedef VOID (*PBL_DEBUG_PRINT)(IN PUINT16 Format, IN ...); typedef EFI_STATUS (*PBL_EXIT_BOOT_SERVICES)(IN UINT_PTR MapKey); typedef EFI_STATUS (*PBL_FREE_PAGES)(IN UINT64 Size, IN EFI_PHYSICAL_ADDRESS Memory); typedef EFI_STATUS (*PBL_FREE_POOL)(IN PVOID Memory); +typedef EFI_STATUS (*PBL_OPEN_VOLUME)(IN PEFI_DEVICE_PATH_PROTOCOL DevicePath, OUT PEFI_HANDLE DiskHandle, OUT PEFI_FILE_HANDLE *FsHandle); typedef EFI_STATUS (*PBL_OPEN_XT_PROTOCOL)(OUT PVOID *ProtocolHandler, IN PEFI_GUID ProtocolGuid); typedef VOID (*PBL_SLEEP_EXECUTION)(IN ULONG_PTR Milliseconds); @@ -91,6 +93,11 @@ typedef struct _XTBL_LOADER_PROTOCOL PBL_EXIT_BOOT_SERVICES ExitBootServices; PBL_SLEEP_EXECUTION SleepExecution; } Util; + struct + { + PBL_CLOSE_VOLUME Close; + PBL_OPEN_VOLUME Open; + } Volume; } XTBL_LOADER_PROTOCOL, *PXTBL_LOADER_PROTOCOL; #endif /* __XTDK_BMTYPES_H */ diff --git a/xtldr2/protocol.c b/xtldr2/protocol.c index 34aa2bb..2a3d20c 100644 --- a/xtldr2/protocol.c +++ b/xtldr2/protocol.c @@ -102,6 +102,8 @@ BlpRegisterXtLoaderProtocol() LdrProtocol.Protocol.Open = BlOpenXtProtocol; LdrProtocol.Util.ExitBootServices = BlExitBootServices; LdrProtocol.Util.SleepExecution = BlSleepExecution; + LdrProtocol.Volume.Close = BlCloseVolume; + LdrProtocol.Volume.Open = BlOpenVolume; /* Register XTLDR loader protocol */ BlDebugPrint(L"Registering XT loader protocol\n");