[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 "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 /* -------------------------------------------------------- create.c */
91
92 NTSTATUS NTAPI
93 FatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
94
95
96 /* --------------------------------------------------------- close.c */
97
98 NTSTATUS NTAPI
99 FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
100
101 /* ------------------------------------------------------- cleanup.c */
102
103 NTSTATUS NTAPI
104 FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
105
106 /* --------------------------------------------------------- fastio.c */
107
108 VOID
109 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch);
110
111 BOOLEAN NTAPI
112 FatAcquireForLazyWrite(IN PVOID Context,
113 IN BOOLEAN Wait);
114
115 VOID NTAPI
116 FatReleaseFromLazyWrite(IN PVOID Context);
117
118 BOOLEAN NTAPI
119 FatAcquireForReadAhead(IN PVOID Context,
120 IN BOOLEAN Wait);
121
122 VOID NTAPI
123 FatReleaseFromReadAhead(IN PVOID Context);
124
125 BOOLEAN NTAPI
126 FatNoopAcquire(IN PVOID Context,
127 IN BOOLEAN Wait);
128
129 VOID NTAPI
130 FatNoopRelease(IN PVOID Context);
131
132 /* --------------------------------------------------------- fastfat.c */
133
134 PFAT_IRP_CONTEXT NTAPI
135 FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait);
136
137 VOID NTAPI
138 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext);
139
140 VOID
141 NTAPI
142 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext,
143 IN PFAT_OPERATION_HANDLER OperationHandler);
144
145 VOID NTAPI
146 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL,
147 PIRP Irp OPTIONAL,
148 NTSTATUS Status);
149
150 BOOLEAN NTAPI
151 FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext,
152 IN PVCB Vcb);
153
154 BOOLEAN NTAPI
155 FatAcquireSharedVcb(IN PFAT_IRP_CONTEXT IrpContext,
156 IN PVCB Vcb);
157
158 VOID NTAPI
159 FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext,
160 IN PVCB Vcb);
161
162 BOOLEAN NTAPI
163 FatAcquireExclusiveFcb(IN PFAT_IRP_CONTEXT IrpContext,
164 IN PFCB Fcb);
165
166 BOOLEAN NTAPI
167 FatAcquireSharedFcb(IN PFAT_IRP_CONTEXT IrpContext,
168 IN PFCB Fcb);
169
170 VOID NTAPI
171 FatReleaseFcb(IN PFAT_IRP_CONTEXT IrpContext,
172 IN PFCB Fcb);
173
174 TYPE_OF_OPEN
175 NTAPI
176 FatDecodeFileObject(IN PFILE_OBJECT FileObject,
177 OUT PVCB *Vcb,
178 OUT PFCB *FcbOrDcb,
179 OUT PCCB *Ccb);
180
181 VOID NTAPI
182 FatSetFileObject(PFILE_OBJECT FileObject,
183 TYPE_OF_OPEN TypeOfOpen,
184 PVOID Fcb,
185 PCCB Ccb);
186
187 PVOID FASTCALL
188 FatMapUserBuffer(PIRP Irp);
189
190 /* --------------------------------------------------------- fullfat.c */
191
192 FF_T_SINT32
193 FatWriteBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
194
195 FF_T_SINT32
196 FatReadBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
197
198 /* --------------------------------------------------------- lock.c */
199
200 NTSTATUS NTAPI
201 FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
202
203 /* --------------------------------------------------------- fsctl.c */
204
205 NTSTATUS NTAPI
206 FatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
207
208 /* --------------------------------------------------------- finfo.c */
209
210 NTSTATUS NTAPI FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
211 NTSTATUS NTAPI FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
212
213 /* --------------------------------------------------------- iface.c */
214
215 NTSTATUS
216 NTAPI
217 DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
218
219 /* ----------------------------------------------------------- fat.c */
220 PVOID
221 FatPinPage(
222 PFAT_PAGE_CONTEXT Context,
223 LONGLONG ByteOffset);
224
225 PVOID
226 FatPinNextPage(
227 PFAT_PAGE_CONTEXT Context);
228
229 NTSTATUS
230 FatInitializeVcb(
231 IN PFAT_IRP_CONTEXT IrpContext,
232 IN PVCB Vcb,
233 IN PDEVICE_OBJECT TargetDeviceObject,
234 IN PVPB Vpb);
235
236 VOID
237 FatUninitializeVcb(
238 IN PVCB Vcb);
239
240 ULONG
241 FatScanFat(
242 IN PFCB Fcb,
243 IN LONGLONG Vbo, OUT PLONGLONG Lbo,
244 IN OUT PLONGLONG Length,
245 OUT PULONG Index,
246 IN BOOLEAN CanWait);
247
248 /* ------------------------------------------------------ device.c */
249
250 NTSTATUS NTAPI
251 FatDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
252
253 NTSTATUS
254 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject,
255 ULONG ControlCode,
256 PVOID InputBuffer,
257 ULONG InputBufferSize,
258 PVOID OutputBuffer,
259 ULONG OutputBufferSize,
260 BOOLEAN Override);
261
262 /* ------------------------------------------------------ direntry.c */
263 VOID
264 FatFindDirent(IN OUT PFAT_FIND_DIRENT_CONTEXT Context,
265 OUT PDIR_ENTRY* Dirent,
266 OUT PUNICODE_STRING LongFileName OPTIONAL);
267
268 VOID
269 FatEnumerateDirents(IN OUT PFAT_ENUM_DIRENT_CONTEXT Context,
270 IN SIZE_T Offset);
271
272 VOID
273 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes,
274 IN PDIR_ENTRY Dirent);
275
276 /* ----------------------------------------------------------- fcb.c */
277 PFCB
278 FatLookupFcbByName(
279 IN PFCB ParentFcb,
280 IN PUNICODE_STRING Name);
281
282 BOOLEAN
283 FatLinkFcbNames(
284 IN PFCB ParentFcb,
285 IN PFCB Fcb);
286
287 VOID
288 FatUnlinkFcbNames(
289 IN PFCB ParentFcb,
290 IN PFCB Fcb);
291
292 PFCB NTAPI
293 FatCreateFcb(
294 IN PFAT_IRP_CONTEXT IrpContext,
295 IN PVCB Vcb,
296 IN PFCB ParentDcb,
297 IN FF_FILE *FileHandle);
298
299 PFCB NTAPI
300 FatFindFcb(PFAT_IRP_CONTEXT IrpContext,
301 PRTL_SPLAY_LINKS *RootNode,
302 PSTRING AnsiName,
303 PBOOLEAN IsDosName);
304
305 VOID NTAPI
306 FatInsertName(IN PFAT_IRP_CONTEXT IrpContext,
307 IN PRTL_SPLAY_LINKS *RootNode,
308 IN PFCB_NAME_LINK Name);
309
310 VOID NTAPI
311 FatRemoveNames(IN PFAT_IRP_CONTEXT IrpContext,
312 IN PFCB Fcb);
313
314 PCCB NTAPI
315 FatCreateCcb();
316
317 VOID NTAPI
318 FatSetFullNameInFcb(PFCB Fcb,
319 PUNICODE_STRING Name);
320
321 VOID NTAPI
322 FatSetFullFileNameInFcb(IN PFAT_IRP_CONTEXT IrpContext,
323 IN PFCB Fcb);
324
325 VOID NTAPI
326 FatSetFcbNames(IN PFAT_IRP_CONTEXT IrpContext,
327 IN PFCB Fcb);
328
329 VOID NTAPI
330 Fati8dot3ToString(IN PCHAR FileName,
331 IN BOOLEAN DownCase,
332 OUT POEM_STRING OutString);
333
334 /* ------------------------------------------------------------ rw.c */
335
336 NTSTATUS NTAPI
337 FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
338
339 NTSTATUS NTAPI
340 FatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
341
342 /* ------------------------------------------------------------- flush.c */
343
344 NTSTATUS NTAPI
345 FatFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
346
347
348 /* EOF */