4 #include <pseh/pseh2.h>
11 #define Add2Ptr(P,I,T) ((T)((PUCHAR)(P) + (I)))
12 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B)))
14 #define TAG_CCB 'BCCV'
15 #define TAG_FCB 'BCFV'
16 #define TAG_IRP 'PRIV'
17 #define TAG_VFAT 'TAFV'
20 /* Global resource acquire/release */
21 #define FatAcquireExclusiveGlobal(IrpContext) \
23 ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \
24 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
27 #define FatAcquireSharedGlobal(IrpContext) \
29 ExAcquireResourceSharedLite(&FatGlobalData.Resource, \
30 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \
33 #define FatReleaseGlobal(IrpContext) \
35 ExReleaseResourceLite(&(FatGlobalData.Resource)); \
41 RtlUpcaseUnicodeStringToCountedOemString(
42 IN OUT POEM_STRING DestinationString
,
43 IN PCUNICODE_STRING SourceString
,
44 IN BOOLEAN AllocateDestinationString
48 /* ------------------------------------------------------ shutdown.c */
50 DRIVER_DISPATCH FatShutdown
;
52 FatShutdown(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
54 /* -------------------------------------------------------- volume.c */
57 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
60 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
63 FatReadStreamFile(PVCB Vcb
,
69 /* ----------------------------------------------------------- dir.c */
72 FatDirectoryControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
75 FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext
,
79 FatCreateDcb(IN PFAT_IRP_CONTEXT IrpContext
,
82 IN FF_FILE
*FileHandle
);
85 FatiOpenExistingDcb(IN PFAT_IRP_CONTEXT IrpContext
,
86 IN PFILE_OBJECT FileObject
,
89 IN PACCESS_MASK DesiredAccess
,
90 IN USHORT ShareAccess
,
91 IN ULONG CreateDisposition
,
92 IN BOOLEAN NoEaKnowledge
,
93 IN BOOLEAN DeleteOnClose
);
95 /* -------------------------------------------------------- create.c */
98 FatCreate(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
101 /* --------------------------------------------------------- close.c */
104 FatClose(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
106 /* ------------------------------------------------------- cleanup.c */
109 FatCleanup(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
111 /* --------------------------------------------------------- fastio.c */
114 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch
);
117 FatAcquireForLazyWrite(IN PVOID Context
,
121 FatReleaseFromLazyWrite(IN PVOID Context
);
124 FatAcquireForReadAhead(IN PVOID Context
,
128 FatReleaseFromReadAhead(IN PVOID Context
);
131 FatNoopAcquire(IN PVOID Context
,
135 FatNoopRelease(IN PVOID Context
);
137 /* --------------------------------------------------------- fastfat.c */
139 PFAT_IRP_CONTEXT NTAPI
140 FatBuildIrpContext(PIRP Irp
, BOOLEAN CanWait
);
143 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext
);
147 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext
,
148 IN PFAT_OPERATION_HANDLER OperationHandler
);
151 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL
,
156 FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext
,
160 FatAcquireSharedVcb(IN PFAT_IRP_CONTEXT IrpContext
,
164 FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext
,
168 FatAcquireExclusiveFcb(IN PFAT_IRP_CONTEXT IrpContext
,
172 FatAcquireSharedFcb(IN PFAT_IRP_CONTEXT IrpContext
,
176 FatReleaseFcb(IN PFAT_IRP_CONTEXT IrpContext
,
181 FatDecodeFileObject(IN PFILE_OBJECT FileObject
,
187 FatSetFileObject(PFILE_OBJECT FileObject
,
188 TYPE_OF_OPEN TypeOfOpen
,
193 FatMapUserBuffer(PIRP Irp
);
195 /* --------------------------------------------------------- fullfat.c */
198 FatWriteBlocks(FF_T_UINT8
*pBuffer
, FF_T_UINT32 SectorAddress
, FF_T_UINT32 Count
, void *pParam
);
201 FatReadBlocks(FF_T_UINT8
*pBuffer
, FF_T_UINT32 SectorAddress
, FF_T_UINT32 Count
, void *pParam
);
204 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes
,
205 IN PDIR_ENTRY Dirent
);
207 /* --------------------------------------------------------- lock.c */
210 FatLockControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
213 FatOplockComplete(IN PVOID Context
,
217 FatPrePostIrp(IN PVOID Context
,
220 /* --------------------------------------------------------- fsctl.c */
223 FatFileSystemControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
225 /* --------------------------------------------------------- finfo.c */
227 NTSTATUS NTAPI
FatQueryInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
228 NTSTATUS NTAPI
FatSetInformation(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
230 /* --------------------------------------------------------- fullfat.c */
232 FF_FILE
*FF_OpenW(FF_IOMAN
*pIoman
, PUNICODE_STRING pathW
, FF_T_UINT8 Mode
, FF_ERROR
*pError
);
234 /* --------------------------------------------------------- iface.c */
238 DriverEntry(PDRIVER_OBJECT DriverObject
, PUNICODE_STRING RegistryPath
);
240 /* ----------------------------------------------------------- fat.c */
243 IN PFAT_IRP_CONTEXT IrpContext
,
245 IN PDEVICE_OBJECT TargetDeviceObject
,
252 /* ------------------------------------------------------ device.c */
255 FatDeviceControl(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
258 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject
,
261 ULONG InputBufferSize
,
263 ULONG OutputBufferSize
,
266 /* ----------------------------------------------------------- fcb.c */
269 IN PFAT_IRP_CONTEXT IrpContext
,
272 IN FF_FILE
*FileHandle
);
274 IO_STATUS_BLOCK NTAPI
275 FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext
,
276 IN PFILE_OBJECT FileObject
,
279 IN PACCESS_MASK DesiredAccess
,
280 IN USHORT ShareAccess
,
281 IN ULONG AllocationSize
,
282 IN PFILE_FULL_EA_INFORMATION EaBuffer
,
284 IN UCHAR FileAttributes
,
285 IN ULONG CreateDisposition
,
286 IN BOOLEAN NoEaKnowledge
,
287 IN BOOLEAN DeleteOnClose
,
288 IN BOOLEAN OpenedAsDos
,
289 OUT PBOOLEAN OplockPostIrp
);
292 FatFindFcb(PFAT_IRP_CONTEXT IrpContext
,
293 PRTL_SPLAY_LINKS
*RootNode
,
298 FatInsertName(IN PFAT_IRP_CONTEXT IrpContext
,
299 IN PRTL_SPLAY_LINKS
*RootNode
,
300 IN PFCB_NAME_LINK Name
);
303 FatRemoveNames(IN PFAT_IRP_CONTEXT IrpContext
,
310 FatSetFullNameInFcb(PFCB Fcb
,
311 PUNICODE_STRING Name
);
314 FatSetFullFileNameInFcb(IN PFAT_IRP_CONTEXT IrpContext
,
318 FatSetFcbNames(IN PFAT_IRP_CONTEXT IrpContext
,
322 Fati8dot3ToString(IN PCHAR FileName
,
324 OUT POEM_STRING OutString
);
326 /* ------------------------------------------------------------ rw.c */
329 FatRead(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
332 FatWrite(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);
334 /* ------------------------------------------------------------- flush.c */
337 FatFlushBuffers(PDEVICE_OBJECT DeviceObject
, PIRP Irp
);