ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

fastfat.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.