349f3b88b66d492dd3b2c9cbb3b99115ce5c1785
[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 /* ------------------------------------------------------ blockdev.c */
54 NTSTATUS
55 NTAPI
56 FatPerformLboIo(
57 IN PFAT_IRP_CONTEXT IrpContext,
58 IN PLARGE_INTEGER Offset,
59 IN SIZE_T Length);
60
61 NTSTATUS
62 FatPerformVirtualNonCachedIo(
63 IN PFAT_IRP_CONTEXT IrpContext,
64 IN PFCB Fcb,
65 IN PLARGE_INTEGER Offset,
66 IN SIZE_T Length);
67
68 PVOID
69 FatMapUserBuffer(
70 IN OUT PIRP Irp);
71
72 /* ----------------------------------------------------------- dir.c */
73
74 NTSTATUS NTAPI
75 FatDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
76
77 VOID NTAPI
78 FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext,
79 IN PVCB Vcb);
80
81 /* -------------------------------------------------------- create.c */
82
83 NTSTATUS NTAPI
84 FatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
85
86
87 /* --------------------------------------------------------- close.c */
88
89 NTSTATUS NTAPI
90 FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
91
92 /* ------------------------------------------------------- cleanup.c */
93
94 NTSTATUS NTAPI
95 FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp);
96
97 /* --------------------------------------------------------- fastio.c */
98
99 VOID
100 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch);
101
102 BOOLEAN NTAPI
103 FatAcquireForLazyWrite(IN PVOID Context,
104 IN BOOLEAN Wait);
105
106 VOID NTAPI
107 FatReleaseFromLazyWrite(IN PVOID Context);
108
109 BOOLEAN NTAPI
110 FatAcquireForReadAhead(IN PVOID Context,
111 IN BOOLEAN Wait);
112
113 VOID NTAPI
114 FatReleaseFromReadAhead(IN PVOID Context);
115
116 BOOLEAN NTAPI
117 FatNoopAcquire(IN PVOID Context,
118 IN BOOLEAN Wait);
119
120 VOID NTAPI
121 FatNoopRelease(IN PVOID Context);
122
123 /* --------------------------------------------------------- fastfat.c */
124
125 PFAT_IRP_CONTEXT NTAPI
126 FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait);
127
128 VOID NTAPI
129 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext);
130
131 VOID
132 NTAPI
133 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext,
134 IN PFAT_OPERATION_HANDLER OperationHandler);
135
136 VOID NTAPI
137 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL,
138 PIRP Irp OPTIONAL,
139 NTSTATUS Status);
140
141 BOOLEAN NTAPI
142 FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext,
143 IN PVCB Vcb);
144
145 VOID NTAPI
146 FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext,
147 IN PVCB Vcb);
148
149 TYPE_OF_OPEN
150 NTAPI
151 FatDecodeFileObject(IN PFILE_OBJECT FileObject,
152 OUT PVCB *Vcb,
153 OUT PFCB *FcbOrDcb,
154 OUT PCCB *Ccb);
155
156 /* --------------------------------------------------------- fcb.c */
157
158 PFCB NTAPI
159 FatFindFcb(PFAT_IRP_CONTEXT IrpContext,
160 PRTL_SPLAY_LINKS *RootNode,
161 PSTRING AnsiName,
162 PBOOLEAN IsDosName);
163
164 /* --------------------------------------------------------- fullfat.c */
165
166 FF_T_SINT32
167 FatWriteBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
168
169 FF_T_SINT32
170 FatReadBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam);
171
172 /* --------------------------------------------------------- lock.c */
173
174 NTSTATUS NTAPI
175 FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
176
177 /* --------------------------------------------------------- fsctl.c */
178
179 NTSTATUS NTAPI
180 FatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
181
182 /* --------------------------------------------------------- finfo.c */
183
184 NTSTATUS NTAPI FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
185 NTSTATUS NTAPI FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
186
187 /* --------------------------------------------------------- iface.c */
188
189 NTSTATUS
190 NTAPI
191 DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath);
192
193 /* ----------------------------------------------------------- fat.c */
194 PVOID
195 FatPinPage(
196 PFAT_PAGE_CONTEXT Context,
197 LONGLONG ByteOffset);
198
199 PVOID
200 FatPinNextPage(
201 PFAT_PAGE_CONTEXT Context);
202
203 NTSTATUS
204 FatInitializeVcb(
205 IN PFAT_IRP_CONTEXT IrpContext,
206 IN PVCB Vcb,
207 IN PDEVICE_OBJECT TargetDeviceObject,
208 IN PVPB Vpb);
209
210 VOID
211 FatUninitializeVcb(
212 IN PVCB Vcb);
213
214 ULONG
215 FatScanFat(
216 IN PFCB Fcb,
217 IN LONGLONG Vbo, OUT PLONGLONG Lbo,
218 IN OUT PLONGLONG Length,
219 OUT PULONG Index,
220 IN BOOLEAN CanWait);
221
222 /* ------------------------------------------------------ device.c */
223
224 NTSTATUS NTAPI
225 FatDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
226
227 NTSTATUS
228 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject,
229 ULONG ControlCode,
230 PVOID InputBuffer,
231 ULONG InputBufferSize,
232 PVOID OutputBuffer,
233 ULONG OutputBufferSize,
234 BOOLEAN Override);
235
236 /* ------------------------------------------------------ direntry.c */
237 VOID
238 FatFindDirent(IN OUT PFAT_FIND_DIRENT_CONTEXT Context,
239 OUT PDIR_ENTRY* Dirent,
240 OUT PUNICODE_STRING LongFileName OPTIONAL);
241
242 VOID
243 FatEnumerateDirents(IN OUT PFAT_ENUM_DIRENT_CONTEXT Context,
244 IN SIZE_T Offset);
245
246 VOID
247 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes,
248 IN PDIR_ENTRY Dirent);
249
250 /* ----------------------------------------------------------- fcb.c */
251 PFCB
252 FatLookupFcbByName(
253 IN PFCB ParentFcb,
254 IN PUNICODE_STRING Name);
255
256 BOOLEAN
257 FatLinkFcbNames(
258 IN PFCB ParentFcb,
259 IN PFCB Fcb);
260
261 VOID
262 FatUnlinkFcbNames(
263 IN PFCB ParentFcb,
264 IN PFCB Fcb);
265
266 NTSTATUS
267 FatCreateFcb(
268 OUT PFCB* CreatedFcb,
269 IN PFAT_IRP_CONTEXT IrpContext,
270 IN PFCB ParentFcb,
271 IN PDIR_ENTRY Dirent,
272 IN PUNICODE_STRING FileName,
273 IN PUNICODE_STRING LongFileName OPTIONAL);
274
275 NTSTATUS
276 FatOpenFcb(
277 OUT PFCB* Fcb,
278 IN PFAT_IRP_CONTEXT IrpContext,
279 IN PFCB ParentFcb,
280 IN PUNICODE_STRING FileName);
281
282 /* ------------------------------------------------------------ rw.c */
283
284 NTSTATUS NTAPI
285 FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
286
287 NTSTATUS NTAPI
288 FatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
289
290 /* ------------------------------------------------------------- flush.c */
291
292 NTSTATUS NTAPI
293 FatFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp);
294
295
296 /* EOF */