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