e19627f1a65d90e27e90d1d14588104ab162a281
[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 <fat.h>
7 #include <fatstruc.h>
8
9 #define Add2Ptr(P,I,T) ((T)((PUCHAR)(P) + (I)))
10 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
11
12 #define TAG_CCB 'BCCV'
13 #define TAG_FCB 'BCFV'
14 #define TAG_IRP 'PRIV'
15 #define TAG_VFAT 'TAFV'
16
17
18 /* Global resource acquire/release */
19 #define FatAcquireExclusiveGlobal(IrpContext) \
20 ( \
21 ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \
22 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
23 )
24
25 #define FatAcquireSharedGlobal(IrpContext) \
26 ( \
27 ExAcquireResourceSharedLite(&FatGlobalData.Resource, \
28 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
29 )
30
31 #define FatReleaseGlobal(IrpContext) \
32 { \
33 ExReleaseResourceLite(&(FatGlobalData.Resource)); \
34 }
35
36
37 /* ------------------------------------------------------ shutdown.c */
38
39 DRIVER_DISPATCH FatShutdown;
40 NTSTATUS NTAPI
41 FatShutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp);
42
43 /* -------------------------------------------------------- volume.c */
44
45 NTSTATUS NTAPI
46 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp);
47
48 NTSTATUS NTAPI
49 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp);
50
51 /* ------------------------------------------------------ blockdev.c */
52 NTSTATUS
53 NTAPI
54 FatPerformLboIo(
55 IN PFAT_IRP_CONTEXT IrpContext,
56 IN PLARGE_INTEGER Offset,
57 IN SIZE_T Length);
58
59 NTSTATUS
60 FatPerformVirtualNonCachedIo(
61 IN PFAT_IRP_CONTEXT IrpContext,
62 IN PFCB Fcb,
63 IN PLARGE_INTEGER Offset,
64 IN SIZE_T Length);
65
66 PVOID
67 FatMapUserBuffer(
68 IN OUT PIRP Irp);
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 /* -------------------------------------------------------- create.c */
80
81 NTSTATUS NTAPI
82 FatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
83
84
85 /* --------------------------------------------------------- close.c */
86
87 NTSTATUS NTAPI
88 FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
89
90 /* ------------------------------------------------------- cleanup.c */
91
92 NTSTATUS NTAPI
93 FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
94
95 /* --------------------------------------------------------- fastio.c */
96
97 VOID
98 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch);
99
100 BOOLEAN NTAPI
101 FatAcquireForLazyWrite(IN PVOID Context,
102 IN BOOLEAN Wait);
103
104 VOID NTAPI
105 FatReleaseFromLazyWrite(IN PVOID Context);
106
107 BOOLEAN NTAPI
108 FatAcquireForReadAhead(IN PVOID Context,
109 IN BOOLEAN Wait);
110
111 VOID NTAPI
112 FatReleaseFromReadAhead(IN PVOID Context);
113
114 BOOLEAN NTAPI
115 FatNoopAcquire(IN PVOID Context,
116 IN BOOLEAN Wait);
117
118 VOID NTAPI
119 FatNoopRelease(IN PVOID Context);
120
121 /* --------------------------------------------------------- fastfat.c */
122
123 PFAT_IRP_CONTEXT NTAPI
124 FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait);
125
126 VOID NTAPI
127 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext);
128
129 VOID
130 NTAPI
131 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext,
132 IN PFAT_OPERATION_HANDLER OperationHandler);
133
134 VOID NTAPI
135 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL,
136 PIRP Irp OPTIONAL,
137 NTSTATUS Status);
138
139 BOOLEAN NTAPI
140 FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext,
141 IN PVCB Vcb);
142
143 VOID NTAPI
144 FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext,
145 IN PVCB Vcb);
146
147 TYPE_OF_OPEN
148 NTAPI
149 FatDecodeFileObject(IN PFILE_OBJECT FileObject,
150 OUT PVCB *Vcb,
151 OUT PFCB *FcbOrDcb,
152 OUT PCCB *Ccb);
153
154 /* --------------------------------------------------------- lock.c */
155
156 NTSTATUS NTAPI
157 FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
158
159 /* --------------------------------------------------------- fsctl.c */
160
161 NTSTATUS NTAPI
162 FatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
163
164 /* --------------------------------------------------------- finfo.c */
165
166 NTSTATUS NTAPI FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
167 NTSTATUS NTAPI FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
168
169 /* --------------------------------------------------------- iface.c */
170
171 NTSTATUS
172 NTAPI
173 DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
174
175 /* ----------------------------------------------------------- fat.c */
176 PVOID
177 FatPinPage(
178 PFAT_PAGE_CONTEXT Context,
179 LONGLONG ByteOffset);
180
181 PVOID
182 FatPinNextPage(
183 PFAT_PAGE_CONTEXT Context);
184
185 NTSTATUS
186 FatInitializeVcb(
187 IN PFAT_IRP_CONTEXT IrpContext,
188 IN PVCB Vcb,
189 IN PDEVICE_OBJECT TargetDeviceObject,
190 IN PVPB Vpb);
191
192 VOID
193 FatUninitializeVcb(
194 IN PVCB Vcb);
195
196 ULONG
197 FatScanFat(
198 IN PFCB Fcb,
199 IN LONGLONG Vbo, OUT PLONGLONG Lbo,
200 IN OUT PLONGLONG Length,
201 OUT PULONG Index,
202 IN BOOLEAN CanWait);
203
204 /* ------------------------------------------------------ device.c */
205
206 NTSTATUS NTAPI
207 FatDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
208
209 NTSTATUS
210 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject,
211 ULONG ControlCode,
212 PVOID InputBuffer,
213 ULONG InputBufferSize,
214 PVOID OutputBuffer,
215 ULONG OutputBufferSize,
216 BOOLEAN Override);
217
218 /* ------------------------------------------------------ direntry.c */
219 VOID
220 FatFindDirent(IN OUT PFAT_FIND_DIRENT_CONTEXT Context,
221 OUT PDIR_ENTRY* Dirent,
222 OUT PUNICODE_STRING LongFileName OPTIONAL);
223
224 VOID
225 FatEnumerateDirents(IN OUT PFAT_ENUM_DIRENT_CONTEXT Context,
226 IN SIZE_T Offset);
227
228 VOID
229 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes,
230 IN PDIR_ENTRY Dirent);
231
232 /* ----------------------------------------------------------- fcb.c */
233 PFCB
234 FatLookupFcbByName(
235 IN PFCB ParentFcb,
236 IN PUNICODE_STRING Name);
237
238 BOOLEAN
239 FatLinkFcbNames(
240 IN PFCB ParentFcb,
241 IN PFCB Fcb);
242
243 VOID
244 FatUnlinkFcbNames(
245 IN PFCB ParentFcb,
246 IN PFCB Fcb);
247
248 NTSTATUS
249 FatCreateFcb(
250 OUT PFCB* CreatedFcb,
251 IN PFAT_IRP_CONTEXT IrpContext,
252 IN PFCB ParentFcb,
253 IN PDIR_ENTRY Dirent,
254 IN PUNICODE_STRING FileName,
255 IN PUNICODE_STRING LongFileName OPTIONAL);
256
257 NTSTATUS
258 FatOpenFcb(
259 OUT PFCB* Fcb,
260 IN PFAT_IRP_CONTEXT IrpContext,
261 IN PFCB ParentFcb,
262 IN PUNICODE_STRING FileName);
263
264 /* ------------------------------------------------------------ rw.c */
265
266 NTSTATUS NTAPI
267 FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
268
269 NTSTATUS NTAPI
270 FatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
271
272 /* ------------------------------------------------------------- flush.c */
273
274 NTSTATUS NTAPI
275 FatFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
276
277
278 /* EOF */