4 #include <pseh/pseh2.h>
9 #define Add2Ptr(P,I,T) ((T)((PUCHAR)(P) + (I)))
10 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
12 #define TAG_CCB 'BCCV'
13 #define TAG_FCB 'BCFV'
14 #define TAG_IRP 'PRIV'
15 #define TAG_VFAT 'TAFV'
18 /* Global resource acquire/release */
19 #define FatAcquireExclusiveGlobal(IrpContext) \
21 ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \
22 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
25 #define FatAcquireSharedGlobal(IrpContext) \
27 ExAcquireResourceSharedLite(&FatGlobalData.Resource, \
28 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
31 #define FatReleaseGlobal(IrpContext) \
33 ExReleaseResourceLite(&(FatGlobalData.Resource)); \
37 /* ------------------------------------------------------ shutdown.c */
39 DRIVER_DISPATCH FatShutdown
;
41 FatShutdown(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
43 /* -------------------------------------------------------- volume.c */
46 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
49 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
51 /* ------------------------------------------------------ blockdev.c */
55 IN PFAT_IRP_CONTEXT IrpContext
,
56 IN PLARGE_INTEGER Offset
,
60 FatPerformVirtualNonCachedIo(
61 IN PFAT_IRP_CONTEXT IrpContext
,
63 IN PLARGE_INTEGER Offset
,
70 /* ----------------------------------------------------------- dir.c */
73 FatDirectoryControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
75 /* -------------------------------------------------------- create.c */
78 FatCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
81 /* --------------------------------------------------------- close.c */
84 FatClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
86 /* ------------------------------------------------------- cleanup.c */
89 FatCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
91 /* --------------------------------------------------------- fastio.c */
94 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch
);
97 FatAcquireForLazyWrite(IN PVOID Context
,
101 FatReleaseFromLazyWrite(IN PVOID Context
);
104 FatAcquireForReadAhead(IN PVOID Context
,
108 FatReleaseFromReadAhead(IN PVOID Context
);
111 FatNoopAcquire(IN PVOID Context
,
115 FatNoopRelease(IN PVOID Context
);
117 /* --------------------------------------------------------- fastfat.c */
119 PFAT_IRP_CONTEXT NTAPI
120 FatBuildIrpContext(PIRP Irp
, BOOLEAN CanWait
);
123 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext
);
127 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext
,
128 IN PFAT_OPERATION_HANDLER OperationHandler
);
131 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL
,
136 /* --------------------------------------------------------- lock.c */
139 FatLockControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
141 /* --------------------------------------------------------- fsctl.c */
144 FatFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
146 /* --------------------------------------------------------- finfo.c */
148 NTSTATUS NTAPI
FatQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
149 NTSTATUS NTAPI
FatSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
151 /* --------------------------------------------------------- iface.c */
155 DriverEntry(PDRIVER_OBJECT DriverObject
, PUNICODE_STRING RegistryPath
);
157 /* ----------------------------------------------------------- fat.c */
160 PFAT_PAGE_CONTEXT Context
,
161 LONGLONG ByteOffset
);
165 PFAT_PAGE_CONTEXT Context
);
169 IN PFAT_IRP_CONTEXT IrpContext
,
171 IN PDEVICE_OBJECT TargetDeviceObject
,
181 IN LONGLONG Vbo
, OUT PLONGLONG Lbo
,
182 IN OUT PLONGLONG Length
,
186 /* ------------------------------------------------------ device.c */
189 FatDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
192 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject
,
195 ULONG InputBufferSize
,
197 ULONG OutputBufferSize
,
200 /* ------------------------------------------------------ direntry.c */
202 FatFindDirent(IN OUT PFAT_FIND_DIRENT_CONTEXT Context
,
203 OUT PDIR_ENTRY
* Dirent
,
204 OUT PUNICODE_STRING LongFileName OPTIONAL
);
207 FatEnumerateDirents(IN OUT PFAT_ENUM_DIRENT_CONTEXT Context
,
211 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes
,
212 IN PDIR_ENTRY Dirent
);
214 /* ----------------------------------------------------------- fcb.c */
218 IN PUNICODE_STRING Name
);
232 OUT PFCB
* CreatedFcb
,
233 IN PFAT_IRP_CONTEXT IrpContext
,
235 IN PDIR_ENTRY Dirent
,
236 IN PUNICODE_STRING FileName
,
237 IN PUNICODE_STRING LongFileName OPTIONAL
);
242 IN PFAT_IRP_CONTEXT IrpContext
,
244 IN PUNICODE_STRING FileName
);
246 /* ------------------------------------------------------------ rw.c */
249 FatRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
252 FatWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
254 /* ------------------------------------------------------------- flush.c */
257 FatFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);