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