/* CALLBACKS *****************************************************************/
+struct _BL_FILE_ENTRY;
+typedef
+NTSTATUS
+(*PBL_FILE_OPEN) (
+ _In_ struct _BL_FILE_ENTRY* ParentFileEntry,
+ _In_ PWCHAR FileName,
+ _In_ ULONG OpenFlags,
+ _Out_ struct _BL_FILE_ENTRY** FileEntry
+ );
+
+typedef
+NTSTATUS
+(*PBL_FILE_CLOSE) (
+ _In_ struct _BL_FILE_ENTRY* FileEntry
+ );
+
+typedef
+NTSTATUS
+(*PBL_FILE_READ) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_FILE_WRITE) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_FILE_GET_NEXT) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_FILE_GET_INFO) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_FILE_SET_INFO) (
+ VOID
+ );
+
typedef
NTSTATUS
(*PBL_FS_INIT_CALLBACK) (
typedef
NTSTATUS
(*PBL_FS_MOUNT_CALLBACK) (
- VOID
+ _In_ ULONG DeviceId,
+ _In_ ULONG Unknown,
+ _Out_ struct _BL_FILE_ENTRY** FileEntry
);
typedef
_In_ ULONG TableSize
);
+struct _BL_DEVICE_ENTRY;
+struct _BL_DEVICE_DESCRIPTOR;
+struct _BL_DEVICE_INFORMATION;
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_ENUMERATE_DEVICE_CLASS) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_OPEN) (
+ _In_ struct _BL_DEVICE_DESCRIPTOR* Device,
+ _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_CLOSE) (
+ _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_READ) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_WRITE) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_GET_INFORMATION) (
+ _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
+ _Out_ struct _BL_DEVICE_INFORMATION* DeviceInformation
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_SET_INFORMATION) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_RESET) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_FLUSH) (
+ VOID
+ );
+
+typedef
+NTSTATUS
+(*PBL_DEVICE_CREATE) (
+ VOID
+ );
+
+
/* DATA STRUCTURES ***********************************************************/
typedef struct _BL_LIBRARY_PARAMETERS
ULONGLONG Maximum;
} BL_ADDRESS_RANGE, *PBL_ADDRESS_RANGE;
+typedef struct _BL_FILE_CALLBACKS
+{
+ PBL_FILE_OPEN Open;
+ PBL_FILE_CLOSE Close;
+ PBL_FILE_READ Read;
+ PBL_FILE_WRITE Write;
+ PBL_FILE_GET_NEXT GetNext;
+ PBL_FILE_GET_INFO GetInfo;
+ PBL_FILE_SET_INFO SetInfo;
+} BL_FILE_CALLBACKS, *PBL_FILE_CALLBACKS;
+
typedef struct _BL_FILE_ENTRY
{
- ULONG DeviceIndex;
+ ULONG ReferenceCount;
+ ULONG FileId;
+ ULONG DeviceId;
+ ULONG Flags;
+ PWCHAR FilePath;
+ ULONG Unknown;
+ ULONG Unknown1;
+ ULONG Unknown2;
+ BL_FILE_CALLBACKS Callbacks;
PBL_FILE_DESTROY_CALLBACK DestroyCallback;
} BL_FILE_ENTRY, *PBL_FILE_ENTRY;
BL_HASH_VALUE Value;
} BL_HASH_NODE, *PBL_HASH_NODE;
-typedef struct _BL_BLOCK_DEVICE
+typedef struct _BL_BLOCK_DEVICE_INFORMATION
{
BL_LOCAL_DEVICE_TYPE Type;
ULONG DeviceFlags;
} Gpt;
};
} Disk;
+} BL_BLOCK_DEVICE_INFORMATION, *PBL_BLOCK_DEVICE_INFORMATION;
+
+typedef struct _BL_DEVICE_INFORMATION
+{
+ BL_DEVICE_TYPE DeviceType;
+ union
+ {
+ BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo;
+ };
+} BL_DEVICE_INFORMATION, *PBL_DEVICE_INFORMATION;
+
+typedef struct _BL_BLOCK_DEVICE
+{
+ BL_BLOCK_DEVICE_INFORMATION;
ULONGLONG LastBlock;
EFI_BLOCK_IO* Protocol;
EFI_HANDLE Handle;
PVOID Interface;
} BL_PROTOCOL_HANDLE, *PBL_PROTOCOL_HANDLE;
+typedef struct _BL_DEVICE_CALLBACKS
+{
+ PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass;
+ PBL_DEVICE_OPEN Open;
+ PBL_DEVICE_CLOSE Close;
+ PBL_DEVICE_READ Read;
+ PBL_DEVICE_WRITE Write;
+ PBL_DEVICE_GET_INFORMATION GetInformation;
+ PBL_DEVICE_SET_INFORMATION SetInformation;
+ PBL_DEVICE_RESET Reset;
+ PBL_DEVICE_FLUSH Flush;
+ PBL_DEVICE_CREATE Create;
+} BL_DEVICE_CALLBACKS, *PBL_DEVICE_CALLBACKS;
+
+typedef struct _BL_DEVICE_ENTRY
+{
+ ULONG DeviceId;
+ ULONG Flags;
+ ULONG Unknown;
+ ULONG ReferenceCount;
+ BL_DEVICE_CALLBACKS Callbacks;
+ PVOID DeviceSpecificData;
+ PBL_DEVICE_DESCRIPTOR DeviceDescriptor;
+} BL_DEVICE_ENTRY, *PBL_DEVICE_ENTRY;
+
/* INLINE ROUTINES ***********************************************************/
FORCEINLINE
VOID
);
-NTSTATUS
-FatInitialize (
- VOID
- );
-
NTSTATUS
BlpDisplayInitialize (
_In_ ULONG Flags
VOID
);
+/* FILESYSTEM ROUTINES *******************************************************/
+
+NTSTATUS
+FatInitialize (
+ VOID
+ );
+
+NTSTATUS
+FatMount (
+ _In_ ULONG DeviceId,
+ _In_ ULONG Unknown,
+ _Out_ PBL_FILE_ENTRY* FileEntry
+ );
+
/* UTILITY ROUTINES **********************************************************/
EFI_STATUS
_Out_ PULONG DeviceId
);
+NTSTATUS
+BlDeviceGetInformation (
+ _In_ ULONG DeviceId,
+ _Out_ PBL_DEVICE_INFORMATION DeviceInformation
+ );
+
+/* FILE I/O ROUTINES *********************************************************/
+
+NTSTATUS
+BlFileClose (
+ _In_ ULONG FileId
+ );
+
+NTSTATUS
+BlFileOpen (
+ _In_ ULONG DeviceId,
+ _In_ PWCHAR FileName,
+ _In_ ULONG OpenFlags,
+ _Out_ PULONG FileId
+ );
+
/* TEXT CONSOLE ROUTINES *****************************************************/
NTSTATUS