22static uint8_t mount_count = 0;
24#define MAIN_FS_DEVICE 0
28static MOUNTED_FS* vfs_find_fs_for_path(
const char* path) {
29 if (!path)
return NULL;
30 for (uint8_t i = 0; i < mount_count; i++) {
31 const char* mount = mounted_fs[i].mount_point;
33 if (mount[0] ==
'/' && mount[1] ==
'\0')
return &mounted_fs[i];
37 while (mount[mount_len]) mount_len++;
41 while (path[path_len]) path_len++;
42 if (path_len < mount_len)
continue;
45 for (
size_t j = 0; j < mount_len; j++) {
46 if (path[j] != mount[j]) { match =
false;
break; }
48 if (match)
return &mounted_fs[i];
54static MTSTATUS fat32_fs_init(uint8_t device_id) {
59 .init = fat32_fs_init,
76 if (fs && fs->driver && fs->driver->DeleteObjectProcedure) {
77 fs->driver->DeleteObjectProcedure(Object);
119 IN uint64_t FileOffset,
121 IN size_t BufferSize,
126 MOUNTED_FS* fs = vfs_find_fs_for_path(FileObject->FileName);
129 return fs->driver->ReadFile(FileObject, FileOffset, Buffer, BufferSize, BytesRead);
134 IN uint64_t FileOffset,
136 IN size_t BufferSize,
141 MOUNTED_FS* fs = vfs_find_fs_for_path(FileObject->FileName);
144 return fs->driver->WriteFile(FileObject, FileOffset, Buffer, BufferSize, BytesWritten);
152 MOUNTED_FS* fs = vfs_find_fs_for_path(FileObject->FileName);
155 return fs->driver->DeleteFile(FileObject);
165 MOUNTED_FS* fs = vfs_find_fs_for_path(DirectoryObject->FileName);
168 return fs->driver->ListDirectory(DirectoryObject, listings, max_len);
182 fs->driver->CreateDirectory(path, &OutDir);
198 MOUNTED_FS* fs = vfs_find_fs_for_path(DirectoryObject->FileName);
199 if (!fs || !fs->driver || !fs->driver->RemoveDirectoryRecursive)
return MT_NOT_IMPLEMENTED;
201 return fs->driver->RemoveDirectoryRecursive(DirectoryObject);
214 MTSTATUS Status = fs->driver->CreateFile(path, &FileObject);
MTSTATUS ahci_init(void)
define AHCI_DEBUG_PRINT
MTSTATUS fat32_create_file(IN const char *path, OUT PFILE_OBJECT *FileObjectOut)
MTSTATUS fat32_init(int disk_index)
MTSTATUS fat32_read_file(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, OUT void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesRead)
MTSTATUS fat32_write_file(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, IN void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesWritten)
void fat32_deletion_routine(void *Object)
#define MT_FILE_ALL_ACCESS
struct _FILE_OBJECT * PFILE_OBJECT
void gop_printf(uint32_t color, const char *fmt,...)
#define COLOR_RED
Colors definitions for easier access.
FORCEINLINE void * kmemset(void *dest, int64_t val, uint64_t len)
#define MT_NOT_IMPLEMENTED
#define MT_FAILURE(Status)
MTSTATUS ObCreateHandleForObject(IN void *Object, IN ACCESS_MASK DesiredAccess, OUT PHANDLE ReturnedHandle)
MTSTATUS ObCreateObjectType(IN char *TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, OUT POBJECT_TYPE *ReturnedObjectType)
void ObDereferenceObject(IN void *Object)
struct _OBJECT_TYPE * POBJECT_TYPE
struct _OBJECT_TYPE_INITIALIZER OBJECT_TYPE_INITIALIZER
OB_DELETE_METHOD DeleteProcedure
OB_DUMP_METHOD DumpProcedure
uint32_t ValidAccessRights
MTSTATUS FsCreateDirectory(IN const char *path, OUT PHANDLE OutDirectoryObject)
MTSTATUS FsReadFile(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, OUT void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesRead)
MTSTATUS FsInitialize(void)
MTSTATUS FsCreateFile(IN const char *path, IN ACCESS_MASK DesiredAccess, OUT PHANDLE FileHandleOut)
MTSTATUS FsListDirectory(IN PFILE_OBJECT DirectoryObject, OUT char *listings, IN size_t max_len)
MTSTATUS FsWriteFile(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, IN void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesWritten)
MTSTATUS FsDeleteFile(IN PFILE_OBJECT FileObject)
MTSTATUS FsRemoveDirectoryRecursive(IN PFILE_OBJECT DirectoryObject)