2001-07-28 07:05:56 +00:00
|
|
|
/* $Id: vfat.h,v 1.34 2001/07/28 07:05:56 hbirr Exp $ */
|
2000-12-29 23:17:12 +00:00
|
|
|
|
|
|
|
#include <ddk/ntifs.h>
|
1999-01-04 11:59:25 +00:00
|
|
|
|
2001-07-20 08:00:21 +00:00
|
|
|
struct _BootSector
|
|
|
|
{
|
1998-10-05 04:00:59 +00:00
|
|
|
unsigned char magic0, res0, magic1;
|
|
|
|
unsigned char OEMName[8];
|
|
|
|
unsigned short BytesPerSector;
|
|
|
|
unsigned char SectorsPerCluster;
|
|
|
|
unsigned short ReservedSectors;
|
|
|
|
unsigned char FATCount;
|
|
|
|
unsigned short RootEntries, Sectors;
|
|
|
|
unsigned char Media;
|
|
|
|
unsigned short FATSectors, SectorsPerTrack, Heads;
|
|
|
|
unsigned long HiddenSectors, SectorsHuge;
|
|
|
|
unsigned char Drive, Res1, Sig;
|
|
|
|
unsigned long VolumeID;
|
|
|
|
unsigned char VolumeLabel[11], SysType[8];
|
|
|
|
unsigned char Res2[450];
|
|
|
|
} __attribute__((packed));
|
|
|
|
|
2001-07-20 08:00:21 +00:00
|
|
|
struct _BootSector32
|
|
|
|
{
|
|
|
|
unsigned char magic0, res0, magic1; // 0
|
|
|
|
unsigned char OEMName[8]; // 3
|
|
|
|
unsigned short BytesPerSector; // 11
|
|
|
|
unsigned char SectorsPerCluster; // 13
|
|
|
|
unsigned short ReservedSectors; // 14
|
|
|
|
unsigned char FATCount; // 16
|
|
|
|
unsigned short RootEntries, Sectors; // 17
|
|
|
|
unsigned char Media; // 21
|
|
|
|
unsigned short FATSectors, SectorsPerTrack, Heads; // 22
|
|
|
|
unsigned long HiddenSectors, SectorsHuge; // 28
|
|
|
|
unsigned long FATSectors32; // 36
|
|
|
|
unsigned short ExtFlag; // 40
|
|
|
|
unsigned short FSVersion; // 42
|
|
|
|
unsigned long RootCluster; // 44
|
|
|
|
unsigned short FSInfoSector; // 48
|
|
|
|
unsigned long BootBackup; // 50
|
|
|
|
unsigned char Res3[10]; // 54
|
|
|
|
unsigned char Drive; // 64
|
|
|
|
unsigned char Res4; // 65
|
|
|
|
unsigned char ExtBootSignature; // 66
|
|
|
|
unsigned long VolumeID; // 67
|
|
|
|
unsigned char VolumeLabel[11], SysType[8]; // 71
|
|
|
|
unsigned char Res2[418]; // 90
|
|
|
|
unsigned long Signature1; // 508
|
|
|
|
} __attribute__((packed));
|
|
|
|
|
|
|
|
struct _BootBackupSector
|
|
|
|
{
|
|
|
|
unsigned long ExtBootSignature2; // 0
|
|
|
|
unsigned char Res6[480]; // 4
|
|
|
|
unsigned long FSINFOSignature; // 484
|
|
|
|
unsigned long FreeCluster; // 488
|
|
|
|
unsigned long NextCluster; // 492
|
|
|
|
unsigned char Res7[12]; // 496
|
|
|
|
unsigned long Signatur2; // 508
|
1998-12-20 19:41:39 +00:00
|
|
|
} __attribute__((packed));
|
|
|
|
|
1998-10-05 04:00:59 +00:00
|
|
|
typedef struct _BootSector BootSector;
|
|
|
|
|
|
|
|
struct _FATDirEntry {
|
1998-12-30 18:43:27 +00:00
|
|
|
unsigned char Filename[8], Ext[3], Attrib, Res[2];
|
|
|
|
unsigned short CreationTime,CreationDate,AccessDate;
|
1998-12-20 19:41:39 +00:00
|
|
|
unsigned short FirstClusterHigh;// higher
|
1998-12-30 18:43:27 +00:00
|
|
|
unsigned short UpdateTime;//time create/update
|
|
|
|
unsigned short UpdateDate;//date create/update
|
1998-10-05 04:00:59 +00:00
|
|
|
unsigned short FirstCluster;
|
|
|
|
unsigned long FileSize;
|
|
|
|
} __attribute__((packed));
|
|
|
|
|
2001-07-05 01:51:53 +00:00
|
|
|
typedef struct _FATDirEntry FATDirEntry, FAT_DIR_ENTRY, *PFAT_DIR_ENTRY;
|
1998-10-05 04:00:59 +00:00
|
|
|
|
|
|
|
struct _slot
|
|
|
|
{
|
|
|
|
unsigned char id; // sequence number for slot
|
|
|
|
WCHAR name0_4[5]; // first 5 characters in name
|
|
|
|
unsigned char attr; // attribute byte
|
|
|
|
unsigned char reserved; // always 0
|
|
|
|
unsigned char alias_checksum; // checksum for 8.3 alias
|
|
|
|
WCHAR name5_10[6]; // 6 more characters in name
|
|
|
|
unsigned char start[2]; // starting cluster number
|
|
|
|
WCHAR name11_12[2]; // last 2 characters in name
|
|
|
|
} __attribute__((packed));
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct _slot slot;
|
|
|
|
|
|
|
|
#define BLOCKSIZE 512
|
1998-12-20 19:41:39 +00:00
|
|
|
|
1998-12-30 18:43:27 +00:00
|
|
|
#define FAT16 (1)
|
|
|
|
#define FAT12 (2)
|
|
|
|
#define FAT32 (3)
|
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
2001-01-08 02:14:06 +00:00
|
|
|
ERESOURCE DirResource;
|
|
|
|
ERESOURCE FatResource;
|
|
|
|
|
|
|
|
KSPIN_LOCK FcbListLock;
|
|
|
|
LIST_ENTRY FcbListHead;
|
|
|
|
|
|
|
|
PDEVICE_OBJECT StorageDevice;
|
|
|
|
PFILE_OBJECT StreamStorageDevice;
|
|
|
|
PBCB StorageBcb;
|
2001-01-16 09:55:02 +00:00
|
|
|
PFILE_OBJECT Fat12StorageDevice;
|
|
|
|
PBCB Fat12StorageBcb;
|
2001-01-08 02:14:06 +00:00
|
|
|
BootSector *Boot;
|
|
|
|
int rootDirectorySectors, FATStart, rootStart, dataStart;
|
2001-07-05 01:51:53 +00:00
|
|
|
int BytesPerSector;
|
2001-01-08 02:14:06 +00:00
|
|
|
int FATEntriesPerSector, FATUnit;
|
|
|
|
ULONG BytesPerCluster;
|
|
|
|
ULONG FatType;
|
2001-07-05 01:51:53 +00:00
|
|
|
} DEVICE_EXTENSION, *PDEVICE_EXTENSION, VCB, *PVCB;
|
1998-12-30 18:43:27 +00:00
|
|
|
|
1999-12-11 21:14:49 +00:00
|
|
|
typedef struct _VFATFCB
|
1998-12-30 18:43:27 +00:00
|
|
|
{
|
2000-12-29 23:17:12 +00:00
|
|
|
REACTOS_COMMON_FCB_HEADER RFCB;
|
2001-02-10 22:51:11 +00:00
|
|
|
SECTION_OBJECT_POINTERS SectionObjectPointers;
|
2000-12-29 23:17:12 +00:00
|
|
|
FATDirEntry entry;
|
|
|
|
/* point on filename (250 chars max) in PathName */
|
|
|
|
WCHAR *ObjectName;
|
|
|
|
/* path+filename 260 max */
|
|
|
|
WCHAR PathName[MAX_PATH];
|
|
|
|
LONG RefCount;
|
|
|
|
PDEVICE_EXTENSION pDevExt;
|
|
|
|
LIST_ENTRY FcbListEntry;
|
|
|
|
struct _VFATFCB* parentFcb;
|
2001-07-05 01:51:53 +00:00
|
|
|
BOOL isCacheInitialized;
|
1999-12-11 21:14:49 +00:00
|
|
|
} VFATFCB, *PVFATFCB;
|
1999-01-04 11:59:25 +00:00
|
|
|
|
1999-12-11 21:14:49 +00:00
|
|
|
typedef struct _VFATCCB
|
1999-01-04 11:59:25 +00:00
|
|
|
{
|
1999-12-11 21:14:49 +00:00
|
|
|
VFATFCB * pFcb;
|
1999-01-04 11:59:25 +00:00
|
|
|
LIST_ENTRY NextCCB;
|
|
|
|
PFILE_OBJECT PtrFileObject;
|
|
|
|
LARGE_INTEGER CurrentByteOffset;
|
2000-12-29 23:17:12 +00:00
|
|
|
/* for DirectoryControl */
|
|
|
|
ULONG StartSector;
|
|
|
|
/* for DirectoryControl */
|
|
|
|
ULONG StartEntry;
|
|
|
|
// PSTRING DirectorySearchPattern;// for DirectoryControl ?
|
1999-12-11 21:14:49 +00:00
|
|
|
} VFATCCB, *PVFATCCB;
|
1998-12-30 18:43:27 +00:00
|
|
|
|
2001-07-05 01:51:53 +00:00
|
|
|
#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
|
|
|
|
|
|
|
|
#define TAG_CCB TAG('V', 'C', 'C', 'B')
|
1998-12-30 18:43:27 +00:00
|
|
|
|
|
|
|
#define ENTRIES_PER_SECTOR (BLOCKSIZE / sizeof(FATDirEntry))
|
|
|
|
|
1999-05-15 17:25:02 +00:00
|
|
|
typedef struct __DOSTIME
|
|
|
|
{
|
|
|
|
WORD Second:5;
|
|
|
|
WORD Minute:6;
|
|
|
|
WORD Hour:5;
|
|
|
|
} DOSTIME, *PDOSTIME;
|
|
|
|
|
|
|
|
typedef struct __DOSDATE
|
|
|
|
{
|
|
|
|
WORD Day:5;
|
|
|
|
WORD Month:4;
|
|
|
|
WORD Year:5;
|
|
|
|
} DOSDATE, *PDOSDATE;
|
|
|
|
|
2000-12-29 23:17:12 +00:00
|
|
|
/* functions called by i/o manager : */
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
DriverEntry(PDRIVER_OBJECT _DriverObject,PUNICODE_STRING RegistryPath);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
VfatDirectoryControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
VfatRead(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
VfatWrite(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
VfatCreate(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
VfatClose(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
VfatFileSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
2000-12-29 23:17:12 +00:00
|
|
|
VfatQueryInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-03-07 13:44:41 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
VfatSetInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
NTSTATUS STDCALL
|
|
|
|
VfatCleanup (PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
NTSTATUS STDCALL
|
|
|
|
VfatShutdown(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
|
|
|
NTSTATUS STDCALL
|
|
|
|
VfatQueryVolumeInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2001-06-11 19:52:22 +00:00
|
|
|
NTSTATUS STDCALL
|
|
|
|
VfatSetVolumeInformation(PDEVICE_OBJECT DeviceObject, PIRP Irp);
|
2000-12-29 23:17:12 +00:00
|
|
|
|
|
|
|
|
2001-01-16 09:55:02 +00:00
|
|
|
NTSTATUS
|
|
|
|
NextCluster(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG FirstCluster,
|
|
|
|
PULONG CurrentCluster,
|
|
|
|
BOOLEAN Extend);
|
|
|
|
|
2000-12-29 23:17:12 +00:00
|
|
|
/* internal functions in blockdev.c */
|
2001-01-08 02:14:06 +00:00
|
|
|
NTSTATUS
|
|
|
|
VfatReadSectors(IN PDEVICE_OBJECT pDeviceObject,
|
2000-12-29 23:17:12 +00:00
|
|
|
IN ULONG DiskSector,
|
|
|
|
IN ULONG SectorCount,
|
|
|
|
IN UCHAR* Buffer);
|
|
|
|
|
2001-01-08 02:14:06 +00:00
|
|
|
NTSTATUS
|
|
|
|
VfatWriteSectors(IN PDEVICE_OBJECT pDeviceObject,
|
2000-12-29 23:17:12 +00:00
|
|
|
IN ULONG DiskSector,
|
|
|
|
IN ULONG SectorCount,
|
|
|
|
IN UCHAR* Buffer);
|
|
|
|
|
|
|
|
/* internal functions in dir.c : */
|
1999-05-15 17:25:02 +00:00
|
|
|
BOOL FsdDosDateTimeToFileTime(WORD wDosDate,WORD wDosTime, TIME *FileTime);
|
1999-12-16 23:08:17 +00:00
|
|
|
BOOL FsdFileTimeToDosDateTime(TIME *FileTime,WORD *pwDosDate,WORD *pwDosTime);
|
1999-05-15 17:25:02 +00:00
|
|
|
|
2000-12-29 23:17:12 +00:00
|
|
|
/* internal functions in iface.c : */
|
|
|
|
NTSTATUS
|
|
|
|
FindFile(PDEVICE_EXTENSION DeviceExt, PVFATFCB Fcb,
|
|
|
|
PVFATFCB Parent, PWSTR FileToFind,ULONG *StartSector,ULONG *Entry);
|
|
|
|
NTSTATUS
|
|
|
|
VfatCloseFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject);
|
|
|
|
NTSTATUS
|
|
|
|
VfatOpenFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
|
|
|
|
PWSTR FileName);
|
|
|
|
NTSTATUS
|
|
|
|
VfatReadFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
|
|
|
|
PVOID Buffer, ULONG Length, ULONG ReadOffset,
|
2001-01-13 18:38:09 +00:00
|
|
|
PULONG LengthRead, ULONG NoCache);
|
2000-12-29 23:17:12 +00:00
|
|
|
NTSTATUS
|
|
|
|
VfatWriteFile(PDEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject,
|
2001-01-16 09:55:02 +00:00
|
|
|
PVOID Buffer, ULONG Length, ULONG WriteOffset, ULONG NoCache);
|
2001-01-14 15:05:53 +00:00
|
|
|
NTSTATUS
|
2001-01-16 09:55:02 +00:00
|
|
|
GetNextWriteCluster(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG FirstCluster,
|
|
|
|
ULONG CurrentCluster,
|
2001-01-14 15:05:53 +00:00
|
|
|
PULONG NextCluster);
|
2000-12-29 23:17:12 +00:00
|
|
|
BOOLEAN
|
|
|
|
IsDeletedEntry(PVOID Block, ULONG Offset);
|
|
|
|
BOOLEAN
|
|
|
|
IsLastEntry(PVOID Block, ULONG Offset);
|
|
|
|
wchar_t*
|
|
|
|
vfat_wcsncpy(wchar_t * dest, const wchar_t *src,size_t wcount);
|
2001-01-13 18:38:09 +00:00
|
|
|
NTSTATUS
|
2001-01-16 09:55:02 +00:00
|
|
|
VfatRawWriteCluster(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG FirstCluster, PVOID Buffer, ULONG Cluster);
|
2000-12-29 23:17:12 +00:00
|
|
|
|
|
|
|
/* internal functions in dirwr.c */
|
|
|
|
NTSTATUS
|
|
|
|
addEntry(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
PFILE_OBJECT pFileObject,ULONG RequestedOptions,UCHAR ReqAttr);
|
|
|
|
NTSTATUS
|
|
|
|
updEntry(PDEVICE_EXTENSION DeviceExt,PFILE_OBJECT pFileObject);
|
1999-12-11 21:14:49 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* String functions
|
|
|
|
*/
|
2000-12-29 23:17:12 +00:00
|
|
|
VOID
|
|
|
|
vfat_initstr(wchar_t *wstr, ULONG wsize);
|
|
|
|
wchar_t*
|
|
|
|
vfat_wcsncat(wchar_t * dest, const wchar_t * src,size_t wstart, size_t wcount);
|
|
|
|
wchar_t*
|
|
|
|
vfat_wcsncpy(wchar_t * dest, const wchar_t *src,size_t wcount);
|
|
|
|
wchar_t*
|
|
|
|
vfat_movstr(wchar_t *src, ULONG dpos, ULONG spos, ULONG len);
|
|
|
|
BOOLEAN
|
|
|
|
wstrcmpi(PWSTR s1, PWSTR s2);
|
|
|
|
BOOLEAN
|
|
|
|
wstrcmpjoki(PWSTR s1, PWSTR s2);
|
2001-05-10 04:02:21 +00:00
|
|
|
PWCHAR vfatGetNextPathElement (PWCHAR pFileName);
|
|
|
|
void vfatWSubString (PWCHAR pTarget, const PWCHAR pSource, size_t pLength);
|
|
|
|
BOOL vfatIsFileNameValid (PWCHAR pFileName);
|
1999-12-11 21:14:49 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* functions from fat.c
|
|
|
|
*/
|
2001-07-05 01:51:53 +00:00
|
|
|
NTSTATUS
|
|
|
|
OffsetToCluster(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG FirstCluster,
|
|
|
|
ULONG FileOffset,
|
|
|
|
PULONG Cluster,
|
|
|
|
BOOLEAN Extend);
|
2001-06-14 10:02:59 +00:00
|
|
|
ULONG
|
|
|
|
ClusterToSector(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG Cluster);
|
2001-01-12 21:00:08 +00:00
|
|
|
NTSTATUS
|
2001-06-14 10:02:59 +00:00
|
|
|
GetNextCluster(PDEVICE_EXTENSION DeviceExt,
|
2001-01-12 21:00:08 +00:00
|
|
|
ULONG CurrentCluster,
|
2001-01-16 09:55:02 +00:00
|
|
|
PULONG NextCluster,
|
|
|
|
BOOLEAN Extend);
|
2001-01-14 15:05:53 +00:00
|
|
|
NTSTATUS
|
2001-06-14 10:02:59 +00:00
|
|
|
GetNextSector(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG CurrentSector,
|
|
|
|
PULONG NextSector,
|
|
|
|
BOOLEAN Extend);
|
2001-03-02 15:59:16 +00:00
|
|
|
NTSTATUS
|
2001-06-14 10:02:59 +00:00
|
|
|
VfatRawReadCluster(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG FirstCluster,
|
|
|
|
PVOID Buffer,
|
|
|
|
ULONG Cluster);
|
|
|
|
NTSTATUS
|
|
|
|
VfatRawWriteCluster(PDEVICE_EXTENSION DeviceExt,
|
2001-01-14 15:05:53 +00:00
|
|
|
ULONG FirstCluster,
|
2001-06-14 10:02:59 +00:00
|
|
|
PVOID Buffer,
|
2001-01-14 15:05:53 +00:00
|
|
|
ULONG Cluster);
|
|
|
|
NTSTATUS
|
2001-06-14 10:02:59 +00:00
|
|
|
FAT12CountAvailableClusters(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
PLARGE_INTEGER Clusters);
|
|
|
|
NTSTATUS
|
|
|
|
FAT16CountAvailableClusters(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
PLARGE_INTEGER Clusters);
|
|
|
|
NTSTATUS
|
|
|
|
FAT32CountAvailableClusters(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
PLARGE_INTEGER Clusters);
|
|
|
|
NTSTATUS
|
|
|
|
WriteCluster(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
ULONG ClusterToWrite,
|
|
|
|
ULONG NewValue);
|
1999-12-11 21:14:49 +00:00
|
|
|
|
2001-07-05 01:51:53 +00:00
|
|
|
/* --------------------------------------------------------- create.c */
|
|
|
|
|
|
|
|
void vfat8Dot3ToString (PCHAR pBasename, PCHAR pExtension, PWSTR pName);
|
2001-06-14 10:02:59 +00:00
|
|
|
NTSTATUS
|
2000-12-29 23:17:12 +00:00
|
|
|
ReadVolumeLabel(PDEVICE_EXTENSION DeviceExt, PVPB Vpb);
|
2001-01-16 09:55:02 +00:00
|
|
|
NTSTATUS
|
2001-06-14 10:02:59 +00:00
|
|
|
VfatOpenFile(PDEVICE_EXTENSION DeviceExt,
|
|
|
|
PFILE_OBJECT FileObject,
|
|
|
|
PWSTR FileName);
|
2001-05-02 03:18:03 +00:00
|
|
|
|
2001-07-05 01:51:53 +00:00
|
|
|
/* ----------------------------------------------- DirEntry Functions */
|
|
|
|
|
|
|
|
ULONG vfatDirEntryGetFirstCluster (PDEVICE_EXTENSION pDeviceExt,
|
|
|
|
PFAT_DIR_ENTRY pDirEntry);
|
|
|
|
BOOL vfatIsDirEntryDeleted (FATDirEntry * pFatDirEntry);
|
2001-07-28 07:05:56 +00:00
|
|
|
BOOL vfatIsDirEntryVolume (FATDirEntry * pFatDirEntry);
|
2001-07-05 01:51:53 +00:00
|
|
|
void vfatGetDirEntryName (PFAT_DIR_ENTRY pDirEntry, PWSTR pEntryName);
|
|
|
|
NTSTATUS vfatGetNextDirEntry (PDEVICE_EXTENSION pDeviceExt,
|
|
|
|
PVFATFCB pDirectoryFCB,
|
|
|
|
ULONG * pDirectoryIndex,
|
|
|
|
PWSTR pLongFileName,
|
|
|
|
PFAT_DIR_ENTRY pDirEntry);
|
|
|
|
|
2001-05-02 03:18:03 +00:00
|
|
|
/* ----------------------------------------------------- FCB Functions */
|
|
|
|
|
|
|
|
PVFATFCB vfatNewFCB (PWCHAR pFileName);
|
2001-05-10 04:02:21 +00:00
|
|
|
void vfatDestroyFCB (PVFATFCB pFCB);
|
|
|
|
void vfatGrabFCB (PDEVICE_EXTENSION pVCB, PVFATFCB pFCB);
|
|
|
|
void vfatReleaseFCB (PDEVICE_EXTENSION pVCB, PVFATFCB pFCB);
|
|
|
|
void vfatAddFCBToTable (PDEVICE_EXTENSION pVCB,
|
|
|
|
PVFATFCB pFCB);
|
2001-05-02 03:18:03 +00:00
|
|
|
PVFATFCB vfatGrabFCBFromTable (PDEVICE_EXTENSION pDeviceExt,
|
|
|
|
PWSTR pFileName);
|
2001-07-05 01:51:53 +00:00
|
|
|
NTSTATUS vfatRequestAndValidateRegion (PDEVICE_EXTENSION pDeviceExt,
|
|
|
|
PVFATFCB pFCB,
|
|
|
|
ULONG pOffset,
|
|
|
|
PVOID * pBuffer,
|
|
|
|
PCACHE_SEGMENT * pCacheSegment,
|
|
|
|
BOOL pExtend);
|
|
|
|
NTSTATUS vfatReleaseRegion (PDEVICE_EXTENSION pDeviceExt,
|
|
|
|
PVFATFCB pFCB,
|
|
|
|
PCACHE_SEGMENT pCacheSegment);
|
2001-05-10 04:02:21 +00:00
|
|
|
PVFATFCB vfatMakeRootFCB (PDEVICE_EXTENSION pVCB);
|
|
|
|
PVFATFCB vfatOpenRootFCB (PDEVICE_EXTENSION pVCB);
|
|
|
|
BOOL vfatFCBIsDirectory (PDEVICE_EXTENSION pVCB, PVFATFCB FCB);
|
2001-07-05 01:51:53 +00:00
|
|
|
NTSTATUS vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb,
|
|
|
|
PVFATFCB fcb,
|
|
|
|
PFILE_OBJECT fileObject);
|
|
|
|
NTSTATUS vfatDirFindFile (PDEVICE_EXTENSION pVCB,
|
|
|
|
PVFATFCB parentFCB,
|
|
|
|
PWSTR elementName,
|
|
|
|
PVFATFCB * fileFCB);
|
2001-05-10 04:02:21 +00:00
|
|
|
NTSTATUS vfatGetFCBForFile (PDEVICE_EXTENSION pVCB,
|
|
|
|
PVFATFCB *pParentFCB,
|
|
|
|
PVFATFCB *pFCB,
|
|
|
|
const PWSTR pFileName);
|
|
|
|
|
|
|
|
|
2001-05-02 03:18:03 +00:00
|
|
|
|
|
|
|
|