Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenfastfat.h
Go to the documentation of this file.
00001 #include <ntifs.h> 00002 #include <bugcodes.h> 00003 #include <ntdddisk.h> 00004 #include <debug.h> 00005 #include <pseh/pseh2.h> 00006 00007 #include "fullfat.h" 00008 00009 #include <fat.h> 00010 #include <fatstruc.h> 00011 00012 #define Add2Ptr(P,I,T) ((T)((PUCHAR)(P) + (I))) 00013 #define PtrOffset(B,O) ((ULONG)((ULONG_PTR)(O) - (ULONG_PTR)(B))) 00014 00015 #define TAG_CCB 'BCCV' 00016 #define TAG_FCB 'BCFV' 00017 #define TAG_IRP 'PRIV' 00018 #define TAG_VFAT 'TAFV' 00019 #define TAG_FSD_CLOSE_CONTEXT 'CLCV' 00020 00021 00022 /* Global resource acquire/release */ 00023 #define FatAcquireExclusiveGlobal(IrpContext) \ 00024 ( \ 00025 ExAcquireResourceExclusiveLite(&FatGlobalData.Resource, \ 00026 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \ 00027 ) 00028 00029 #define FatAcquireSharedGlobal(IrpContext) \ 00030 ( \ 00031 ExAcquireResourceSharedLite(&FatGlobalData.Resource, \ 00032 (IrpContext)->Flags & IRPCONTEXT_CANWAIT) \ 00033 ) 00034 00035 #define FatReleaseGlobal(IrpContext) \ 00036 { \ 00037 ExReleaseResourceLite(&(FatGlobalData.Resource)); \ 00038 } 00039 00040 #define FatIsFastIoPossible(FCB) ((BOOLEAN) \ 00041 (((FCB)->Condition != FcbGood || !FsRtlOplockIsFastIoPossible(&(FCB)->Fcb.Oplock)) ? \ 00042 FastIoIsNotPossible \ 00043 : \ 00044 (!FsRtlAreThereCurrentFileLocks(&(FCB)->Fcb.Lock) && \ 00045 ((FCB)->OutstandingAsyncWrites == 0) && \ 00046 !FlagOn((FCB)->Vcb->State, VCB_STATE_FLAG_WRITE_PROTECTED) ? \ 00047 FastIoIsPossible \ 00048 : \ 00049 FastIoIsQuestionable \ 00050 ) \ 00051 ) \ 00052 ) 00053 00054 #define IsFileObjectReadOnly(FO) (!((FO)->WriteAccess | (FO)->DeleteAccess)) 00055 #define IsFileDeleted(FCB) (FlagOn((FCB)->State, FCB_STATE_DELETE_ON_CLOSE) && ((FCB)->UncleanCount == 0)) 00056 00057 BOOLEAN 00058 FORCEINLINE 00059 FatIsIoRangeValid(IN LARGE_INTEGER Start, IN ULONG Length) 00060 { 00061 /* Check if it's more than 32bits, or if the length causes 32bit overflow. 00062 FAT-specific! */ 00063 00064 return !(Start.HighPart || Start.LowPart + Length < Start.LowPart); 00065 } 00066 00067 00068 NTSYSAPI 00069 NTSTATUS 00070 NTAPI 00071 RtlUpcaseUnicodeStringToCountedOemString( 00072 IN OUT POEM_STRING DestinationString, 00073 IN PCUNICODE_STRING SourceString, 00074 IN BOOLEAN AllocateDestinationString 00075 ); 00076 00077 00078 /* ------------------------------------------------------ shutdown.c */ 00079 00080 DRIVER_DISPATCH FatShutdown; 00081 NTSTATUS NTAPI 00082 FatShutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00083 00084 /* -------------------------------------------------------- volume.c */ 00085 00086 NTSTATUS NTAPI 00087 FatQueryVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00088 00089 NTSTATUS NTAPI 00090 FatSetVolumeInfo(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00091 00092 VOID NTAPI 00093 FatReadStreamFile(PVCB Vcb, 00094 ULONGLONG ByteOffset, 00095 ULONG ByteSize, 00096 PBCB *Bcb, 00097 PVOID *Buffer); 00098 00099 BOOLEAN 00100 NTAPI 00101 FatCheckForDismount(IN PFAT_IRP_CONTEXT IrpContext, 00102 PVCB Vcb, 00103 IN BOOLEAN Force); 00104 00105 /* ----------------------------------------------------------- dir.c */ 00106 00107 NTSTATUS NTAPI 00108 FatDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00109 00110 VOID NTAPI 00111 FatCreateRootDcb(IN PFAT_IRP_CONTEXT IrpContext, 00112 IN PVCB Vcb); 00113 00114 PFCB NTAPI 00115 FatCreateDcb(IN PFAT_IRP_CONTEXT IrpContext, 00116 IN PVCB Vcb, 00117 IN PFCB ParentDcb, 00118 IN FF_FILE *FileHandle); 00119 00120 IO_STATUS_BLOCK NTAPI 00121 FatiOpenExistingDcb(IN PFAT_IRP_CONTEXT IrpContext, 00122 IN PFILE_OBJECT FileObject, 00123 IN PVCB Vcb, 00124 IN PFCB Dcb, 00125 IN PACCESS_MASK DesiredAccess, 00126 IN USHORT ShareAccess, 00127 IN ULONG CreateDisposition, 00128 IN BOOLEAN NoEaKnowledge, 00129 IN BOOLEAN DeleteOnClose); 00130 00131 /* -------------------------------------------------------- create.c */ 00132 00133 IO_STATUS_BLOCK 00134 NTAPI 00135 FatiOverwriteFile(PFAT_IRP_CONTEXT IrpContext, 00136 PFILE_OBJECT FileObject, 00137 PFCB Fcb, 00138 ULONG AllocationSize, 00139 PFILE_FULL_EA_INFORMATION EaBuffer, 00140 ULONG EaLength, 00141 UCHAR FileAttributes, 00142 ULONG CreateDisposition, 00143 BOOLEAN NoEaKnowledge); 00144 00145 NTSTATUS NTAPI 00146 FatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00147 00148 00149 /* --------------------------------------------------------- close.c */ 00150 00151 NTSTATUS NTAPI 00152 FatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00153 00154 /* ------------------------------------------------------- cleanup.c */ 00155 00156 NTSTATUS NTAPI 00157 FatCleanup(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00158 00159 /* --------------------------------------------------------- fastio.c */ 00160 00161 VOID 00162 FatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch); 00163 00164 BOOLEAN NTAPI 00165 FatAcquireForLazyWrite(IN PVOID Context, 00166 IN BOOLEAN Wait); 00167 00168 VOID NTAPI 00169 FatReleaseFromLazyWrite(IN PVOID Context); 00170 00171 BOOLEAN NTAPI 00172 FatAcquireForReadAhead(IN PVOID Context, 00173 IN BOOLEAN Wait); 00174 00175 VOID NTAPI 00176 FatReleaseFromReadAhead(IN PVOID Context); 00177 00178 BOOLEAN NTAPI 00179 FatNoopAcquire(IN PVOID Context, 00180 IN BOOLEAN Wait); 00181 00182 VOID NTAPI 00183 FatNoopRelease(IN PVOID Context); 00184 00185 /* --------------------------------------------------------- fastfat.c */ 00186 00187 extern FAST_MUTEX FatCloseQueueMutex; 00188 00189 PFAT_IRP_CONTEXT NTAPI 00190 FatBuildIrpContext(PIRP Irp, BOOLEAN CanWait); 00191 00192 VOID NTAPI 00193 FatDestroyIrpContext(PFAT_IRP_CONTEXT IrpContext); 00194 00195 VOID 00196 NTAPI 00197 FatQueueRequest(IN PFAT_IRP_CONTEXT IrpContext, 00198 IN PFAT_OPERATION_HANDLER OperationHandler); 00199 00200 VOID NTAPI 00201 FatCompleteRequest(PFAT_IRP_CONTEXT IrpContext OPTIONAL, 00202 PIRP Irp OPTIONAL, 00203 NTSTATUS Status); 00204 00205 BOOLEAN NTAPI 00206 FatAcquireExclusiveVcb(IN PFAT_IRP_CONTEXT IrpContext, 00207 IN PVCB Vcb); 00208 00209 BOOLEAN NTAPI 00210 FatAcquireSharedVcb(IN PFAT_IRP_CONTEXT IrpContext, 00211 IN PVCB Vcb); 00212 00213 VOID NTAPI 00214 FatReleaseVcb(IN PFAT_IRP_CONTEXT IrpContext, 00215 IN PVCB Vcb); 00216 00217 BOOLEAN NTAPI 00218 FatAcquireExclusiveFcb(IN PFAT_IRP_CONTEXT IrpContext, 00219 IN PFCB Fcb); 00220 00221 BOOLEAN NTAPI 00222 FatAcquireSharedFcb(IN PFAT_IRP_CONTEXT IrpContext, 00223 IN PFCB Fcb); 00224 00225 VOID NTAPI 00226 FatReleaseFcb(IN PFAT_IRP_CONTEXT IrpContext, 00227 IN PFCB Fcb); 00228 00229 TYPE_OF_OPEN 00230 NTAPI 00231 FatDecodeFileObject(IN PFILE_OBJECT FileObject, 00232 OUT PVCB *Vcb, 00233 OUT PFCB *FcbOrDcb, 00234 OUT PCCB *Ccb); 00235 00236 VOID NTAPI 00237 FatSetFileObject(PFILE_OBJECT FileObject, 00238 TYPE_OF_OPEN TypeOfOpen, 00239 PVOID Fcb, 00240 PCCB Ccb); 00241 00242 PVOID FASTCALL 00243 FatMapUserBuffer(PIRP Irp); 00244 00245 BOOLEAN NTAPI 00246 FatIsTopLevelIrp(IN PIRP Irp); 00247 00248 VOID NTAPI 00249 FatNotifyReportChange(IN PFAT_IRP_CONTEXT IrpContext, 00250 IN PVCB Vcb, 00251 IN PFCB Fcb, 00252 IN ULONG Filter, 00253 IN ULONG Action); 00254 00255 /* --------------------------------------------------------- fullfat.c */ 00256 00257 FF_T_SINT32 00258 FatWriteBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam); 00259 00260 FF_T_SINT32 00261 FatReadBlocks(FF_T_UINT8 *pBuffer, FF_T_UINT32 SectorAddress, FF_T_UINT32 Count, void *pParam); 00262 00263 VOID NTAPI 00264 FatQueryFileTimes(OUT PLARGE_INTEGER FileTimes, 00265 IN PDIR_ENTRY Dirent); 00266 00267 /* --------------------------------------------------------- lock.c */ 00268 00269 NTSTATUS NTAPI 00270 FatLockControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00271 00272 VOID NTAPI 00273 FatOplockComplete(IN PVOID Context, 00274 IN PIRP Irp); 00275 00276 VOID NTAPI 00277 FatPrePostIrp(IN PVOID Context, 00278 IN PIRP Irp); 00279 00280 /* --------------------------------------------------------- fsctl.c */ 00281 00282 NTSTATUS NTAPI 00283 FatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00284 00285 /* --------------------------------------------------------- finfo.c */ 00286 00287 NTSTATUS NTAPI FatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00288 NTSTATUS NTAPI FatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00289 00290 /* --------------------------------------------------------- fullfat.c */ 00291 00292 FF_FILE *FF_OpenW(FF_IOMAN *pIoman, PUNICODE_STRING pathW, FF_T_UINT8 Mode, FF_ERROR *pError); 00293 00294 /* --------------------------------------------------------- iface.c */ 00295 00296 NTSTATUS 00297 NTAPI 00298 DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath); 00299 00300 /* ----------------------------------------------------------- fat.c */ 00301 NTSTATUS NTAPI 00302 FatInitializeVcb( 00303 IN PFAT_IRP_CONTEXT IrpContext, 00304 IN PVCB Vcb, 00305 IN PDEVICE_OBJECT TargetDeviceObject, 00306 IN PVPB Vpb); 00307 00308 VOID NTAPI 00309 FatUninitializeVcb( 00310 IN PVCB Vcb); 00311 00312 /* ------------------------------------------------------ device.c */ 00313 00314 NTSTATUS NTAPI 00315 FatDeviceControl(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00316 00317 NTSTATUS 00318 FatPerformDevIoCtrl(PDEVICE_OBJECT DeviceObject, 00319 ULONG ControlCode, 00320 PVOID InputBuffer, 00321 ULONG InputBufferSize, 00322 PVOID OutputBuffer, 00323 ULONG OutputBufferSize, 00324 BOOLEAN Override); 00325 00326 /* ----------------------------------------------------------- fcb.c */ 00327 PFCB NTAPI 00328 FatCreateFcb( 00329 IN PFAT_IRP_CONTEXT IrpContext, 00330 IN PVCB Vcb, 00331 IN PFCB ParentDcb, 00332 IN FF_FILE *FileHandle); 00333 00334 VOID NTAPI 00335 FatDeleteFcb(IN PFAT_IRP_CONTEXT IrpContext, 00336 IN PFCB Fcb); 00337 00338 IO_STATUS_BLOCK NTAPI 00339 FatiOpenExistingFcb(IN PFAT_IRP_CONTEXT IrpContext, 00340 IN PFILE_OBJECT FileObject, 00341 IN PVCB Vcb, 00342 IN PFCB Fcb, 00343 IN PACCESS_MASK DesiredAccess, 00344 IN USHORT ShareAccess, 00345 IN ULONG AllocationSize, 00346 IN PFILE_FULL_EA_INFORMATION EaBuffer, 00347 IN ULONG EaLength, 00348 IN UCHAR FileAttributes, 00349 IN ULONG CreateDisposition, 00350 IN BOOLEAN NoEaKnowledge, 00351 IN BOOLEAN DeleteOnClose, 00352 IN BOOLEAN OpenedAsDos, 00353 OUT PBOOLEAN OplockPostIrp); 00354 00355 PFCB NTAPI 00356 FatFindFcb(PFAT_IRP_CONTEXT IrpContext, 00357 PRTL_SPLAY_LINKS *RootNode, 00358 PSTRING AnsiName, 00359 PBOOLEAN IsDosName); 00360 00361 VOID NTAPI 00362 FatInsertName(IN PFAT_IRP_CONTEXT IrpContext, 00363 IN PRTL_SPLAY_LINKS *RootNode, 00364 IN PFCB_NAME_LINK Name); 00365 00366 VOID NTAPI 00367 FatRemoveNames(IN PFAT_IRP_CONTEXT IrpContext, 00368 IN PFCB Fcb); 00369 00370 PCCB NTAPI 00371 FatCreateCcb(VOID); 00372 00373 VOID NTAPI 00374 FatDeleteCcb(IN PFAT_IRP_CONTEXT IrpContext, 00375 IN PCCB Ccb); 00376 00377 VOID NTAPI 00378 FatSetFullNameInFcb(PFCB Fcb, 00379 PUNICODE_STRING Name); 00380 00381 VOID NTAPI 00382 FatSetFullFileNameInFcb(IN PFAT_IRP_CONTEXT IrpContext, 00383 IN PFCB Fcb); 00384 00385 VOID NTAPI 00386 FatSetFcbNames(IN PFAT_IRP_CONTEXT IrpContext, 00387 IN PFCB Fcb); 00388 00389 VOID NTAPI 00390 Fati8dot3ToString(IN PCHAR FileName, 00391 IN BOOLEAN DownCase, 00392 OUT POEM_STRING OutString); 00393 00394 /* ------------------------------------------------------------ rw.c */ 00395 00396 NTSTATUS NTAPI 00397 FatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00398 00399 NTSTATUS NTAPI 00400 FatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00401 00402 /* ------------------------------------------------------------- flush.c */ 00403 00404 NTSTATUS NTAPI 00405 FatFlushBuffers(PDEVICE_OBJECT DeviceObject, PIRP Irp); 00406 00407 00408 /* EOF */ Generated on Sat May 26 2012 04:26:21 for ReactOS by
1.7.6.1
|