Windows2000/private/windows/media/avi/inc.16/dskmaint.h
2020-09-30 17:12:32 +02:00

745 lines
22 KiB
C

// .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);