kernel
Loading...
Searching...
No Matches
fs.h
Go to the documentation of this file.
1/*++
2
3Module Name:
4
5 fs.h
6
7Purpose:
8
9 This module contains the header files & prototypes required for filesystem operation in the kernel.
10
11Author:
12
13 slep (Matanel) 2025.
14
15Revision History:
16
17--*/
18
19#ifndef X86_MATANEL_FS_H
20#define X86_MATANEL_FS_H
21
22#include "../mtstatus.h"
23#include "ob.h"
24
25#define MAX_PATH 256
26
27#define MT_FILE_READ_DATA 0x0001 // file & pipe
28#define MT_FILE_LIST_DIRECTORY 0x0001 // directory
29
30#define MT_FILE_WRITE_DATA 0x0002 // file & pipe
31#define MT_FILE_ADD_FILE 0x0002 // directory
32
33#define MT_FILE_APPEND_DATA 0x0004 // file
34#define MT_FILE_ADD_SUBDIRECTORY 0x0004 // directory
35#define MT_FILE_CREATE_PIPE_INSTANCE 0x0004 // named pipe
36
37#define MT_FILE_READ_EA 0x0008 // file & directory
38#define MT_FILE_WRITE_EA 0x0010 // file & directory
39
40#define MT_FILE_EXECUTE 0x0020 // file
41#define MT_FILE_TRAVERSE 0x0020 // directory
42
43#define MT_FILE_DELETE_CHILD 0x0040 // directory
44
45#define MT_FILE_READ_ATTRIBUTES 0x0080 // all
46#define MT_FILE_WRITE_ATTRIBUTES 0x0100 // all
47#define MT_FILE_ALL_ACCESS 0x01FF // everything above
48
49#define MT_FILE_GENERIC_READ ( MT_FILE_READ_DATA | MT_FILE_READ_ATTRIBUTES | MT_FILE_READ_EA )
50#define MT_FILE_GENERIC_WRITE ( MT_FILE_WRITE_DATA | MT_FILE_WRITE_ATTRIBUTES | MT_FILE_WRITE_EA | MT_FILE_APPEND_DATA )
51#define MT_FILE_GENERIC_EXECUTE ( MT_FILE_READ_ATTRIBUTES | MT_FILE_EXECUTE )
52
53// PFILE_OBJECT->Flags
55 MT_FOF_NONE = 0x00000000, // no flags
56
57 // Basic object types, if MT_FOF_DIRECTORY bit is set, it is a directory, otherwise, it is a file.
58 MT_FOF_DIRECTORY = 0x00000001, // object is a directory
59 MT_FOF_READ_ONLY = 0x00000002, // DOS readonly attribute (persisted)
60 MT_FOF_HIDDEN = 0x00000004, // DOS hidden (persisted)
61 MT_FOF_SYSTEM = 0x00000008, // DOS system (persisted)
62 MT_FOF_VOLUME_LABEL = 0x00000010, // volume label entry (rare)
63 MT_FOF_ARCHIVE = 0x00000020, // DOS archive bit (persisted)
64
65 // Storage attributes
66 MT_FOF_COMPRESSED = 0x00000040, // file is compressed (on-disk)
67 MT_FOF_ENCRYPTED = 0x00000080, // file is encrypted (on-disk)
68 MT_FOF_SPARSE = 0x00000100, // sparse file support
69 MT_FOF_TEMPORARY = 0x00000200, // temporary file (do not write to disk eagerly)
70 MT_FOF_OFFLINE = 0x00000400, // data moved offline / recall needed
71
72 // Lifecycle object.
73 MT_FOF_APPEND_ONLY = 0x00000800, // all writes forced to EOF
74 MT_FOF_IMMUTABLE = 0x00001000, // contents cannot be changed (readonly at FS level)
75 MT_FOF_DELETE_ON_CLOSE = 0x00002000, // mark to delete when last handle closes
76 MT_FOF_DELETE_PENDING = 0x00004000, // already unlinked; still open by handles
77
78 // IO
79 MT_FOF_NO_CACHE = 0x00008000, // do not cache in page cache
80 MT_FOF_WRITE_THROUGH = 0x00010000, // writes bypass cache (write-through)
81 MT_FOF_REPARSE_POINT = 0x00020000, // entry is a reparse point / junction / symlink
82
83 // State markers
84 MT_FOF_LOCKED = 0x00040000, // someone holds exclusive FS-level lock (useful for mkdir/rmdir)
85 MT_FOF_DIRTY_METADATA = 0x00080000, // metadata changed and needs flush.
86
87 // Reserved.
88 MT_FOF_RESERVED_1 = 0x00100000,
89 MT_FOF_RESERVED_2 = 0x00200000,
90 MT_FOF_RESERVED_3 = 0x00400000,
91
92 // Reserved.
96
97// ------------------ STRUCTURES ------------------
98
99typedef struct _FILE_OBJECT {
100 // Name of the file. (full path)
101 char* FileName;
102
103 // Filesystem-specific context (e. first cluster number of file/dir in our FAT32)
105
106 // Size of the file in bytes
107 uint64_t FileSize;
108
109 // Current read/write position in file
111
112 // Flags: directory, read-only, etc.
113 uint32_t Flags;
115
116typedef struct FS_DRIVER {
117 // Initialize driver for a device
118 MTSTATUS(*init)(uint8_t device_id);
120 IN uint64_t FileOffset,
121 OUT void* Buffer,
122 IN size_t BufferSize,
123 _Out_Opt size_t* BytesRead);
125 IN uint64_t FileOffset,
126 IN void* Buffer,
127 IN size_t BufferSize,
128 _Out_Opt size_t* BytesWritten);
131 OUT char* listings,
132 IN size_t max_len);
135 IN const char* path,
136 OUT PFILE_OBJECT* OutDirectoryObject
137 );
138 MTSTATUS(*CreateFile)(IN const char* path,
139 OUT PFILE_OBJECT* FileObjectOut);
140 void(*DeleteObjectProcedure)(IN void* Object);
141
143
144// ------------------ FUNCTIONS ------------------
146typedef int32_t HANDLE, * PHANDLE;
147typedef uint32_t ACCESS_MASK;
148
150
152 IN const char* path,
153 IN ACCESS_MASK DesiredAccess,
154 OUT PHANDLE FileHandleOut
155);
156
158 IN PFILE_OBJECT FileObject,
159 IN uint64_t FileOffset,
160 OUT void* Buffer,
161 IN size_t BufferSize,
162 _Out_Opt size_t* BytesRead
163);
164
166 IN PFILE_OBJECT FileObject,
167 IN uint64_t FileOffset,
168 IN void* Buffer,
169 IN size_t BufferSize,
170 _Out_Opt size_t* BytesWritten
171);
172
174 IN PFILE_OBJECT FileObject
175);
176
178 IN PFILE_OBJECT DirectoryObject,
179 OUT char* listings,
180 IN size_t max_len
181);
182
184 IN const char* path,
185 OUT PHANDLE OutDirectoryObject
186);
187
189 IN PFILE_OBJECT DirectoryObject
190);
191
192#endif
#define _Out_Opt
Definition annotations.h:11
#define IN
Definition annotations.h:8
#define OUT
Definition annotations.h:9
uint32_t ACCESS_MASK
Definition core.h:59
int32_t * PHANDLE
Definition core.h:58
int32_t HANDLE
Definition core.h:58
MTSTATUS FsCreateDirectory(IN const char *path, OUT PHANDLE OutDirectoryObject)
Definition vfs.c:171
struct _FILE_OBJECT * PFILE_OBJECT
MTSTATUS FsReadFile(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, OUT void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesRead)
Definition vfs.c:117
MTSTATUS FsInitialize(void)
Definition vfs.c:81
MTSTATUS FsCreateFile(IN const char *path, IN ACCESS_MASK DesiredAccess, OUT PHANDLE FileHandleOut)
Definition vfs.c:204
MTSTATUS FsListDirectory(IN PFILE_OBJECT DirectoryObject, OUT char *listings, IN size_t max_len)
Definition vfs.c:158
_MT_FILE_OBJECT_FLAGS
Definition fs.h:54
@ MT_FOF_VOLUME_LABEL
Definition fs.h:62
@ MT_FOF_DIRTY_METADATA
Definition fs.h:85
@ MT_FOF_HIDDEN
Definition fs.h:60
@ MT_FOF_LOCKED
Definition fs.h:84
@ MT_FOF_RESERVED_2
Definition fs.h:89
@ MT_FOF_READ_ONLY
Definition fs.h:59
@ MT_FOF_WRITE_THROUGH
Definition fs.h:80
@ MT_FOF_TEMPORARY
Definition fs.h:69
@ MT_FOF_NONE
Definition fs.h:55
@ MT_FOF_RESERVED_1
Definition fs.h:88
@ MT_FOF_RESERVED_3
Definition fs.h:90
@ MT_FOF_ENCRYPTED
Definition fs.h:67
@ MT_FOF_DIRECTORY
Definition fs.h:58
@ MT_FOF_FS_RESERVED_MASK
Definition fs.h:94
@ MT_FOF_ARCHIVE
Definition fs.h:63
@ MT_FOF_IMMUTABLE
Definition fs.h:74
@ MT_FOF_FS_RESERVED_START
Definition fs.h:93
@ MT_FOF_SYSTEM
Definition fs.h:61
@ MT_FOF_DELETE_ON_CLOSE
Definition fs.h:75
@ MT_FOF_NO_CACHE
Definition fs.h:79
@ MT_FOF_DELETE_PENDING
Definition fs.h:76
@ MT_FOF_REPARSE_POINT
Definition fs.h:81
@ MT_FOF_COMPRESSED
Definition fs.h:66
@ MT_FOF_SPARSE
Definition fs.h:68
@ MT_FOF_OFFLINE
Definition fs.h:70
@ MT_FOF_APPEND_ONLY
Definition fs.h:73
MTSTATUS FsWriteFile(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, IN void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesWritten)
Definition vfs.c:132
struct _FILE_OBJECT FILE_OBJECT
MTSTATUS FsDeleteFile(IN PFILE_OBJECT FileObject)
Definition vfs.c:147
enum _MT_FILE_OBJECT_FLAGS MT_FILE_OBJECT_FLAGS
MTSTATUS FsRemoveDirectoryRecursive(IN PFILE_OBJECT DirectoryObject)
Definition vfs.c:193
int32_t MTSTATUS
Definition mtstatus.h:12
struct _OBJECT_TYPE * POBJECT_TYPE
uint64_t CurrentOffset
Definition fs.h:110
char * FileName
Definition fs.h:101
void * FsContext
Definition fs.h:104
uint64_t FileSize
Definition fs.h:107
uint32_t Flags
Definition fs.h:113
MTSTATUS(* ReadFile)(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, OUT void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesRead)
Definition fs.h:119
void(* DeleteObjectProcedure)(IN void *Object)
Definition fs.h:140
MTSTATUS(* ListDirectory)(IN PFILE_OBJECT DirectoryObject, OUT char *listings, IN size_t max_len)
Definition fs.h:130
MTSTATUS(* CreateFile)(IN const char *path, OUT PFILE_OBJECT *FileObjectOut)
Definition fs.h:138
MTSTATUS(* RemoveDirectoryRecursive)(IN PFILE_OBJECT DirectoryObject)
Definition fs.h:133
MTSTATUS(* init)(uint8_t device_id)
Definition fs.h:118
MTSTATUS(* CreateDirectory)(IN const char *path, OUT PFILE_OBJECT *OutDirectoryObject)
Definition fs.h:134
MTSTATUS(* WriteFile)(IN PFILE_OBJECT FileObject, IN uint64_t FileOffset, IN void *Buffer, IN size_t BufferSize, _Out_Opt size_t *BytesWritten)
Definition fs.h:124
MTSTATUS(* DeleteFile)(IN PFILE_OBJECT FileObject)
Definition fs.h:129
POBJECT_TYPE FsFileType
Definition vfs.c:26