📄 rtfiles.h
字号:
typedef ONE_BYTE_ALIGN_ADS struct {
BYTE NearJump[3];
RTFBIOSParameter BP;
BYTE BootCode[512-3-sizeof(RTFBIOSParameter)-sizeof(WORD)];
WORD Signature;
} RTFBootRecord; /* ! Must SYNC ! */
#if defined(WIN32)
#pragma pack()
#endif
// API functions
// General File I/O
RTTDLL RTFHANDLE RTFAPI RTFOpenFile(const WCHAR * FileName, DWORD Flags, RTFHANDLE handle, RTFDirLocation * DSR_Hint);
RTTDLL RTFHANDLE RTFAPI RTFOpen(const WCHAR * FileName, DWORD Flags);
RTTDLL RTFHANDLE RTFAPI RTFReopen(const WCHAR * FileName, DWORD Flags, RTFHANDLE handle);
RTTDLL RTFHANDLE RTFAPI RTFOpenHint(const WCHAR * FileName, DWORD Flags, RTFDirLocation * DSR_Hint);
RTTDLL int RTFAPI RTFCloseFile(RTFHANDLE File, BYTE freeSlot);
#define RTFKEEPSLOT 0
#define RTFFREESLOT 1
RTTDLL int RTFAPI RTFClose(RTFHANDLE File);
#define RTFSoftClose(File) RTFCloseFile(File, RTFKEEPSLOT)
RTTDLL int RTFAPI RTFRead(RTFHANDLE File, void * DataPtr, UINT Length, UINT * Read);
RTTDLL int RTFAPI RTFWrite(RTFHANDLE File, void * DataPtr, UINT Length, UINT * Written);
RTTDLL int RTFAPI RTFSeek(RTFHANDLE File, int Offset, int Whence);
RTTDLL int RTFAPI RTFExtend(RTFHANDLE File, DWORD Length);
RTTDLL int RTFAPI RTFCommit(RTFHANDLE File);
RTTDLL int RTFAPI RTFTruncate(RTFHANDLE File);
// Information about Files
RTTDLL int RTFAPI RTFGetFileInfo(RTFHANDLE File, RTFFileInfo * FileInfo);
RTTDLL int RTFAPI RTFGetFileSize(RTFHANDLE File, DWORD * Size);
RTTDLL int RTFAPI RTFSetFileTime(RTFHANDLE File, const RTFDOSDateTime * Time);
// File Attributes
RTTDLL int RTFAPI RTFGetAttributes(const WCHAR * FileName);
RTTDLL int RTFAPI RTFSetAttributes(const WCHAR * FileName, BYTE Attributes);
// Directories
RTTDLL int RTFAPI RTFGetCurrentDir(WCHAR * DirName, UINT MaxLength);
RTTDLL int RTFAPI RTFSetCurrentDir(const WCHAR * DirName);
RTTDLL int RTFAPI RTFCreateDir(const WCHAR * DirName);
RTTDLL int RTFAPI RTFRemoveDir(const WCHAR * DirName);
RTTDLL int RTFAPI RTFCompactDir(const WCHAR * DirName, DWORD Flags);
// Finding Files
RTTDLL RTFHANDLE RTFAPI RTFFindFirstEx (const WCHAR * NamePattern, BYTE Attr, BYTE AttrMask, RTFDOSDirEntry * FileInfo, WCHAR * FileName, UINT MaxLength);
RTTDLL int RTFAPI RTFFindNextEx (RTFHANDLE File, RTFDOSDirEntry * FileInfo, WCHAR * FileName, UINT MaxLength);
RTTDLL int RTFAPI RTFFindClose(RTFHANDLE File);
RTTDLL int RTFAPI RTFGetDiskInfoEx(const WCHAR * DriveName, RTFDiskInfo * DiskInfo, int Flags);
// File Name Operations
RTTDLL int RTFAPI RTFRename(const WCHAR * FileName, const WCHAR * NewName);
RTTDLL int RTFAPI RTFDelete(const WCHAR * FileName);
RTTDLL int RTFAPI RTFMakeTempFileName(const WCHAR * DirName, WCHAR * FileName, UINT MaxLength);
RTTDLL int RTFAPI RTFMakeFileName(const RTFDOSDirEntry * FileInfo, WCHAR * FileName);
RTTDLL int RTFAPI RTFExpandName(WCHAR * FileName, UINT MaxLength);
// Disk and Volume Management
RTTDLL int RTFAPI RTFResetDisk(const WCHAR * DriveName);
RTTDLL int RTFAPI RTFGetDiskInfoEx(const WCHAR * DriveName, RTFDiskInfo * DiskInfo, int Flags);
RTTDLL int RTFAPI RTFGetPartitionInfo(const WCHAR * DriveName, RTFPartitionInfo * PartitionInfo);
RTTDLL int RTFAPI RTFSetVolumeLabel(const WCHAR * DriveName, const WCHAR * Label);
RTTDLL int RTFAPI RTFFormat(const WCHAR * DriveName, UINT MinSectorsPerCluster, RTFFormatCallback Progress, DWORD Flags);
RTTDLL int RTFAPI RTFCheckDiskBufferSize(const WCHAR * DriveName);
RTTDLL int RTFAPI RTFCheckDisk(const WCHAR * DriveName, void * Buffer, UINT BufferSize, RTFCheckDiskCallback ErrorHandler, DWORD Flags);
RTTDLL int RTFAPI RTFSanityCheck(void);
RTTDLL int RTFAPI RTFClearDiskFlag(void);
RTTDLL int RTFAPI RTFSetDiskFlag(void);
// Miscellaneous File Functions
RTTDLL int RTFAPI RTFCommitAll(const WCHAR * DriveName);
RTTDLL int RTFAPI RTFCloseAll(void);
RTTDLL int RTFAPI RTFUnlockAll(void);
RTTDLL void RTFAPI RTFShutDown(void);
RTTDLL RTFErrorAction RTFAPI RTFDefaultCriticalErrorHandler(WCHAR Drive, DWORD SerialNumber, int ErrorCode);
RTTDLL int RTFAPI RTFCreateMasterBootRecord(void * SectorBuffer, const RTFPartitionRecord * DiskGeometry);
RTTDLL int RTFAPI RTFSplitPartition(void * MasterBootRecord, RTFSector Sectors);
RTTDLL int RTFAPI RTFCreateBootSector(void * BootSector, const RTFPartitionRecord * Partition, BYTE MediaDescriptor, UINT MinSectorsPerCluster, DWORD Flags);
// Raw I/O functions
RTTDLL int RTFAPI RTFRawLowLevelFormat(int DeviceIndex, const WCHAR * DeviceName, RTFFormatCallback Progress, DWORD Flags);
// Functions for Debugging
RTTDLL void RTFAPI RTFBufferInfo(RTFBufferStatistic * BufferInfo);
// Obsolete functions
RTTDLL RTFHANDLE RTFAPI RTFFindFirst(const WCHAR * NamePattern, BYTE Attr1, BYTE Attr2, RTFDOSDirEntry * FileInfo, WCHAR * FileName);
RTTDLL int RTFAPI RTFFindNext (RTFHANDLE File, RTFDOSDirEntry * FileInfo, WCHAR * FileName);
RTTDLL int RTFAPI RTFGetDiskInfo(const WCHAR * DriveName, RTFDiskInfo * DiskInfo);
#ifdef RTF_32_BIT
#ifdef RTT32_VER
#if RTT32_VER >= 202
RTTDDL RTFileSystemHandlers RTFilesFileSystem;
#endif
#endif
#endif
/* MTK Enhancement, Karen Hsu, ADD START */
/*************************************************/
/*------------- Internal EXTERN -------------*/
#define ParseFileName(FileName) ParseFileName1((const char *)FileName, (RTFHANDLE) NULL)
typedef enum { NotMounted, Initialized, Mounted, Accessible, HasFileSystem } MountStates;
typedef enum {NeverUsed, Available, Lfn, InUse} DirEntry;
typedef enum { NormalFile, FileMapFile, Volume, PhysicalDisk } FileKind;
#define SEARCH_FILES 0
#define SEARCH_LABEL 1
#define SEARCH_PARENT 2
#define RTF_BAD_CLUSTER 0x0FFFFFF7L
#define RTF_INVALID_CLUSTER 0xFFFFFFFFL
#define RTF_CLUSTER_CHAIN_END 0x0FFFFFF8L // also 0x0FFFFFF9..0x0FFFFFFF, test for >=, write RTF_CHAIN_END_MARK
#define RTF_ROOT_DIR 0xFFFFFFFFL // pseudo cluster for the root directory (not for FAT-32)
#define FIRST_FILE_CLUSTER(Dir) (((RTFCluster)((Dir).FirstClusterHi) << 16) + (Dir).FirstCluster)
#define SET_FIRST_FILE_CLUSTER(Dir, Cluster) (Dir).FirstCluster = (Cluster), (Dir).FirstClusterHi = (Cluster) >> 16
#define CLUSTER_BIT(ClusterMap, C) ((ClusterMap[C / 8] & (1 << (C % 8))) != 0)
#define SET_CLUSTER_BIT(ClusterMap, C) ClusterMap[C / 8] |= 1 << (C % 8)
#define CLEAR_CLUSTER_BIT(ClusterMap, C) ClusterMap[C / 8] &= ~(1 << (C % 8))
#if defined(WIN32)
#pragma pack(1)
#endif
typedef ONE_BYTE_ALIGN_ADS struct {
BYTE Ord; // sequency number (backwards, 0x40 set if last record)
WORD Name1[5]; // name chars 1..5
BYTE Attributes; // magic value
BYTE Type; // must be zero
BYTE CheckSum; // checksum of the short name
WORD Name2[6]; // name chars 6..11
WORD FirstCluster; // zero
WORD Name3[2]; // name chars 12..13
} LFNDirEntry;
#if defined(WIN32)
#pragma pack()
#endif
RTTDDL RTFTables gFS_Data; /* Move to custom, Karen Hsu, 2004/08/30 */
//RTTDDL RTFTables RTFData;
RTTDDL const WCHAR dchar_dot[]; /* . */
RTTDDL const WCHAR dchar_dot_dot[]; /* .. */
RTTDDL const WCHAR dchar_start_dot_star[];
RTTDDL RTFMutex * RTFLock;
RTTDDL RTFMutex *MTFMLock;
RTTDDL RTFMutex *MTXLock;
#ifdef __FS_MOVE_SUPPORT__
RTTDDL RTFMutex *MTMoveLock;
#endif
RTTDDL RTFMutex *MTXdelLock;
#ifdef __FS_SORT_SUPPORT__
RTTDDL RTFMutex *MTSortLock;
#endif
#ifdef __FS_TRACE_SUPPORT__
RTTDDL RTFMutex *MTTraceLock;
#endif
RTTDDL int DrvMappingOld;
RTTDDL int DrvMappingNew;
RTTDLL int RTFAPI SearchFile(RTFile * f, UINT Flags, const char * FileName, RTFDirLocation * DSR_Hint);
RTTDLL RTFile * RTFAPI ParseFileName1(const char * FileName, RTFHANDLE File);
RTTDLL void RTFAPI RTFInit(void);
RTTDLL void RTFAPI DiscardAllBuffers(RTFDevice * Dev);
RTTDLL void RTFAPI MountLogicalDrive(RTFDrive * Drive, MountStates State);
RTTDLL void RTFAPI FlushAllBuffers(RTFDevice * Dev);
RTTDLL void RTFAPI FreeFTSlot(RTFile * f);
RTTDLL RTFile * RTFAPI ParseFileHandle(RTFHANDLE File);
RTTDLL int RTFAPI WFNamesMatch(const char * N1, const char * N2);
RTTDLL RTFDOSDirEntry * RTFAPI GetDir(RTFDrive * Drive, const RTFDirLocation * Pos);
RTTDLL DirEntry RTFAPI EntryType(const RTFDOSDirEntry * D);
RTTDLL int RTFAPI LFNCharCount(const LFNDirEntry * LD);
RTTDLL void RTFAPI CopyLFN(char * Name, const LFNDirEntry * LD);
RTTDLL RTFDOSDirEntry * RTFAPI NextDir(RTFDrive * Drive, RTFDirLocation * DSR);
RTTDLL int RTFAPI MakeShortFileName(const RTFDOSDirEntry * FileInfo, char * FileName, UINT MaxLength);
RTTDLL void RTFAPI FileNameExtendToWCHAR(char *filename);
RTTDLL WCHAR RTFAPI wchartoupper(WCHAR c);
RTTDLL void RTFAPI MakePseudoRootDirEntry(RTFDrive * Drive, RTFDirEntry * DirEntry);
RTTDLL void RTFAPI InitFilePointer(RTFile * f);
RTTDLL RTFHANDLE RTFAPI MakeNewFileHandle(RTFile * f);
RTTDLL void RTFAPI FreeFTSlotAndDevice(RTFile * f);
RTTDLL void RTFAPI UnlockDevice(RTFDevice * Dev);
RTTDLL BYTE RTFAPI ShortNameCheckSum(const BYTE * Name);
RTTDLL int RTFAPI FileNamesMatch(const WCHAR * p, const WCHAR * n);
RTTDLL void RTFAPI DeleteDirEntry(RTFile * f);
RTTDLL void RTFAPI UpdateDirEntry(RTFile * f);
RTTDLL void RTFAPI ExtendFile(RTFile * f, DWORD Bytes);
RTTDLL void RTFAPI CommitBuffer(RTFDevice * Dev);
RTTDLL RTFCluster RTFAPI GetClusterValue(RTFDrive * Drive, RTFCluster Cluster);
RTTDLL void RTFAPI SetClusterValue(RTFDrive * Drive, RTFCluster Cluster, RTFCluster Value);
RTTDLL int RTFAPI SafeLock(DWORD Lock, RTFDevice * Dev, UINT Timeout);
RTTDLL int RTFAPI SafeUnlock(DWORD Lock);
RTTDLL void RTFAPI CheckNotOpen(RTFile * File);
RTTDLL int RTFAPI UpdateClusterWatermark(RTFDrive * Drive, RTFCluster Watermark, int DeltaFreeClusters);
RTTDLL int RTFAPI RTFCheckDiskFlag(void);
RTTDLL void RTFAPI CheckSharing(RTFile * File);
RTTDLL RTFCluster RTFAPI SafeGetClusterValue(RTFDrive * Drive, RTFCluster Cluster);
RTTDLL void RTFAPI DelDirEntry(RTFDrive * Drive, RTFDirLocation * LongPos, const RTFDirLocation * Pos);
RTTDLL int RTFAPI IsValidLongNameChar(WCHAR c);
RTTDLL RTFCluster RTFAPI FATDelete(RTFDrive * Drive, RTFCluster Cluster, RTFile * f);
RTTDLL int RTFAPI FileNameInvalid(const char * Name);
/*------------- Internal Use -------------*/
typedef enum{
MT_ENUM_FH_INVALID,
MT_ENUM_FH_VALID,
MT_ENUM_FH_MEDIACHANGED,
MT_ENUM_FH_ABORTED,
MT_ENUM_FH_EXPORTED
}MT_FH_ENUM;
//Device Flag (lower 16 bit only; higher 16 bit for driver)
#define MT_DEVICE_NOR_FLASH 0x0040
#define MT_DEVICE_NAND_FLASH 0x0080
#define MT_DEVICE_WRITE_PROTECT 0x0100
#define MT_DEVICE_NO_EXPORT 0x0200
#define MT_DEVICE_EXPORTING 0x0400
#define MT_DEVICE_EXTERNAL 0x0800
//Special for function
#define MT_LOCK_ALL 0x00000001 //SafeUnlockDevice
#define MT_LOCK_RTF 0x00000002 //SafeUnlockDevice
#define MT_LOCK_DEV 0x00000004 //SafeUnlockDevice
#define MT_LOCK_FMT 0x00000008 //SafeUnlockDevice
#define MT_LOCK_EXT 0x00000010 //SafeUnlockDevice
#define MT_LOCK_MOVE 0x00000020 //SafeUnlockDevice
#define MT_LOCK_XDEL 0x00000040 //SafeUnlockDevice
#define MT_LOCK_SORT 0x00000080 //SafeUnlockDevice
#define MT_LOCK_TRACE 0x00000100 //SafeUnlockDevice
//drive letter
#define MT_BASE_DRIVE_LETTER 'C'
#define MT_BASE_DRIVE_INDEX 0
//for sanity check
#define MT_CHECKDISK_MAX_DEPTH 10
/*------------- External Use -------------*/
#ifdef __FS_TRACE_SUPPORT__
#define MAX_TRACE_STR_LEN 128
#define MT_TRACE_TMP_LEN 1536
extern DWORD g_TraceFlag;
extern char TraceTmpBuf[MT_TRACE_TMP_LEN];
#endif
//Error Code Number
#define MT_SYSTEM_CRASH -43 //for NAND Bad Block
#define MT_FAIL_GET_MEM -44 //for get system memory failure
#define MT_READ_ONLY_ERROR -45 //for access on read only error
#define MT_DEVICE_BUSY -46 //for look up device status
#define MT_ABORTED_ERROR -47 //for abort copy
#define MT_QUOTA_OVER_DISK_SPACE -48 //for quota management configure check
#define MT_PATH_OVER_LEN_ERROR -49 //for longh path over 260
#define MT_APP_QUOTA_FULL -50 //for quota management
#define MT_VF_MAP_ERROR -51 //for virtual file feature
#define MT_DEVICE_EXPORTED_ERROR -52 //for usb access in normal mode
#define MT_DISK_FRAGMENT -53 //for RTF_Extend() user
#define MT_DIRCACHE_EXPIRED -54 //for dir cache feature
#define MT_QUOTA_USAGE_WARNING -55 //for quota management run time usage check
// Error codes that related to device driver feature or system/kernel adadption layer
#define MT_MSDC_MOUNT_ERROR -100 //for MSDC only
#define MT_MSDC_READ_SECTOR_ERROR -101 //for MSDC only
#define MT_MSDC_WRITE_SECTOR_ERROR -102 //for MSDC only
#define MT_MSDC_DISCARD_SECTOR_ERROR -103 //for MSDC only
#define MT_MSDC_PRESNET_NOT_READY -104 //for MSDC only
#define MT_MSDC_NOT_PRESENT -105 //for MSDC only
#define MT_EXTERNAL_DEVICE_NOT_PRESENT -106 //for USB OTG only
#define MT_FLASH_MOUNT_ERROR -120 //for flash driver
#define MT_FLASH_ERASE_BUSY -121 //for flash driver
#define MT_NAND_DEVICE_NOT_SUPPORTED -122 //for flash driver
#define MT_LOCK_MUTEX_FAIL -141
#define MT_NO_NONBLOCKMODE -142
#define MT_NO_PROTECTIONMODE -143
//Trace Code Number
#define MT_TRACE_QM_OK -500 //for Quota Feature only
#define MT_TRACE_QM_ERR -501 //for Quota Feature only
//New API
RTTDLL int RTFAPI MTGetDrive(DWORD Type, DWORD Serial, DWORD AltMask);
RTTDLL int RTFAPI MTMappingDrive(DWORD UpperOldDrv, DWORD UpperNewDrv);
RTTDLL void RTFAPI MTSetTrace(DWORD Flag, DWORD Timeout);
RTTDLL void RTFAPI MTTraceFS(DWORD TaskId, DWORD FileCode, DWORD Line, int Code, RTFile * f, BYTE * TraceStr);
RTTDLL void * RTFAPI MTProxyGetBuffer (RTFDevice * Dev, RTFSector Sector);
RTTDLL int RTFAPI MTCopyFileByClusterChain(RTFHANDLE FileDst, RTFCluster *ClustersArray, UINT ClusterNum);
RTTDLL UINT RTFAPI GetFirstSector(WCHAR * FileName, void * SectorContent, UINT *Sector1, UINT *Sector2);
RTTDLL int RTFAPI SetCopyrightEntry(RTFDirLocation *lFS_CopyrightLongPos, RTFDirLocation *lFS_CopyrightShortPos, RTFDOSDirEntry *lFS_CopyrightDir);
RTTDLL void RTFAPI AdjustBuffer(void);
RTTDLL int RTFAPI BatchCountFreeClusters(RTFDrive * Drive);
RTTDLL void RTFAPI MTGetDirCacheValue(RTFDrive * Drive, RTFCluster DirCluster, UINT *CurrValue);
RTTDLL void RTFAPI MTSetDirCacheValue(RTFDrive * Drive, RTFCluster DirCluster, UINT NewValue);
RTTDLL void RTFAPI MTExpireDirCacheValue(RTFDrive * Drive, RTFCluster DirCluster);
RTTDLL int RTFAPI CleanUpDataSectors(RTFDrive * Drive, RTFCluster *Start, int MaxClusters);
RTTDLL void RTFAPI MTCheckSharingWithSpecialKindFh(RTFile * File);
//MTGetDrive Parameter
#define MT_NO_ALT_DRIVE 0x00000001
#define MT_ONLY_ALT_SERIAL 0x00000002
#define MT_DRIVE_I_SYSTEM 0x00000004
#define MT_DRIVE_V_NORMAL 0x00000008
#define MT_DRIVE_V_REMOVABLE 0x00000010
#define MT_DRIVE_V_EXTERNAL 0x00000020
//NTReserved for Find series
typedef enum{
MT_ENUM_FIND_NONE,
MT_ENUM_FIND_LFN,
MT_ENUM_FIND_SFN
}MT_FIND_ENUM;
//MTSetTrace Parameter
#define MT_TRACE_API 0x00000001
#define MT_TRACE_ERROR 0x00000002
#define MT_TRACE_DISABLE 0x00000004
#define MT_TRACE_ALL_TASK 0x00000008
#ifdef __FS_QM_SUPPORT__
typedef struct __QuotaStruct
{
BYTE Path[RTF_MAX_PATH/2];
UINT Priority;
UINT Qmin;
UINT Qmax;
UINT Uint;
}QuotaStruct;
typedef struct __InternQuotaStruct
{
UINT Qmin;
UINT Qmax;
UINT Qnow;
}InternQuotaStruct;
typedef enum
{
MT_QP_HIG_ENUM,
MT_QP_MID_ENUM,
MT_QP_LOW_ENUM,
MT_QP_DEL_ENUM
}MT_QP_ENUM;
extern const QuotaStruct gFS_ExtQuotaSet[];
extern InternQuotaStruct gFS_IntQuotaSet[];
extern const UINT FS_MAX_QSET;
extern WCHAR NvramName[6];
#endif
extern const UINT FS_MAX_DRIVES;
extern const UINT FS_MAX_FILES;
extern const UINT FS_MAX_BUFFERS;
extern const UINT FS_MAX_THREAD;
extern kal_taskid gFS_TaskList[];
extern const int gFS_DeviceNumOfSYSDRV;
extern const UINT FS_MAX_CHECK_BUFFER;
extern BYTE gFS_SanityCheckBuffer[];
extern int SysLockFAT; //for USB mode
extern int SysBlockFAT; //for single bank
extern kal_bool COPYRIGHT_USB_ON;
/*************************************************/
/* MTK Enhancement, Karen Hsu, ADD END */
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -