6f79db7b77e07e944462b92732f170aabdcb26ef
[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 "fullfat.h"
7
8 #include <fat.h>
9 #include <fatstruc.h>
10
11 #define Add2Ptr(P,I,T) ((T)((PUCHAR)(P) + (I)))
12 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
13
14 #define TAG_CCB 'BCCV'
15 #define TAG_FCB 'BCFV'
16 #define TAG_IRP 'PRIV'
17 #define TAG_VFAT 'TAFV'
18
19
20 /* Global resource acquire/release */
21 #define FatAcquireExclusiveGlobal(IrpContext) \
22 ( \
23 ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \
24 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
25 )
26
27 #define FatAcquireSharedGlobal(IrpContext) \
28 ( \
29 ExAcquireResourceSharedLite(&FatGlobalData.Resource, \
30 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
31 )
32
33 #define FatReleaseGlobal(IrpContext) \
34 { \
35 ExReleaseResourceLite(&(FatGlobalData.Resource)); \
36 }
37
38
39 /* ------------------------------------------------------ shutdown.c */
40
41 DRIVER_DISPATCH FatShutdown;
42 NTSTATUS NTAPI
43 FatShutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp);
44
45 /* -------------------------------------------------------- volume.c */
46
47 NTSTATUS NTAPI
48 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp);
49
50 NTSTATUS NTAPI
51 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp);
52
53 VOID NTAPI
54 FatReadStreamFile(PVCB Vcb,
55 ULONGLONG ByteOffset,
56 ULONG ByteSize,
57 PBCB *Bcb,
58 PVOID *Buffer);
59
60 /* ------------------------------------------------------ blockdev.c */
61 NTSTATUS
62 NTAPI
63 FatPerformLboIo(
64 IN PFAT_IRP_CONTEXT IrpContext,
65 IN PLARGE_INTEGER Offset,
66 IN SIZE_T Length);
67
68 NTSTATUS
69 FatPerformVirtualNonCachedIo(
70 IN PFAT_IRP_CONTEXT IrpContext,
71 IN PFCB Fcb,
72 IN PLARGE_INTEGER Offset,
73 IN SIZE_T Length);
74
75 /* ----------------------------------------------------------- dir.c */
76
77 NTSTATUS NTAPI
78 FatDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
79
80 VOID NTAPI
81 FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext,
82 IN PVCB Vcb);
83
84 PFCB NTAPI
85 FatCreateDcb(IN PFAT_IRP_CONTEXT IrpContext,
86 IN PVCB Vcb,
87 IN PFCB ParentDcb,
88 IN FF_FILE *FileHandle);
89
90 IO_STATUS_BLOCK NTAPI
91 FatiOpenExistingDcb(IN PFAT_IRP_CONTEXT IrpContext,
92 IN PFILE_OBJECT FileObject,
93 IN PVCB Vcb,
94 IN PFCB Dcb,
95 IN PACCESS_MASK DesiredAccess,
96 IN USHORT ShareAccess,
97 IN ULONG CreateDisposition,
98 IN BOOLEAN NoEaKnowledge,
99 IN BOOLEAN DeleteOnClose);
100
101 /* -------------------------------------------------------- create.c */
102
103 NTSTATUS NTAPI
104 FatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
105
106
107 /* --------------------------------------------------------- close.c */
108
109 NTSTATUS NTAPI
110 FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
111
112 /* ------------------------------------------------------- cleanup.c */
113
114 NTSTATUS NTAPI
115 FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
116
117 /* --------------------------------------------------------- fastio.c */
118
119 VOID
120 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch);
121
122 BOOLEAN NTAPI
123 FatAcquireForLazyWrite(IN PVOID Context,
124 IN BOOLEAN Wait);
125
126 VOID NTAPI
127 FatReleaseFromLazyWrite(IN PVOID Context);
128
129 BOOLEAN NTAPI
130 FatAcquireForReadAhead(IN PVOID Context,
131 IN BOOLEAN Wait);
132
133 VOID NTAPI
134 FatReleaseFromReadAhead(IN PVOID Context);
135
136 BOOLEAN NTAPI
137 FatNoopAcquire(IN PVOID Context,
138 IN BOOLEAN Wait);
139
140 VOID NTAPI
141 FatNoopRelease(IN PVOID Context);
142
143 /* --------------------------------------------------------- fastfat.c */
144
145 PFAT_IRP_CONTEXT NTAPI
146 FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait);
147
148 VOID NTAPI
149 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext);
150
151 VOID
152 NTAPI
153 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext,
154 IN PFAT_OPERATION_HANDLER OperationHandler);
155
156 VOID NTAPI
157 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL,
158 PIRP Irp OPTIONAL,
159 NTSTATUS Status);
160
161 BOOLEAN NTAPI
162 FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext,
163 IN PVCB Vcb);
164
165 BOOLEAN NTAPI
166 FatAcquireSharedVcb(IN PFAT_IRP_CONTEXT IrpContext,
167 IN PVCB Vcb);
168
169 VOID NTAPI
170 FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext,
171 IN PVCB Vcb);
172
173 BOOLEAN NTAPI
174 FatAcquireExclusiveFcb(IN PFAT_IRP_CONTEXT IrpContext,
175 IN PFCB Fcb);
176
177 BOOLEAN NTAPI
178 FatAcquireSharedFcb(IN PFAT_IRP_CONTEXT IrpContext,
179 IN PFCB Fcb);
180
181 VOID NTAPI
182 FatReleaseFcb(IN PFAT_IRP_CONTEXT IrpContext,
183 IN PFCB Fcb);
184
185 TYPE_OF_OPEN
186 NTAPI
187 FatDecodeFileObject(IN PFILE_OBJECT FileObject,
188 OUT PVCB *Vcb,
189 OUT PFCB *FcbOrDcb,
190 OUT PCCB *Ccb);
191
192 VOID NTAPI
193 FatSetFileObject(PFILE_OBJECT FileObject,
194 TYPE_OF_OPEN TypeOfOpen,
195 PVOID Fcb,
196 PCCB Ccb);
197
198 PVOID FASTCALL
199 FatMapUserBuffer(PIRP Irp);
200
201 /* --------------------------------------------------------- fullfat.c */
202
203 FF_T_SINT32
204 FatWriteBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
205
206 FF_T_SINT32
207 FatReadBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
208
209 /* --------------------------------------------------------- lock.c */
210
211 NTSTATUS NTAPI
212 FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
213
214 /* --------------------------------------------------------- fsctl.c */
215
216 NTSTATUS NTAPI
217 FatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
218
219 /* --------------------------------------------------------- finfo.c */
220
221 NTSTATUS NTAPI FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
222 NTSTATUS NTAPI FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
223
224 /* --------------------------------------------------------- iface.c */
225
226 NTSTATUS
227 NTAPI
228 DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
229
230 /* ----------------------------------------------------------- fat.c */
231 PVOID
232 FatPinPage(
233 PFAT_PAGE_CONTEXT Context,
234 LONGLONG ByteOffset);
235
236 PVOID
237 FatPinNextPage(
238 PFAT_PAGE_CONTEXT Context);
239
240 NTSTATUS
241 FatInitializeVcb(
242 IN PFAT_IRP_CONTEXT IrpContext,
243 IN PVCB Vcb,
244 IN PDEVICE_OBJECT TargetDeviceObject,
245 IN PVPB Vpb);
246
247 VOID
248 FatUninitializeVcb(
249 IN PVCB Vcb);
250
251 ULONG
252 FatScanFat(
253 IN PFCB Fcb,
254 IN LONGLONG Vbo, OUT PLONGLONG Lbo,
255 IN OUT PLONGLONG Length,
256 OUT PULONG Index,
257 IN BOOLEAN CanWait);
258
259 /* ------------------------------------------------------ device.c */
260
261 NTSTATUS NTAPI
262 FatDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
263
264 NTSTATUS
265 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject,
266 ULONG ControlCode,
267 PVOID InputBuffer,
268 ULONG InputBufferSize,
269 PVOID OutputBuffer,
270 ULONG OutputBufferSize,
271 BOOLEAN Override);
272
273 /* ------------------------------------------------------ direntry.c */
274 VOID
275 FatFindDirent(IN OUT PFAT_FIND_DIRENT_CONTEXT Context,
276 OUT PDIR_ENTRY* Dirent,
277 OUT PUNICODE_STRING LongFileName OPTIONAL);
278
279 VOID
280 FatEnumerateDirents(IN OUT PFAT_ENUM_DIRENT_CONTEXT Context,
281 IN SIZE_T Offset);
282
283 VOID
284 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes,
285 IN PDIR_ENTRY Dirent);
286
287 /* ----------------------------------------------------------- fcb.c */
288 PFCB
289 FatLookupFcbByName(
290 IN PFCB ParentFcb,
291 IN PUNICODE_STRING Name);
292
293 BOOLEAN
294 FatLinkFcbNames(
295 IN PFCB ParentFcb,
296 IN PFCB Fcb);
297
298 VOID
299 FatUnlinkFcbNames(
300 IN PFCB ParentFcb,
301 IN PFCB Fcb);
302
303 PFCB NTAPI
304 FatCreateFcb(
305 IN PFAT_IRP_CONTEXT IrpContext,
306 IN PVCB Vcb,
307 IN PFCB ParentDcb,
308 IN FF_FILE *FileHandle);
309
310 IO_STATUS_BLOCK NTAPI
311 FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext,
312 IN PFILE_OBJECT FileObject,
313 IN PVCB Vcb,
314 IN PFCB Fcb,
315 IN PACCESS_MASK DesiredAccess,
316 IN USHORT ShareAccess,
317 IN ULONG AllocationSize,
318 IN PFILE_FULL_EA_INFORMATION EaBuffer,
319 IN ULONG EaLength,
320 IN UCHAR FileAttributes,
321 IN ULONG CreateDisposition,
322 IN BOOLEAN NoEaKnowledge,
323 IN BOOLEAN DeleteOnClose,
324 IN BOOLEAN OpenedAsDos,
325 OUT PBOOLEAN OplockPostIrp);
326
327 PFCB NTAPI
328 FatFindFcb(PFAT_IRP_CONTEXT IrpContext,
329 PRTL_SPLAY_LINKS *RootNode,
330 PSTRING AnsiName,
331 PBOOLEAN IsDosName);
332
333 VOID NTAPI
334 FatInsertName(IN PFAT_IRP_CONTEXT IrpContext,
335 IN PRTL_SPLAY_LINKS *RootNode,
336 IN PFCB_NAME_LINK Name);
337
338 VOID NTAPI
339 FatRemoveNames(IN PFAT_IRP_CONTEXT IrpContext,
340 IN PFCB Fcb);
341
342 PCCB NTAPI
343 FatCreateCcb();
344
345 VOID NTAPI
346 FatSetFullNameInFcb(PFCB Fcb,
347 PUNICODE_STRING Name);
348
349 VOID NTAPI
350 FatSetFullFileNameInFcb(IN PFAT_IRP_CONTEXT IrpContext,
351 IN PFCB Fcb);
352
353 VOID NTAPI
354 FatSetFcbNames(IN PFAT_IRP_CONTEXT IrpContext,
355 IN PFCB Fcb);
356
357 VOID NTAPI
358 Fati8dot3ToString(IN PCHAR FileName,
359 IN BOOLEAN DownCase,
360 OUT POEM_STRING OutString);
361
362 /* ------------------------------------------------------------ rw.c */
363
364 NTSTATUS NTAPI
365 FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
366
367 NTSTATUS NTAPI
368 FatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
369
370 /* ------------------------------------------------------------- flush.c */
371
372 NTSTATUS NTAPI
373 FatFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
374
375
376 /* EOF */