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