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