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'
16 /* ------------------------------------------------------ shutdown.c */
18 DRIVER_DISPATCH FatShutdown
;
20 FatShutdown(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
22 /* -------------------------------------------------------- volume.c */
25 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
28 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
30 /* ------------------------------------------------------ blockdev.c */
34 IN PFAT_IRP_CONTEXT IrpContext
,
35 IN PLARGE_INTEGER Offset
,
39 FatPerformVirtualNonCachedIo(
40 IN PFAT_IRP_CONTEXT IrpContext
,
42 IN PLARGE_INTEGER Offset
,
49 /* ----------------------------------------------------------- dir.c */
52 FatDirectoryControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
54 /* -------------------------------------------------------- create.c */
57 FatCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
60 /* --------------------------------------------------------- close.c */
63 FatClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
65 /* ------------------------------------------------------- cleanup.c */
68 FatCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
70 /* --------------------------------------------------------- fastio.c */
73 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch
);
76 FatAcquireForLazyWrite(IN PVOID Context
,
80 FatReleaseFromLazyWrite(IN PVOID Context
);
83 FatAcquireForReadAhead(IN PVOID Context
,
87 FatReleaseFromReadAhead(IN PVOID Context
);
90 FatNoopAcquire(IN PVOID Context
,
94 FatNoopRelease(IN PVOID Context
);
96 /* --------------------------------------------------------- fastfat.c */
98 PFAT_IRP_CONTEXT NTAPI
99 FatBuildIrpContext(PIRP Irp
, BOOLEAN CanWait
);
102 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext
);
106 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext
,
107 IN PFAT_OPERATION_HANDLER OperationHandler
);
110 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL
,
115 /* --------------------------------------------------------- lock.c */
118 FatLockControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
120 /* --------------------------------------------------------- fsctl.c */
123 FatFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
125 /* --------------------------------------------------------- finfo.c */
127 NTSTATUS NTAPI
FatQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
128 NTSTATUS NTAPI
FatSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
130 /* --------------------------------------------------------- iface.c */
134 DriverEntry(PDRIVER_OBJECT DriverObject
, PUNICODE_STRING RegistryPath
);
136 /* ----------------------------------------------------------- fat.c */
139 PFAT_PAGE_CONTEXT Context
,
140 LONGLONG ByteOffset
);
144 PFAT_PAGE_CONTEXT Context
);
149 IN PDEVICE_OBJECT TargetDeviceObject
,
159 IN LONGLONG Vbo
, OUT PLONGLONG Lbo
,
160 IN OUT PLONGLONG Length
,
164 /* ------------------------------------------------------ device.c */
167 FatDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
170 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject
,
173 ULONG InputBufferSize
,
175 ULONG OutputBufferSize
,
178 /* ------------------------------------------------------ direntry.c */
180 FatFindDirent(IN OUT PFAT_FIND_DIRENT_CONTEXT Context
,
181 OUT PDIR_ENTRY
* Dirent
,
182 OUT PUNICODE_STRING LongFileName OPTIONAL
);
185 FatEnumerateDirents(IN OUT PFAT_ENUM_DIRENT_CONTEXT Context
,
189 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes
,
190 IN PDIR_ENTRY Dirent
);
192 /* ----------------------------------------------------------- fcb.c */
196 IN PUNICODE_STRING Name
);
210 OUT PFCB
* CreatedFcb
,
211 IN PFAT_IRP_CONTEXT IrpContext
,
213 IN PDIR_ENTRY Dirent
,
214 IN PUNICODE_STRING FileName
,
215 IN PUNICODE_STRING LongFileName OPTIONAL
);
220 IN PFAT_IRP_CONTEXT IrpContext
,
222 IN PUNICODE_STRING FileName
);
224 /* ------------------------------------------------------------ rw.c */
227 FatRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
230 FatWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
232 /* ------------------------------------------------------------- flush.c */
235 FatFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);