Data Structures |
| struct | BootSector |
| struct | _BootSector32 |
| struct | _BootSectorFatX |
| struct | _FsInfoSector |
| struct | PFAT_DIR_ENTRY |
| struct | PFATX_DIR_ENTRY |
| struct | slot |
| union | PDIR_ENTRY |
| struct | FATINFO |
| struct | HASHENTRY |
| struct | PVCB |
| struct | VFAT_GLOBAL_DATA |
| struct | PVFATFCB |
| struct | PVFATCCB |
| struct | PDOSTIME |
| struct | PDOSDATE |
| struct | VFAT_IRP_CONTEXT |
| struct | PVFAT_DIRENTRY_CONTEXT |
Defines |
| #define | USE_ROS_CC_AND_FS |
| #define | VFAT_CASE_LOWER_BASE 8 |
| #define | VFAT_CASE_LOWER_EXT 16 |
| #define | LONGNAME_MAX_LENGTH 256 |
| #define | ENTRY_DELETED(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_DELETED(&((DirEntry)->FatX)) : FAT_ENTRY_DELETED(&((DirEntry)->Fat))) |
| #define | ENTRY_VOLUME(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_VOLUME(&((DirEntry)->FatX)) : FAT_ENTRY_VOLUME(&((DirEntry)->Fat))) |
| #define | ENTRY_END(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_END(&((DirEntry)->FatX)) : FAT_ENTRY_END(&((DirEntry)->Fat))) |
| #define | FAT_ENTRY_DELETED(DirEntry) ((DirEntry)->Filename[0] == 0xe5) |
| #define | FAT_ENTRY_END(DirEntry) ((DirEntry)->Filename[0] == 0) |
| #define | FAT_ENTRY_LONG(DirEntry) (((DirEntry)->Attrib & 0x3f) == 0x0f) |
| #define | FAT_ENTRY_VOLUME(DirEntry) (((DirEntry)->Attrib & 0x1f) == 0x08) |
| #define | FATX_ENTRY_DELETED(DirEntry) ((DirEntry)->FilenameLength == 0xe5) |
| #define | FATX_ENTRY_END(DirEntry) ((DirEntry)->FilenameLength == 0xff) |
| #define | FATX_ENTRY_LONG(DirEntry) (FALSE) |
| #define | FATX_ENTRY_VOLUME(DirEntry) (((DirEntry)->Attrib & 0x1f) == 0x08) |
| #define | FAT_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof (FAT_DIR_ENTRY)) |
| #define | FATX_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof (FATX_DIR_ENTRY)) |
| #define | BLOCKSIZE 512 |
| #define | FAT16 (1) |
| #define | FAT12 (2) |
| #define | FAT32 (3) |
| #define | FATX16 (4) |
| #define | FATX32 (5) |
| #define | VCB_VOLUME_LOCKED 0x0001 |
| #define | VCB_DISMOUNT_PENDING 0x0002 |
| #define | VCB_IS_FATX 0x0004 |
| #define | VCB_IS_DIRTY 0x4000 /* Volume is dirty */ |
| #define | VCB_CLEAR_DIRTY 0x8000 /* Clean dirty flag at shutdown */ |
| #define | FCB_HASH_TABLE_SIZE 65536 |
| #define | FCB_CACHE_INITIALIZED 0x0001 |
| #define | FCB_DELETE_PENDING 0x0002 |
| #define | FCB_IS_FAT 0x0004 |
| #define | FCB_IS_PAGE_FILE 0x0008 |
| #define | FCB_IS_VOLUME 0x0010 |
| #define | FCB_IS_DIRTY 0x0020 |
| #define | FCB_IS_FATX_ENTRY 0x0040 |
| #define | TAG_CCB 'BCCV' |
| #define | TAG_FCB 'BCFV' |
| #define | TAG_IRP 'PRIV' |
| #define | ENTRIES_PER_SECTOR (BLOCKSIZE / sizeof(FATDirEntry)) |
| #define | IRPCONTEXT_CANWAIT 0x0001 |
| #define | IRPCONTEXT_PENDINGRETURNED 0x0002 |
Typedefs |
| typedef struct FATINFO * | PFATINFO |
| typedef NTSTATUS(* | PGET_NEXT_CLUSTER )(PDEVICE_EXTENSION, ULONG, PULONG) |
| typedef NTSTATUS(* | PFIND_AND_MARK_AVAILABLE_CLUSTER )(PDEVICE_EXTENSION, PULONG) |
| typedef NTSTATUS(* | PWRITE_CLUSTER )(PDEVICE_EXTENSION, ULONG, ULONG, PULONG) |
| typedef NTSTATUS(* | PGET_NEXT_DIR_ENTRY )(PVOID *, PVOID *, struct _VFATFCB *, struct _VFAT_DIRENTRY_CONTEXT *, BOOLEAN) |
| typedef struct VFAT_GLOBAL_DATA * | PVFAT_GLOBAL_DATA |
| typedef struct VFAT_IRP_CONTEXT * | PVFAT_IRP_CONTEXT |
Functions |
| NTSTATUS NTAPI | VfatShutdown (PDEVICE_OBJECT DeviceObject, PIRP Irp) |
| NTSTATUS | VfatQueryVolumeInformation (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatSetVolumeInformation (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatReadDisk (IN PDEVICE_OBJECT pDeviceObject, IN PLARGE_INTEGER ReadOffset, IN ULONG ReadLength, IN PUCHAR Buffer, IN BOOLEAN Override) |
| NTSTATUS | VfatReadDiskPartial (IN PVFAT_IRP_CONTEXT IrpContext, IN PLARGE_INTEGER ReadOffset, IN ULONG ReadLength, IN ULONG BufferOffset, IN BOOLEAN Wait) |
| NTSTATUS | VfatWriteDiskPartial (IN PVFAT_IRP_CONTEXT IrpContext, IN PLARGE_INTEGER WriteOffset, IN ULONG WriteLength, IN ULONG BufferOffset, IN BOOLEAN Wait) |
| NTSTATUS | VfatBlockDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, IN ULONG CtlCode, IN PVOID InputBuffer, IN ULONG InputBufferSize, IN OUT PVOID OutputBuffer, IN OUT PULONG pOutputBufferSize, IN BOOLEAN Override) |
| NTSTATUS | VfatDirectoryControl (PVFAT_IRP_CONTEXT) |
| BOOLEAN | FsdDosDateTimeToSystemTime (PDEVICE_EXTENSION DeviceExt, USHORT DosDate, USHORT DosTime, PLARGE_INTEGER SystemTime) |
| BOOLEAN | FsdSystemTimeToDosDateTime (PDEVICE_EXTENSION DeviceExt, PLARGE_INTEGER SystemTime, USHORT *pDosDate, USHORT *pDosTime) |
| NTSTATUS | VfatCreate (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatOpenFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject, PVFATFCB *parentFcb) |
| NTSTATUS | FindFile (PDEVICE_EXTENSION DeviceExt, PVFATFCB Parent, PUNICODE_STRING FileToFindU, PVFAT_DIRENTRY_CONTEXT DirContext, BOOLEAN First) |
| VOID | vfat8Dot3ToString (PFAT_DIR_ENTRY pEntry, PUNICODE_STRING NameU) |
| NTSTATUS | ReadVolumeLabel (PDEVICE_EXTENSION DeviceExt, PVPB Vpb) |
| NTSTATUS | VfatClose (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatCloseFile (PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject) |
| NTSTATUS | VfatCleanup (PVFAT_IRP_CONTEXT IrpContext) |
| VOID | VfatInitFastIoRoutines (PFAST_IO_DISPATCH FastIoDispatch) |
| BOOLEAN NTAPI | VfatAcquireForLazyWrite (IN PVOID Context, IN BOOLEAN Wait) |
| VOID NTAPI | VfatReleaseFromLazyWrite (IN PVOID Context) |
| BOOLEAN NTAPI | VfatAcquireForReadAhead (IN PVOID Context, IN BOOLEAN Wait) |
| VOID NTAPI | VfatReleaseFromReadAhead (IN PVOID Context) |
| NTSTATUS | VfatFileSystemControl (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatQueryInformation (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatSetInformation (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatSetAllocationSizeInformation (PFILE_OBJECT FileObject, PVFATFCB Fcb, PDEVICE_EXTENSION DeviceExt, PLARGE_INTEGER AllocationSize) |
| NTSTATUS NTAPI | DriverEntry (PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) |
| NTSTATUS | VfatAddEntry (PDEVICE_EXTENSION DeviceExt, PUNICODE_STRING PathNameU, PVFATFCB *Fcb, PVFATFCB ParentFcb, ULONG RequestedOptions, UCHAR ReqAttr) |
| NTSTATUS | VfatUpdateEntry (PVFATFCB pFcb) |
| NTSTATUS | VfatDelEntry (PDEVICE_EXTENSION, PVFATFCB) |
| BOOLEAN | vfatFindDirSpace (PDEVICE_EXTENSION DeviceExt, PVFATFCB pDirFcb, ULONG nbSlots, PULONG start) |
| VOID | vfatSplitPathName (PUNICODE_STRING PathNameU, PUNICODE_STRING DirNameU, PUNICODE_STRING FileNameU) |
| BOOLEAN | vfatIsLongIllegal (WCHAR c) |
| BOOLEAN | wstrcmpjoki (PWSTR s1, PWSTR s2) |
| NTSTATUS | FAT12GetNextCluster (PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster, PULONG NextCluster) |
| NTSTATUS | FAT12FindAndMarkAvailableCluster (PDEVICE_EXTENSION DeviceExt, PULONG Cluster) |
| NTSTATUS | FAT12WriteCluster (PDEVICE_EXTENSION DeviceExt, ULONG ClusterToWrite, ULONG NewValue, PULONG OldValue) |
| NTSTATUS | FAT16GetNextCluster (PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster, PULONG NextCluster) |
| NTSTATUS | FAT16FindAndMarkAvailableCluster (PDEVICE_EXTENSION DeviceExt, PULONG Cluster) |
| NTSTATUS | FAT16WriteCluster (PDEVICE_EXTENSION DeviceExt, ULONG ClusterToWrite, ULONG NewValue, PULONG OldValue) |
| NTSTATUS | FAT32GetNextCluster (PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster, PULONG NextCluster) |
| NTSTATUS | FAT32FindAndMarkAvailableCluster (PDEVICE_EXTENSION DeviceExt, PULONG Cluster) |
| NTSTATUS | FAT32WriteCluster (PDEVICE_EXTENSION DeviceExt, ULONG ClusterToWrite, ULONG NewValue, PULONG OldValue) |
| NTSTATUS | OffsetToCluster (PDEVICE_EXTENSION DeviceExt, ULONG FirstCluster, ULONG FileOffset, PULONG Cluster, BOOLEAN Extend) |
| ULONGLONG | ClusterToSector (PDEVICE_EXTENSION DeviceExt, ULONG Cluster) |
| NTSTATUS | GetNextCluster (PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster, PULONG NextCluster) |
| NTSTATUS | GetNextClusterExtend (PDEVICE_EXTENSION DeviceExt, ULONG CurrentCluster, PULONG NextCluster) |
| NTSTATUS | CountAvailableClusters (PDEVICE_EXTENSION DeviceExt, PLARGE_INTEGER Clusters) |
| NTSTATUS | WriteCluster (PDEVICE_EXTENSION DeviceExt, ULONG ClusterToWrite, ULONG NewValue) |
| ULONG | vfatDirEntryGetFirstCluster (PDEVICE_EXTENSION pDeviceExt, PDIR_ENTRY pDirEntry) |
| BOOLEAN | VfatIsDirectoryEmpty (PVFATFCB Fcb) |
| NTSTATUS | FATGetNextDirEntry (PVOID *pContext, PVOID *pPage, IN PVFATFCB pDirFcb, IN PVFAT_DIRENTRY_CONTEXT DirContext, BOOLEAN First) |
| NTSTATUS | FATXGetNextDirEntry (PVOID *pContext, PVOID *pPage, IN PVFATFCB pDirFcb, IN PVFAT_DIRENTRY_CONTEXT DirContext, BOOLEAN First) |
| PVFATFCB | vfatNewFCB (PDEVICE_EXTENSION pVCB, PUNICODE_STRING pFileNameU) |
| VOID | vfatDestroyFCB (PVFATFCB pFCB) |
| VOID | vfatDestroyCCB (PVFATCCB pCcb) |
| VOID | vfatGrabFCB (PDEVICE_EXTENSION pVCB, PVFATFCB pFCB) |
| VOID | vfatReleaseFCB (PDEVICE_EXTENSION pVCB, PVFATFCB pFCB) |
| VOID | vfatAddFCBToTable (PDEVICE_EXTENSION pVCB, PVFATFCB pFCB) |
| PVFATFCB | vfatGrabFCBFromTable (PDEVICE_EXTENSION pDeviceExt, PUNICODE_STRING pFileNameU) |
| PVFATFCB | vfatMakeRootFCB (PDEVICE_EXTENSION pVCB) |
| PVFATFCB | vfatOpenRootFCB (PDEVICE_EXTENSION pVCB) |
| BOOLEAN | vfatFCBIsDirectory (PVFATFCB FCB) |
| BOOLEAN | vfatFCBIsRoot (PVFATFCB FCB) |
| NTSTATUS | vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb, PVFATFCB fcb, PFILE_OBJECT fileObject) |
| NTSTATUS | vfatDirFindFile (PDEVICE_EXTENSION pVCB, PVFATFCB parentFCB, PUNICODE_STRING FileToFindU, PVFATFCB *fileFCB) |
| NTSTATUS | vfatGetFCBForFile (PDEVICE_EXTENSION pVCB, PVFATFCB *pParentFCB, PVFATFCB *pFCB, PUNICODE_STRING pFileNameU) |
| NTSTATUS | vfatMakeFCBFromDirEntry (PVCB vcb, PVFATFCB directoryFCB, PVFAT_DIRENTRY_CONTEXT DirContext, PVFATFCB *fileFCB) |
| NTSTATUS | VfatRead (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatWrite (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | NextCluster (PDEVICE_EXTENSION DeviceExt, ULONG FirstCluster, PULONG CurrentCluster, BOOLEAN Extend) |
| NTSTATUS | VfatQueueRequest (PVFAT_IRP_CONTEXT IrpContext) |
| PVFAT_IRP_CONTEXT | VfatAllocateIrpContext (PDEVICE_OBJECT DeviceObject, PIRP Irp) |
| VOID | VfatFreeIrpContext (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS NTAPI | VfatBuildRequest (PDEVICE_OBJECT DeviceObject, PIRP Irp) |
| PVOID | VfatGetUserBuffer (IN PIRP) |
| NTSTATUS | VfatLockUserBuffer (IN PIRP, IN ULONG, IN LOCK_OPERATION) |
| NTSTATUS | VfatSetExtendedAttributes (PFILE_OBJECT FileObject, PVOID Ea, ULONG EaLength) |
| NTSTATUS | VfatFlush (PVFAT_IRP_CONTEXT IrpContext) |
| NTSTATUS | VfatFlushVolume (PDEVICE_EXTENSION DeviceExt, PVFATFCB VolumeFcb) |
Variables |
| PVFAT_GLOBAL_DATA | VfatGlobalData |