You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
744 lines
20 KiB
744 lines
20 KiB
//----------------------------------------------------------------------
|
|
//
|
|
// .h file for the DSKMAINT DLL
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
//
|
|
// Prototype for the engine call back function
|
|
//
|
|
typedef LRESULT (CALLBACK* DSKUTILCBPROC)(UINT,LPARAM,LPARAM,LPARAM,LPARAM,LPARAM,LPARAM);
|
|
|
|
//
|
|
// Drive parameter structures
|
|
//
|
|
typedef struct tagUNKNOWNFSSTRUCT {
|
|
WORD Error; /* If available, error code */
|
|
} UNKNOWNFSSTRUCT;
|
|
|
|
typedef struct tagINVALIDFSSTRUCT {
|
|
WORD Error; /* If available, error code */
|
|
} INVALIDFSSTRUCT;
|
|
|
|
typedef struct tagFATFSSTRUCT {
|
|
BYTE MediaDesc; /* Media Descriptor byte */
|
|
BYTE FATNum; /* Number of FATs */
|
|
WORD FSSubType; /* allocation sub type */
|
|
DWORD BytPerSec; /* Bytes per sector */
|
|
DWORD SecPerClus; /* Sectors per cluster */
|
|
DWORD TotSec; /* Total number of sectors on drive */
|
|
DWORD TotSizeK; /* (TotSec * BytPerSec) / 1024 */
|
|
DWORD TotSizeM; /* (TotSec * BytPerSec) / 1024^2 */
|
|
DWORD FATSector; /* Sector number of first sector of first FAT and */
|
|
/* number of RESERVED/BOOT sectors */
|
|
DWORD FATSize; /* Size of one FAT in sectors */
|
|
DWORD DirEntSizeMin; /* Minimum size in bytes of a directory entry */
|
|
DWORD DirEntSizeMax; /* Maximum size in bytes of a directory entry */
|
|
DWORD RootDirSecCnt; /* number of sectors in root directory */
|
|
DWORD RootDirSector; /* Sector number of first root directory sector */
|
|
DWORD RootDirEntCntMin; /* Min number of entries in root directory */
|
|
DWORD RootDirEntCntMax; /* Max number of entries in root directory */
|
|
DWORD TotDataClus; /* total number of data clusters on drive */
|
|
DWORD DataSizeK; /* (TotDataClus*SecPerClus*BytePerSec) / 1024 */
|
|
DWORD DataSizeM; /* (TotDataClus*SecPerClus*BytePerSec)/1024^2 */
|
|
DWORD MaxClusNum; /* Maximum valid cluster number for drive */
|
|
DWORD FSStrucSzBytes; /* Buffer size req for ReadFileSysStruc API */
|
|
DWORD EOFClusVal; /* Clusters which contain values >= this */
|
|
/* value are EndOfFile clusters */
|
|
DWORD BadClusVal; /* "Lost" clusters which contain values == this */
|
|
/* value are BAD clusters */
|
|
DWORD FrstDataSector; /* Sector number of first sector of first data cluster */
|
|
DWORD FrstDataCluster; /* Cluster # who's first sector is FrstDataSector */
|
|
} FATFSSTRUCT;
|
|
|
|
//
|
|
// FSSubType
|
|
//
|
|
#define FSS_FAT12 1
|
|
#define FSS_FAT16 2
|
|
|
|
typedef struct tagDRVPARMSTRUCT {
|
|
UINT FileSysType;
|
|
UINT Drive;
|
|
union {
|
|
UNKNOWNFSSTRUCT unkFS;
|
|
INVALIDFSSTRUCT invFS;
|
|
FATFSSTRUCT FatFS;
|
|
} drvprm;
|
|
BYTE resrvd[80];
|
|
} DRVPARMSTRUCT;
|
|
typedef DRVPARMSTRUCT* PDRVPARMSTRUCT;
|
|
typedef DRVPARMSTRUCT NEAR* NPDRVPARMSTRUCT;
|
|
typedef DRVPARMSTRUCT FAR* LPDRVPARMSTRUCT;
|
|
|
|
//
|
|
// File system types
|
|
//
|
|
#define FS_INVALID 6000
|
|
#define FS_UNKNOWN 1
|
|
#define FS_ERROR 2
|
|
#define FS_FAT 3
|
|
#define FS_DDFAT 4
|
|
#define FS_LFNFAT 5
|
|
#define FS_DDLFNFAT 6
|
|
#define FS_SIZEERR 8000
|
|
|
|
//
|
|
// Modifyer flags for GetEngineDriveInfo returns
|
|
//
|
|
#define FS_CANRDWRTSEC 0x0001
|
|
#define FS_CANRDWRTFSS 0x0002
|
|
#define FS_CANFORMAT 0x0004
|
|
#define FS_ISFIXABLE 0x0008
|
|
#define FS_ISOPTIMIZABLE 0x0010
|
|
|
|
BOOL WINAPI DMaint_GetEngineDriveInfo(LPDWORD lpEngInfArray);
|
|
|
|
UINT WINAPI DMaint_GetFileSysParameters(UINT Drive, LPDRVPARMSTRUCT lpParmBuf, UINT nSize);
|
|
|
|
DWORD WINAPI DMaint_ReadSector(LPDRVPARMSTRUCT lpParmBuf, LPVOID lpSectorBuf, DWORD sSector, DWORD nSectors);
|
|
|
|
DWORD WINAPI DMaint_WriteSector(LPDRVPARMSTRUCT lpParmBuf, LPVOID lpSectorBuf, DWORD sSector, DWORD nSectors);
|
|
|
|
DWORD WINAPI DMaint_ReadFileSysStruc(LPDRVPARMSTRUCT lpParmBuf, LPVOID lpFSBuf, DWORD nSize);
|
|
|
|
DWORD WINAPI DMaint_WriteFileSysStruc(LPDRVPARMSTRUCT lpParmBuf, LPVOID lpFSBuf, DWORD FSFlags);
|
|
|
|
//
|
|
// Structures and defines for DMaint_GetFormatOptions DMaint_FormatDrive
|
|
// DMaint_UnFormatDrive
|
|
//
|
|
#define MAXNUMFMTS 16
|
|
#define MAXFMTNAMELEN 60
|
|
#define MAXFNAMELEN 256 // INCLUDES trailing NUL
|
|
#define DRVMAXPATHLEN (260 + 3) // INCLUDES trailing NUL, + 3 for "X:\"
|
|
|
|
typedef struct tagFMTINFOSTRUCT {
|
|
BYTE TotalPcntCmplt;
|
|
BYTE CurrOpRegion;
|
|
UINT Drive;
|
|
WORD FSFmtID;
|
|
WORD DefFSFmtID;
|
|
WORD PhysFmtID;
|
|
WORD DefPhysFmtID;
|
|
DWORD Options;
|
|
WORD FSFmtCnt;
|
|
WORD PhysFmtCnt;
|
|
BYTE VolLabel[MAXFNAMELEN];
|
|
LPARAM lParam1;
|
|
LPARAM lParam2;
|
|
BYTE reserved[40];
|
|
WORD FSFmtIDList[MAXNUMFMTS];
|
|
BYTE FSFmtNmList[MAXNUMFMTS][MAXFMTNAMELEN];
|
|
WORD PhysFmtIDList[MAXNUMFMTS];
|
|
BYTE PhysFmtNmList[MAXNUMFMTS][MAXFMTNAMELEN];
|
|
} FMTINFOSTRUCT;
|
|
typedef FMTINFOSTRUCT* PFMTINFOSTRUCT;
|
|
typedef FMTINFOSTRUCT NEAR* NPFMTINFOSTRUCT;
|
|
typedef FMTINFOSTRUCT FAR* LPFMTINFOSTRUCT;
|
|
|
|
typedef struct tagFATFMTREPORT {
|
|
DWORD TotDiskSzByte;
|
|
DWORD TotDiskSzK;
|
|
DWORD TotDiskSzM;
|
|
DWORD BadSzByte;
|
|
DWORD BadSzK;
|
|
DWORD BadSzM;
|
|
DWORD SysSzByte;
|
|
DWORD UsedSzByte;
|
|
DWORD UsedSzK;
|
|
DWORD UsedSzM;
|
|
DWORD AvailSzByte;
|
|
DWORD AvailSzK;
|
|
DWORD AvailSzM;
|
|
DWORD BytesPerClus;
|
|
DWORD TotDataClus;
|
|
DWORD SerialNumber;
|
|
} FATFMTREPORT;
|
|
typedef FATFMTREPORT* PFATFMTREPORT;
|
|
typedef FATFMTREPORT NEAR* NPFATFMTREPORT;
|
|
typedef FATFMTREPORT FAR* LPFATFMTREPORT;
|
|
|
|
//
|
|
// Error values and bits
|
|
//
|
|
#define NOERROR 0 // This MUST be 0!
|
|
#define OPCANCEL 1
|
|
#define ERR_NOTSUPPORTED 2
|
|
#define ERR_NOTFULLSUPP 3
|
|
#define NOFORMAT 0x0001
|
|
#define NOUNFORMAT 0x0002
|
|
#define MKSYSONLY 0x0004
|
|
#define FSONLY 0x0008
|
|
#define ERR_ISSYSDRIVE 4
|
|
#define ISWINDRV 0x0001
|
|
#define ISPAGINGDRV 0x0002
|
|
#define ERR_NONFATAL 5
|
|
#define ERR_FATAL 6
|
|
// RETRY 0x0001
|
|
// RECOV 0x0002
|
|
#define ERRTOS 0x0004
|
|
#define ERRNOOS 0x0008
|
|
#define ERRVOLLABEL 0x0010
|
|
#define ERRFBOOT 0x0020
|
|
#define ERRROOTD 0x0040
|
|
#define ERROSAREA 0x0080
|
|
#define ERRDATA 0x0100
|
|
#define ERRMBR 0x0200
|
|
#define ERRFAT 0x0400
|
|
#define ERRCVFHD 0x0800
|
|
|
|
#define ERR_OSNOTFOUND 7
|
|
#define ERR_OSERR 8
|
|
#define ERR_INSUFMEM 9
|
|
#define ERR_LOCKVIOLATION 10
|
|
#define ERR_LOCKREQUIRED 11
|
|
#define ERR_FSACTIVE 12
|
|
#define ERR_BADOPTIONS 13
|
|
#define ERR_BADSTART 14
|
|
#define ERR_BADEND 15
|
|
#define ERR_BADXADDR 16
|
|
#define ERR_NOTWRITABLE 17
|
|
#define ERR_SZERR 18
|
|
#define ERR_FSERR 19
|
|
#define FATCLUSINVALID 0x0001
|
|
#define FATSECTORSBADS 0x0002
|
|
#define ERR_BADFORMAT 20
|
|
#define FATCLUSOVERFLOW 0x0004
|
|
#define FATSECTORSBADH 0x0008
|
|
#define ERR_FSCORRECTED 21
|
|
#define ERR_FSUNCORRECTED 22
|
|
#define ERR_EXCLVIOLATION 23
|
|
// FATERRMXPLEN 29
|
|
|
|
//
|
|
// sub-operation codes
|
|
//
|
|
#define FOP_INIT 1
|
|
#define FOP_LOWFMT 2
|
|
#define FOP_VERIFY 3
|
|
#define FOP_FSFMT 4
|
|
#define FOP_TSYS 5
|
|
#define FOP_GETLABEL 6
|
|
#define FOP_SEARCH 7
|
|
#define FOP_RESTORE 8
|
|
#define FOP_SHTDOWN 9
|
|
#define FOP_FAT 10
|
|
#define FOP_DIR 11
|
|
#define FOP_FILDIR 12
|
|
#define FOP_LOSTCLUS 13
|
|
#define FSOP_INIT 14
|
|
#define FSOP_SETUNMOV 15
|
|
#define FSOP_SYSTEM 16
|
|
#define FSOP_DATA 17
|
|
#define FOP_DDHEAD 18
|
|
#define FOP_DDSTRUC 19
|
|
#define FOP_DDFAT 20
|
|
#define FOP_DDSIG 21
|
|
#define FOP_DDBOOT 22
|
|
|
|
//
|
|
// WriteFileSysStruc options
|
|
//
|
|
#define FATNOPACKINPLACE 0x00010000L
|
|
#define FATSTOPONERR 0x00020000L
|
|
|
|
//
|
|
// Format options
|
|
//
|
|
#define FD_LOWLEV 0x00000001L
|
|
#define FD_LOWLEVONLY 0x00000002L
|
|
#define FD_VERIFY 0x00000004L
|
|
#define FD_FSONLY 0x00000008L
|
|
#define FD_UNFORMAT 0x00000010L
|
|
#define FD_NOUNFORMAT 0x00000020L
|
|
#define FD_PHYSONLY 0x00000040L
|
|
#define FD_BOOT 0x00000080L
|
|
#define FD_BOOTONLY 0x00000100L
|
|
#define FD_VOLLABEL 0x00000200L
|
|
#define FD_NOVOLLABEL 0x00000400L
|
|
#define FD_ISVOLLABEL 0x00000800L
|
|
#define FD_GETCONFIRM 0x00001000L
|
|
#define FD_ISREM 0x00002000L
|
|
|
|
#define FDFAT_SETCLUS 0x80000000L
|
|
#define FDFAT_SETROOTSZ 0x40000000L
|
|
|
|
//
|
|
// Defines for call back messages
|
|
//
|
|
#define DU_INITENGINE 0x0401
|
|
#define DU_ENGINESTART 0x0402
|
|
#define DU_ERRORDETECTED 0x0403
|
|
#define DU_ERRORCORRECTED 0x0404
|
|
#define DU_OPUPDATE 0x0405
|
|
#define DU_READ 0x0406
|
|
#define DU_WRITE 0x0407
|
|
#define DU_OPCOMPLETE 0x0408
|
|
#define DU_YIELD 0x0409
|
|
#define DU_ENGINERESTART 0x040A
|
|
|
|
#define DU_EXTENSION_FIRST 0x2000
|
|
#define DU_EXTENSION_LAST 0x2FFF
|
|
|
|
// Following errors are also Bits, rest are just values
|
|
// ERRFAT 0x0400
|
|
// ERRTOS 0x0004
|
|
// ERRNOOS 0x0008
|
|
// ERRVOLLABEL 0x0010
|
|
// ERRFBOOT 0x0020
|
|
// ERRROOTD 0x0040
|
|
// ERROSAREA 0x0080
|
|
// ERRDATA 0x0100
|
|
// ERRMBR 0x0200
|
|
// ERRCVFHD 0x0800
|
|
#define ERRNOUFOR 3
|
|
// ERRTOS 4
|
|
#define ERRBADUFOR 5
|
|
#define ERRDSKWRT 6
|
|
#define ERRINVFMT 7
|
|
// ERRNOOS 8
|
|
#define ERRNOQUICK 9
|
|
#define READERROR 10
|
|
#define WRITEERROR 11
|
|
#define FATERRMISMAT 12
|
|
#define FATERRLSTCLUS 13
|
|
#define FATERRXLNK 14
|
|
#define ERRXLNKDIR 0x0001
|
|
#define ERRCANTDEL 0x8000
|
|
#define FATERRFILE 15
|
|
#define ERRINVLFN 0x0001
|
|
#define ERRINVNM 0x0002
|
|
#define ERRSIZE 0x0004
|
|
#define ERRDTTM1 0x0008
|
|
#define ERRDTTM2 0x0010
|
|
#define ERRDTTM3 0x0020
|
|
#define ERRLFNSTR 0x0040
|
|
#define ERRDEVNM 0x0080
|
|
#define ERRLFNLEN 0x0100
|
|
// ERRCANTDEL 0x8000
|
|
// ERRVOLLABEL 16
|
|
#define FATERRDIR 17
|
|
#define DBUFAPP 0x0001
|
|
#define ERRBAD 0x0002
|
|
#define ERRDOTS 0x0004
|
|
#define ERRPNOTD 0x0008
|
|
#define ERRLFNSRT 0x0010
|
|
#define ERRZRLEN 0x0020
|
|
#define ERRLFNLST 0x0040
|
|
#define ERRLOSTFILE 0x0080
|
|
#define ERRDUPNM 0x0100
|
|
// ERRCANTDEL 0x8000
|
|
#define FATERRBOOT 18
|
|
#define ERRSIG1 0x0004
|
|
#define ERRSIG2 0x0008
|
|
#define ERROEMVER 0x0010
|
|
#define ERRBPB 0x0020
|
|
#define ERRINVPRT 0x0040
|
|
#define ERRINCPRT 0x0080
|
|
// ERRMBR 0x0100
|
|
#define FULLCORR 19
|
|
#define NOCORR 20
|
|
#define PCORROK 21
|
|
#define PCORRBAD 22
|
|
#define APPFIX 0x0001
|
|
#define CANTMARK APPFIX
|
|
#define DISKERR 0x0002
|
|
#define NOMEM 0x0004
|
|
#define FILCRT 0x0008
|
|
#define FILCOLL 0x0010
|
|
#define CLUSALLO 0x0020
|
|
#define UNEXP 0x0040
|
|
#define DIRCRT 0x0080
|
|
#define CANTFIX 0x0100
|
|
#define FATERRRESVAL 23
|
|
#define FATERRCIRCC 24
|
|
// ERRCANTDEL 0x8000
|
|
#define FATERRINVCLUS 25
|
|
#define ERRINVC 0x0001
|
|
#define ERRINVFC 0x0002
|
|
// ERRCANTDEL 0x8000
|
|
#define FATERRCDLIMIT 26
|
|
#define ERRDLNML 0x0001
|
|
#define ERRDSNML 0x0002
|
|
// ERRCANTDEL 0x8000
|
|
#define FATERRVOLLAB 27
|
|
#define ISFRST 0x0001
|
|
#define MEMORYERROR 28
|
|
// RETRY 0x0001
|
|
// RECOV 0x0002
|
|
#define GLBMEM 0x0004
|
|
#define LOCMEM 0x0008
|
|
#define FATERRMXPLEN 29
|
|
// ERRINVLFN 0x0001
|
|
// ERRCANTDEL 0x8000
|
|
#define ERRISBAD 30
|
|
#define ERRISNTBAD 31
|
|
// ERRFBOOT 32
|
|
// RETRY 0x0001
|
|
// RECOV 0x0002
|
|
// GLBMEM 0x0004
|
|
// LOCMEM 0x0008
|
|
// ERRFBOOT 0x0020
|
|
// ERRROOTD 0x0040
|
|
// ERRDATA 0x0100
|
|
// ERRFAT 0x0400
|
|
#define RDFAIL 0x4000
|
|
#define WRTFAIL 0x8000
|
|
#define ERRNOFILE 33
|
|
#define ERRLOCKV 34
|
|
// RETRY 0x0001
|
|
#define DDERRSIZE1 35
|
|
#define DDERRFRAG 36
|
|
#define DDERRALIGN 37
|
|
#define DDERRSIG 38
|
|
// RETRY 0x0001
|
|
// RECOV 0x0002
|
|
// ERRSIG1 0x0004
|
|
// ERRSIG2 0x0008
|
|
#define DDERRBOOT 39
|
|
#define DDERRSIZE2 40
|
|
#define DDERRCVFNM 41
|
|
// RETRY 0x0001
|
|
// RECOV 0x0002
|
|
#define CHNGTONEW 0x0004
|
|
#define DDERRMDBPB 42
|
|
#define DDERRMDFAT 43
|
|
// RETRY 0x0001
|
|
// RECOV 0x0002
|
|
#define GTMXCLUS 0x0004
|
|
#define INVCHEAP 0x0008
|
|
#define DDERRLSTSQZ 44
|
|
#define DDERRXLSQZ 45
|
|
// RETRY 0x0001
|
|
// RECOV 0x0002
|
|
#define DUPFILE 0x0004
|
|
#define LOSTSQZ 0x0008
|
|
// ERRCANTDEL 0x8000
|
|
#define DDERRUNSUP 46
|
|
#define ISBETA 0x0001
|
|
#define ISSUPER 0x0002
|
|
// ERRROOTD 64
|
|
// ERROSAREA 128
|
|
// ERRDATA 256
|
|
// ERRMBR 512
|
|
// 1024
|
|
// ERRCVFHD 2048
|
|
|
|
|
|
#define RETRY 0x0001
|
|
#define RECOV 0x0002
|
|
#define BADCHRS 0x0004
|
|
#define BADSEC 0x0008
|
|
#define DISKFULL 0x0010
|
|
#define OSFILESPACE 0x0020
|
|
#define WRTPROT 0x0040
|
|
#define NOTRDY 0x0080
|
|
// The following must not conflict with RETRY and RECOV only
|
|
#define MBR 0x0010
|
|
#define FAT1 0x0020
|
|
#define FAT2 0x0040
|
|
#define FATN 0x0080
|
|
#define FATMIX 0x0100
|
|
#define ROOTD 0x0200
|
|
#define DIR 0x0400
|
|
#define DATA 0x0800
|
|
|
|
#define ERETCAN2 0
|
|
#define ERETAFIX 0
|
|
#define ERETIGN2 0
|
|
#define ERETIGN 1
|
|
#define ERETRETRY 2
|
|
#define ERETCAN 3
|
|
#define ERETWFAT 4
|
|
#define ERETAPPFIX 5
|
|
#define ERETFREE 6
|
|
#define ERETMKFILS 7
|
|
#define ERETDELALL 8
|
|
#define ERETMKCPY 9
|
|
#define ERETSVONED 10
|
|
#define ERETTNCALL 11
|
|
#define ERETSVONET 12
|
|
#define ERETWRTFIX 13
|
|
#define ERETDELDIR 14
|
|
#define ERETMVDIR 15
|
|
#define ERETMVFIL ERETMVDIR
|
|
#define ERETRDDIR 16
|
|
#define ERETMRKBAD 17
|
|
|
|
// Bit defines specific to DU_ENGINERESTART for DMaint_FixDrive
|
|
#define OTHERWRT 0x0001
|
|
#define LOSTDIR 0x0002
|
|
#define XLNKSQZ 0x0004
|
|
// LOSTSQZ 0x0008
|
|
|
|
DWORD WINAPI DMaint_GetFormatOptions(UINT Drive, LPFMTINFOSTRUCT lpFmtInfoBuf, UINT nSize);
|
|
|
|
DWORD WINAPI DMaint_FormatDrive(LPFMTINFOSTRUCT lpFmtInfoBuf, DWORD Options, DSKUTILCBPROC lpfnCallBack, LPARAM lRefData);
|
|
|
|
DWORD WINAPI DMaint_UnFormatDrive(LPFMTINFOSTRUCT lpFmtInfoBuf, DWORD Options, DSKUTILCBPROC lpfnCallBack, LPARAM lRefData);
|
|
|
|
//
|
|
// Structures and defines for DMaint_GetFixOptions and DMaint_FixDrive
|
|
//
|
|
typedef struct tagFIXFATDISP {
|
|
BYTE TotalPcntCmplt;
|
|
BYTE CurrOpRegion;
|
|
WORD Flags;
|
|
WORD BitArrSz;
|
|
DWORD SysAreaCnt;
|
|
LPDRVPARMSTRUCT lpParmBuf;
|
|
DWORD Options;
|
|
LPDWORD lpVisitBitArray;
|
|
LPDWORD lpDirBitArray;
|
|
LPDWORD lpAllocedBitArray;
|
|
LPDWORD lpBadBitArray;
|
|
LPDWORD lpLostBitArray;
|
|
LPDWORD lpUnMovBitArray;
|
|
DWORD SerialNumber;
|
|
BYTE VolLabel[MAXFNAMELEN];
|
|
WORD VolLabelDate;
|
|
WORD VolLabelTime;
|
|
BYTE reserved[40];
|
|
} FIXFATDISP;
|
|
typedef FIXFATDISP* PFIXFATDISP;
|
|
typedef FIXFATDISP NEAR* NPFIXFATDISP;
|
|
typedef FIXFATDISP FAR* LPFIXFATDISP;
|
|
|
|
typedef struct tagFATFIXREPORT {
|
|
DWORD TotDiskSzByte;
|
|
DWORD TotDiskSzK;
|
|
DWORD TotDiskSzM;
|
|
DWORD BadDataClusCnt;
|
|
DWORD BadSzDataByte;
|
|
DWORD BadSzDataK;
|
|
DWORD BadSzDataM;
|
|
DWORD TotBadSecCntSys;
|
|
DWORD BadSecCntResvd;
|
|
DWORD BadSecCntFAT;
|
|
DWORD BadSecCntRootDir;
|
|
DWORD HidFileCnt;
|
|
DWORD HidSzByte;
|
|
DWORD HidSzK;
|
|
DWORD HidSzM;
|
|
DWORD DirFileCnt;
|
|
DWORD DirSzByte;
|
|
DWORD DirSzK;
|
|
DWORD DirSzM;
|
|
DWORD UserFileCnt;
|
|
DWORD UserSzByte;
|
|
DWORD UserSzK;
|
|
DWORD UserSzM;
|
|
DWORD AvailSzByte;
|
|
DWORD AvailSzK;
|
|
DWORD AvailSzM;
|
|
DWORD BytesPerClus;
|
|
DWORD TotDataClus;
|
|
DWORD AvailDataClus;
|
|
DWORD BadClusRelocFailCnt;
|
|
DWORD BadClusUnMovFailCnt;
|
|
DWORD BadDataClusNew;
|
|
DWORD BadDataClusConf;
|
|
DWORD BadDataClusRecl;
|
|
WORD Flags;
|
|
} FATFIXREPORT;
|
|
typedef FATFIXREPORT* PFATFIXREPORT;
|
|
typedef FATFIXREPORT NEAR* NPFATFIXREPORT;
|
|
typedef FATFIXREPORT FAR* LPFATFIXREPORT;
|
|
|
|
// Defines for Flags
|
|
#define REPLACEDISK 0x0001
|
|
#define REFORMAT 0x0002
|
|
#define HOSTFILE 0x0004
|
|
#define SWAPFILE 0x0008
|
|
#define OSFILE 0x0010
|
|
#define SPCLFILE 0x0020
|
|
|
|
typedef struct tagFATLOSTCLUSERR {
|
|
DWORD LostClusCnt;
|
|
DWORD LostClusChainCnt;
|
|
DWORD RootDirFreeEntCnt;
|
|
WORD FileFirstDigits;
|
|
WORD FileLastDigits;
|
|
LPSTR LostClusSaveDir;
|
|
WORD DirRecvCnt;
|
|
WORD LstAsFilesInDirs;
|
|
} FATLOSTCLUSERR;
|
|
typedef FATLOSTCLUSERR* PFATLOSTCLUSERR;
|
|
typedef FATLOSTCLUSERR NEAR* NPFATLOSTCLUSERR;
|
|
typedef FATLOSTCLUSERR FAR* LPFATLOSTCLUSERR;
|
|
|
|
typedef struct tagXLNKFILE {
|
|
DWORD FileFirstCluster;
|
|
DWORD LastSecNumNotXLnked;
|
|
LPSTR FileName;
|
|
DWORD reserved;
|
|
BYTE FileAttributes;
|
|
BYTE Flags;
|
|
} XLNKFILE;
|
|
typedef XLNKFILE* PXLNKFILE;
|
|
typedef XLNKFILE NEAR* NPXLNKFILE;
|
|
typedef XLNKFILE FAR* LPXLNKFILE;
|
|
|
|
//
|
|
// Flags bits
|
|
//
|
|
#define XFF_ISSWAP 0x01
|
|
#define XFF_ISCVF 0x02
|
|
#define XFF_ISSYSDIR 0x04
|
|
#define XFF_ISSYSFILE 0x08
|
|
|
|
typedef struct tagFATXLNKERR {
|
|
DWORD XLnkCluster;
|
|
DWORD XLnkFrstSectorNum;
|
|
DWORD XLnkClusCnt;
|
|
WORD XLnkFileCnt;
|
|
XLNKFILE XLnkList[];
|
|
} FATXLNKERR;
|
|
typedef FATXLNKERR* PFATXLNKERR;
|
|
typedef FATXLNKERR NEAR* NPFATXLNKERR;
|
|
typedef FATXLNKERR FAR* LPFATXLNKERR;
|
|
|
|
//
|
|
// Following is provided because sizeof(FATXLNKERR) is illegal. This
|
|
// define is the size in bytes of FATXLNKERR up to XLnkList (the size
|
|
// without the dynamic part).
|
|
//
|
|
#define BASEFATXLNKERRSZ (4+4+4+2)
|
|
|
|
typedef struct tagDDXLNKERR {
|
|
LPDWORD DDXLnkClusterList;
|
|
DWORD DDXLnkClusCnt;
|
|
WORD DDXLnkFileCnt;
|
|
LPXLNKFILE DDXLnkList;
|
|
} DDXLNKERR;
|
|
typedef DDXLNKERR* PDDXLNKERR;
|
|
typedef DDXLNKERR NEAR* NPDDXLNKERR;
|
|
typedef DDXLNKERR FAR* LPDDXLNKERR;
|
|
|
|
|
|
typedef struct tagFATFILEERR {
|
|
LPSTR lpDirName;
|
|
LPSTR lpLFNFileName;
|
|
LPSTR lpShortFileName;
|
|
DWORD ClusterFileSize;
|
|
DWORD FileFirstCluster;
|
|
DWORD DirFirstCluster;
|
|
DWORD DirSectorIndex;
|
|
DWORD DirEntryIndex;
|
|
DWORD DirEntCnt;
|
|
LPVOID lpFileDirEnts;
|
|
LPARAM lParam1;
|
|
LPARAM lParam2;
|
|
LPARAM lParam3;
|
|
DWORD ExtAtt;
|
|
BYTE FileAttribute;
|
|
} FATFILEERR;
|
|
typedef FATFILEERR* PFATFILEERR;
|
|
typedef FATFILEERR NEAR* NPFATFILEERR;
|
|
typedef FATFILEERR FAR* LPFATFILEERR;
|
|
|
|
typedef struct tagFATDIRERR {
|
|
LPSTR lpDirName;
|
|
DWORD DirFirstCluster;
|
|
DWORD DirFirstSectorNum;
|
|
DWORD DirReadBufSizeBytes;
|
|
LPVOID lpDirReadBuf;
|
|
LPARAM lParam1;
|
|
LPARAM lParam2;
|
|
LPARAM lParam3;
|
|
} FATDIRERR;
|
|
typedef FATDIRERR* PFATDIRERR;
|
|
typedef FATDIRERR NEAR* NPFATDIRERR;
|
|
typedef FATDIRERR FAR* LPFATDIRERR;
|
|
|
|
typedef struct tagFATBOOTERR {
|
|
DWORD BootSectorNum;
|
|
DWORD BootBufSizeSectors;
|
|
LPVOID lpBootBuf;
|
|
LPARAM lParam1;
|
|
LPARAM lParam2;
|
|
LPARAM lParam3;
|
|
} FATBOOTERR;
|
|
typedef FATBOOTERR* PFATBOOTERR;
|
|
typedef FATBOOTERR NEAR* NPFATBOOTERR;
|
|
typedef FATBOOTERR FAR* LPFATBOOTERR;
|
|
|
|
//
|
|
// Max number of conflicting files for LFNSORT error
|
|
//
|
|
#define MAXLFNSORT 8
|
|
//
|
|
// Max number of LFN directory entry extensions
|
|
//
|
|
#define MAXLFNEXT 10
|
|
|
|
typedef struct tagLFNSORT {
|
|
DWORD FileCnt;
|
|
DWORD Flags;
|
|
LPSTR lpShortNames[MAXLFNSORT];
|
|
LPSTR lpLFNResolve[MAXLFNEXT][MAXLFNSORT];
|
|
LPSTR lpLFNExtName0[MAXLFNSORT];
|
|
LPSTR lpLFNExtName1[MAXLFNSORT];
|
|
LPSTR lpLFNExtName2[MAXLFNSORT];
|
|
LPSTR lpLFNExtName3[MAXLFNSORT];
|
|
LPSTR lpLFNExtName4[MAXLFNSORT];
|
|
LPSTR lpLFNExtName5[MAXLFNSORT];
|
|
LPSTR lpLFNExtName6[MAXLFNSORT];
|
|
LPSTR lpLFNExtName7[MAXLFNSORT];
|
|
LPSTR lpLFNExtName8[MAXLFNSORT];
|
|
LPSTR lpLFNExtName9[MAXLFNSORT];
|
|
} LFNSORT;
|
|
typedef LFNSORT* PLFNSORT;
|
|
typedef LFNSORT NEAR* NPLFNSORT;
|
|
typedef LFNSORT FAR* LPLFNSORT;
|
|
|
|
//
|
|
// DMaint_GetFixOptions flags
|
|
//
|
|
#define FSINVALID 0x00000001L
|
|
#define FSDISALLOWED 0x00000002L
|
|
#define FSISACTIVE 0x00000004L
|
|
#define FSALWAYSACTIVE 0x00000008L
|
|
#define FSSFTEXCLUSIVE 0x00000010L
|
|
#define FSHRDEXCLUSIVE 0x00000020L
|
|
#define FSEXCLUSIVEREQ 0x00000040L
|
|
|
|
//
|
|
// DMaint_FixDrive options
|
|
//
|
|
#define FDO_AUTOFIX 0x00000001L
|
|
#define FDO_NOFIX 0x00000002L
|
|
#define FDO_LOWPRIORITY 0x00000004L
|
|
#define FDO_HRDEXCLUSIVE 0x00000008L
|
|
#define FDO_SFTEXCLUSIVE 0x00000010L
|
|
#define FDO_EXCLBLOCK 0x00000020L
|
|
#define FDO_ALREADYLOCKED 0x00000040L
|
|
#define FDOS_WRTTST 0x00000080L
|
|
#define FDOS_NOSRFANAL 0x00000100L
|
|
|
|
#define FDOFAT_LSTMKFILE 0x00010000L
|
|
#define FDOFAT_NOXLNKLIST 0x00020000L
|
|
#define FDOFAT_XLNKDEL 0x00040000L
|
|
#define FDOFAT_XLNKCPY 0x00080000L
|
|
#define FDOFAT_NOCHKDT 0x00100000L
|
|
#define FDOFAT_NOCHKNM 0x00200000L
|
|
#define FDOFAT_CHKNMMAP 0x00400000L
|
|
#define FDOFAT_INVDIRIGN 0x00800000L
|
|
#define FDOFAT_INVDIRDEL 0x01000000L
|
|
#define FDOFAT_CHKDUPNM 0x02000000L
|
|
#define FDOSFAT_NMHISSYS 0x04000000L
|
|
#define FDOSFAT_NOSYSTST 0x08000000L
|
|
#define FDOSFAT_NODATATST 0x10000000L
|
|
#define FDOFAT_MKOLDFS 0x20000000L
|
|
|
|
DWORD WINAPI DMaint_GetFixOptions(LPDRVPARMSTRUCT lpParmBuf);
|
|
|
|
DWORD WINAPI DMaint_FixDrive(LPDRVPARMSTRUCT lpParmBuf, DWORD Options, DSKUTILCBPROC lpfnCallBack, LPARAM lRefData);
|
|
|
|
//
|
|
// Structures and defines for DMaint_GetOptimizeOptions and DMaint_OptimizeDrive
|
|
//
|
|
DWORD WINAPI DMaint_GetOptimizeOptions(LPDRVPARMSTRUCT lpParmBuf);
|
|
|
|
DWORD WINAPI DMaint_OptimizeDrive(LPDRVPARMSTRUCT lpParmBuf);
|