5 #include <pseh/pseh2.h>
12 #define Add2Ptr(P,I,T) ((T)((PUCHAR)(P) + (I)))
13 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
15 #define TAG_CCB 'BCCV'
16 #define TAG_FCB 'BCFV'
17 #define TAG_IRP 'PRIV'
18 #define TAG_VFAT 'TAFV'
21 /* Global resource acquire/release */
22 #define FatAcquireExclusiveGlobal(IrpContext) \
24 ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \
25 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
28 #define FatAcquireSharedGlobal(IrpContext) \
30 ExAcquireResourceSharedLite(&FatGlobalData.Resource, \
31 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
34 #define FatReleaseGlobal(IrpContext) \
36 ExReleaseResourceLite(&(FatGlobalData.Resource)); \
42 RtlUpcaseUnicodeStringToCountedOemString(
43 IN OUT POEM_STRING DestinationString
,
44 IN PCUNICODE_STRING SourceString
,
45 IN BOOLEAN AllocateDestinationString
49 /* ------------------------------------------------------ shutdown.c */
51 DRIVER_DISPATCH FatShutdown
;
53 FatShutdown(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
55 /* -------------------------------------------------------- volume.c */
58 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
61 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
64 FatReadStreamFile(PVCB Vcb
,
70 /* ----------------------------------------------------------- dir.c */
73 FatDirectoryControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
76 FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext
,
80 FatCreateDcb(IN PFAT_IRP_CONTEXT IrpContext
,
83 IN FF_FILE
*FileHandle
);
86 FatiOpenExistingDcb(IN PFAT_IRP_CONTEXT IrpContext
,
87 IN PFILE_OBJECT FileObject
,
90 IN PACCESS_MASK DesiredAccess
,
91 IN USHORT ShareAccess
,
92 IN ULONG CreateDisposition
,
93 IN BOOLEAN NoEaKnowledge
,
94 IN BOOLEAN DeleteOnClose
);
96 /* -------------------------------------------------------- create.c */
99 FatCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
102 /* --------------------------------------------------------- close.c */
105 FatClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
107 /* ------------------------------------------------------- cleanup.c */
110 FatCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
112 /* --------------------------------------------------------- fastio.c */
115 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch
);
118 FatAcquireForLazyWrite(IN PVOID Context
,
122 FatReleaseFromLazyWrite(IN PVOID Context
);
125 FatAcquireForReadAhead(IN PVOID Context
,
129 FatReleaseFromReadAhead(IN PVOID Context
);
132 FatNoopAcquire(IN PVOID Context
,
136 FatNoopRelease(IN PVOID Context
);
138 /* --------------------------------------------------------- fastfat.c */
140 PFAT_IRP_CONTEXT NTAPI
141 FatBuildIrpContext(PIRP Irp
, BOOLEAN CanWait
);
144 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext
);
148 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext
,
149 IN PFAT_OPERATION_HANDLER OperationHandler
);
152 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL
,
157 FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext
,
161 FatAcquireSharedVcb(IN PFAT_IRP_CONTEXT IrpContext
,
165 FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext
,
169 FatAcquireExclusiveFcb(IN PFAT_IRP_CONTEXT IrpContext
,
173 FatAcquireSharedFcb(IN PFAT_IRP_CONTEXT IrpContext
,
177 FatReleaseFcb(IN PFAT_IRP_CONTEXT IrpContext
,
182 FatDecodeFileObject(IN PFILE_OBJECT FileObject
,
188 FatSetFileObject(PFILE_OBJECT FileObject
,
189 TYPE_OF_OPEN TypeOfOpen
,
194 FatMapUserBuffer(PIRP Irp
);
196 /* --------------------------------------------------------- fullfat.c */
199 FatWriteBlocks(FF_T_UINT8
*pBuffer
, FF_T_UINT32 SectorAddress
, FF_T_UINT32 Count
, void *pParam
);
202 FatReadBlocks(FF_T_UINT8
*pBuffer
, FF_T_UINT32 SectorAddress
, FF_T_UINT32 Count
, void *pParam
);
205 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes
,
206 IN PDIR_ENTRY Dirent
);
208 /* --------------------------------------------------------- lock.c */
211 FatLockControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
214 FatOplockComplete(IN PVOID Context
,
218 FatPrePostIrp(IN PVOID Context
,
221 /* --------------------------------------------------------- fsctl.c */
224 FatFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
226 /* --------------------------------------------------------- finfo.c */
228 NTSTATUS NTAPI
FatQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
229 NTSTATUS NTAPI
FatSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
231 /* --------------------------------------------------------- fullfat.c */
233 FF_FILE
*FF_OpenW(FF_IOMAN
*pIoman
, PUNICODE_STRING pathW
, FF_T_UINT8 Mode
, FF_ERROR
*pError
);
235 /* --------------------------------------------------------- iface.c */
239 DriverEntry(PDRIVER_OBJECT DriverObject
, PUNICODE_STRING RegistryPath
);
241 /* ----------------------------------------------------------- fat.c */
244 IN PFAT_IRP_CONTEXT IrpContext
,
246 IN PDEVICE_OBJECT TargetDeviceObject
,
253 /* ------------------------------------------------------ device.c */
256 FatDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
259 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject
,
262 ULONG InputBufferSize
,
264 ULONG OutputBufferSize
,
267 /* ----------------------------------------------------------- fcb.c */
270 IN PFAT_IRP_CONTEXT IrpContext
,
273 IN FF_FILE
*FileHandle
);
275 IO_STATUS_BLOCK NTAPI
276 FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext
,
277 IN PFILE_OBJECT FileObject
,
280 IN PACCESS_MASK DesiredAccess
,
281 IN USHORT ShareAccess
,
282 IN ULONG AllocationSize
,
283 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
285 IN UCHAR FileAttributes
,
286 IN ULONG CreateDisposition
,
287 IN BOOLEAN NoEaKnowledge
,
288 IN BOOLEAN DeleteOnClose
,
289 IN BOOLEAN OpenedAsDos
,
290 OUT PBOOLEAN OplockPostIrp
);
293 FatFindFcb(PFAT_IRP_CONTEXT IrpContext
,
294 PRTL_SPLAY_LINKS
*RootNode
,
299 FatInsertName(IN PFAT_IRP_CONTEXT IrpContext
,
300 IN PRTL_SPLAY_LINKS
*RootNode
,
301 IN PFCB_NAME_LINK Name
);
304 FatRemoveNames(IN PFAT_IRP_CONTEXT IrpContext
,
311 FatSetFullNameInFcb(PFCB Fcb
,
312 PUNICODE_STRING Name
);
315 FatSetFullFileNameInFcb(IN PFAT_IRP_CONTEXT IrpContext
,
319 FatSetFcbNames(IN PFAT_IRP_CONTEXT IrpContext
,
323 Fati8dot3ToString(IN PCHAR FileName
,
325 OUT POEM_STRING OutString
);
327 /* ------------------------------------------------------------ rw.c */
330 FatRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
333 FatWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
335 /* ------------------------------------------------------------- flush.c */
338 FatFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);