[fastfat_new]
[reactos.git] / reactos / drivers / filesystems / fastfat_new / fastfat.h
1 #include <ntifs.h>
2 #include <ntdddisk.h>
3 #include <debug.h>
4 #include <pseh/pseh2.h>
5
6 #include <fat.h>
7 #include <fatstruc.h>
8
9 #define Add2Ptr(P,I,T) ((T)((PUCHAR)(P) + (I)))
10 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
11
12 #define TAG_CCB 'BCCV'
13 #define TAG_FCB 'BCFV'
14 #define TAG_IRP 'PRIV'
15 #define TAG_VFAT 'TAFV'
16
17
18 /* Global resource acquire/release */
19 #define FatAcquireExclusiveGlobal(IrpContext) \
20 ( \
21 ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \
22 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
23 )
24
25 #define FatAcquireSharedGlobal(IrpContext) \
26 ( \
27 ExAcquireResourceSharedLite(&FatGlobalData.Resource, \
28 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
29 )
30
31 #define FatReleaseGlobal(IrpContext) \
32 { \
33 ExReleaseResourceLite(&(FatGlobalData.Resource)); \
34 }
35
36
37 /* ------------------------------------------------------ shutdown.c */
38
39 DRIVER_DISPATCH FatShutdown;
40 NTSTATUS NTAPI
41 FatShutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp);
42
43 /* -------------------------------------------------------- volume.c */
44
45 NTSTATUS NTAPI
46 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp);
47
48 NTSTATUS NTAPI
49 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp);
50
51 /* ------------------------------------------------------ blockdev.c */
52 NTSTATUS
53 NTAPI
54 FatPerformLboIo(
55 IN PFAT_IRP_CONTEXT IrpContext,
56 IN PLARGE_INTEGER Offset,
57 IN SIZE_T Length);
58
59 NTSTATUS
60 FatPerformVirtualNonCachedIo(
61 IN PFAT_IRP_CONTEXT IrpContext,
62 IN PFCB Fcb,
63 IN PLARGE_INTEGER Offset,
64 IN SIZE_T Length);
65
66 PVOID
67 FatMapUserBuffer(
68 IN OUT PIRP Irp);
69
70 /* ----------------------------------------------------------- dir.c */
71
72 NTSTATUS NTAPI
73 FatDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
74
75 /* -------------------------------------------------------- create.c */
76
77 NTSTATUS NTAPI
78 FatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
79
80
81 /* --------------------------------------------------------- close.c */
82
83 NTSTATUS NTAPI
84 FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
85
86 /* ------------------------------------------------------- cleanup.c */
87
88 NTSTATUS NTAPI
89 FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
90
91 /* --------------------------------------------------------- fastio.c */
92
93 VOID
94 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch);
95
96 BOOLEAN NTAPI
97 FatAcquireForLazyWrite(IN PVOID Context,
98 IN BOOLEAN Wait);
99
100 VOID NTAPI
101 FatReleaseFromLazyWrite(IN PVOID Context);
102
103 BOOLEAN NTAPI
104 FatAcquireForReadAhead(IN PVOID Context,
105 IN BOOLEAN Wait);
106
107 VOID NTAPI
108 FatReleaseFromReadAhead(IN PVOID Context);
109
110 BOOLEAN NTAPI
111 FatNoopAcquire(IN PVOID Context,
112 IN BOOLEAN Wait);
113
114 VOID NTAPI
115 FatNoopRelease(IN PVOID Context);
116
117 /* --------------------------------------------------------- fastfat.c */
118
119 PFAT_IRP_CONTEXT NTAPI
120 FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait);
121
122 VOID NTAPI
123 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext);
124
125 VOID
126 NTAPI
127 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext,
128 IN PFAT_OPERATION_HANDLER OperationHandler);
129
130 VOID NTAPI
131 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL,
132 PIRP Irp OPTIONAL,
133 NTSTATUS Status);
134
135
136 /* --------------------------------------------------------- lock.c */
137
138 NTSTATUS NTAPI
139 FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
140
141 /* --------------------------------------------------------- fsctl.c */
142
143 NTSTATUS NTAPI
144 FatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
145
146 /* --------------------------------------------------------- finfo.c */
147
148 NTSTATUS NTAPI FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
149 NTSTATUS NTAPI FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
150
151 /* --------------------------------------------------------- iface.c */
152
153 NTSTATUS
154 NTAPI
155 DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
156
157 /* ----------------------------------------------------------- fat.c */
158 PVOID
159 FatPinPage(
160 PFAT_PAGE_CONTEXT Context,
161 LONGLONG ByteOffset);
162
163 PVOID
164 FatPinNextPage(
165 PFAT_PAGE_CONTEXT Context);
166
167 NTSTATUS
168 FatInitializeVcb(
169 IN PFAT_IRP_CONTEXT IrpContext,
170 IN PVCB Vcb,
171 IN PDEVICE_OBJECT TargetDeviceObject,
172 IN PVPB Vpb);
173
174 VOID
175 FatUninitializeVcb(
176 IN PVCB Vcb);
177
178 ULONG
179 FatScanFat(
180 IN PFCB Fcb,
181 IN LONGLONG Vbo, OUT PLONGLONG Lbo,
182 IN OUT PLONGLONG Length,
183 OUT PULONG Index,
184 IN BOOLEAN CanWait);
185
186 /* ------------------------------------------------------ device.c */
187
188 NTSTATUS NTAPI
189 FatDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
190
191 NTSTATUS
192 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject,
193 ULONG ControlCode,
194 PVOID InputBuffer,
195 ULONG InputBufferSize,
196 PVOID OutputBuffer,
197 ULONG OutputBufferSize,
198 BOOLEAN Override);
199
200 /* ------------------------------------------------------ direntry.c */
201 VOID
202 FatFindDirent(IN OUT PFAT_FIND_DIRENT_CONTEXT Context,
203 OUT PDIR_ENTRY* Dirent,
204 OUT PUNICODE_STRING LongFileName OPTIONAL);
205
206 VOID
207 FatEnumerateDirents(IN OUT PFAT_ENUM_DIRENT_CONTEXT Context,
208 IN SIZE_T Offset);
209
210 VOID
211 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes,
212 IN PDIR_ENTRY Dirent);
213
214 /* ----------------------------------------------------------- fcb.c */
215 PFCB
216 FatLookupFcbByName(
217 IN PFCB ParentFcb,
218 IN PUNICODE_STRING Name);
219
220 BOOLEAN
221 FatLinkFcbNames(
222 IN PFCB ParentFcb,
223 IN PFCB Fcb);
224
225 VOID
226 FatUnlinkFcbNames(
227 IN PFCB ParentFcb,
228 IN PFCB Fcb);
229
230 NTSTATUS
231 FatCreateFcb(
232 OUT PFCB* CreatedFcb,
233 IN PFAT_IRP_CONTEXT IrpContext,
234 IN PFCB ParentFcb,
235 IN PDIR_ENTRY Dirent,
236 IN PUNICODE_STRING FileName,
237 IN PUNICODE_STRING LongFileName OPTIONAL);
238
239 NTSTATUS
240 FatOpenFcb(
241 OUT PFCB* Fcb,
242 IN PFAT_IRP_CONTEXT IrpContext,
243 IN PFCB ParentFcb,
244 IN PUNICODE_STRING FileName);
245
246 /* ------------------------------------------------------------ rw.c */
247
248 NTSTATUS NTAPI
249 FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
250
251 NTSTATUS NTAPI
252 FatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
253
254 /* ------------------------------------------------------------- flush.c */
255
256 NTSTATUS NTAPI
257 FatFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
258
259
260 /* EOF */