📄 fatmaster.h
字号:
#ifndef FATMASTER_H
#define FATMASTER_H
#include <Windows.h>
#include <Winbase.h>
#include <windef.h>
#include <tchar.h>
#include <string>
#include <iostream>
//using namespace::std;
typedef struct{
BYTE key[32];
BYTE value[32];
}FATG, *PFTAG;
typedef struct{
char preName[128];
UINT32 preSize;
char extName[16];
UINT32 extSize;
}FILE_NAME, *PFILE_NAME;
typedef struct{
UINT32 firCluNum;
UINT32 length;
}FILEENTINFO, *PFILEENTINFO;
#pragma pack(1)
typedef struct{
typedef struct{
BYTE rsv1:1;
BYTE lst:1;
BYTE rsv2:1;
BYTE seq:5;
}ATTR;
ATTR attr;
WORD name1[5];
BYTE flag;
BYTE rsv;
BYTE chksum;
WORD name2[6];
WORD clu;
WORD name3[2];
}LONG_NAME_ENT, *PLONG_NAME_ENT;
typedef struct{
BYTE name[8];
BYTE ext[3];
BYTE attr;
BYTE rsv;
BYTE crtTimeTenth;
WORD crtTime;
WORD crtDate;
WORD acsData;
WORD fstCluHi;
WORD wrtTime;
WORD wrtDate;
WORD fstCluLo;
UINT32 length;
}FAT32_DIR_ENT, *PFAT32_DIR_ENT;
typedef struct{
BYTE name[8];
BYTE ext[3];
BYTE attr;
BYTE rsv[10];
WORD chgTime;
WORD chgDate;
WORD fstClu;
UINT32 length;
}FAT16_DIR_ENT, *PFAT16_DIR_ENT;
#pragma pack()
class FatMaster
{
public:
FatMaster() {}
~FatMaster() {}
BOOL WriteTags(const char* fileName, char* pTags, PUINT32 tagsNum);
BOOL ReadTags(const char* fileName, char** ppTags, PUINT32 tagsNum);
BOOL WriteFATFile(const char* fileName, char* pBuffer, PUINT32 size);
BOOL ReadFATFile(const char* fileName, char** ppBuffer, PUINT32 size);
private:
BOOL GetBPBofDisk(HANDLE hDev);
BOOL GetDiskName(char** ppFilePath, char* diskName);
BOOL GetFileEntry(HANDLE hDisk, char *pFilePath, PFILEENTINFO pFileEntInfo);
INT32 GetTopDirName(char** ppPath, char* pDirName);
BOOL SearchRootFileEnt(HANDLE hDisk, UINT32 startSecNum, char* pName, PFILEENTINFO pFileEntInfo);
BOOL SearchFileEntByName(HANDLE hDisk, UINT32 startSecNum, char* pName, PFILEENTINFO pFileEntInfo);
BOOL MatchSNameWithSEnt(FILE_NAME* pName, PFAT32_DIR_ENT pdirEnt);
BOOL MatchLNameWithSEnt(FILE_NAME* pName, PFAT32_DIR_ENT pdirEnt);
BOOL MatchLNameWithLEnt(char* pName, UINT32 pos, PBYTE pCur, PBYTE pLst);
BOOL WriteTagsIn( PFILEENTINFO pfileEntInfo, char* pTags, PUINT32 tagsNum);
BOOL ReadTagsOut( PFILEENTINFO pfileEntInfo, char** ppTags, PUINT32 tagsNum);
BOOL LocateFileLastSec( PFILEENTINFO pfileEntInfo, PUINT32 secNum);
BOOL FindNextCluSeq(PUINT32 pCluNum, int num);
BOOL ComCharAndWchar(char* pa, PWORD pb, UINT32 n);
HANDLE OpenDisk(char* diskName) {
//here should using diskName to replace the default one.
//pay attention with unicode transfer.
return CreateFile( _T("\\\\.\\E:"),
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
0,
NULL);
}
void CloseDisk(HANDLE hDev) {
CloseHandle(hDev);
}
private:
static const UINT32 SEC_SIZE = 512;
static const UINT32 DIR_ENT_SIZE = 32;
static const UINT32 FIR_CLU = 2;
static const UINT32 BUF_SIZE = 4096;
static const UINT32 CHAR_PER_LDIR = 13;
BYTE mBuf[BUF_SIZE*2]; //ping pang buffer
HANDLE hDisk;
BYTE diskName[8];
UINT32 secPerClu;
UINT32 rsvSecNum;
UINT32 numofFat;
UINT32 rootEntNum;
UINT32 secPerFat;
UINT32 maxSecNum;
BOOL bFat32;
UINT32 fstSecofRootDir;
UINT32 fstSecofData;
UINT32 fstSecofFat;
UINT32 maxCluNum;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -