409 lines
12 KiB
C
409 lines
12 KiB
C
|
/***************************************************************************
|
||
|
**
|
||
|
** File: SetupKit.h
|
||
|
** Purpose: Toolkit types, defines, and prototypes.
|
||
|
** Notes:
|
||
|
**
|
||
|
****************************************************************************/
|
||
|
|
||
|
#ifndef SETUPKIT_H
|
||
|
#define SETUPKIT_H
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" { /* Assume C declarations for C++ */
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Calculates the number of bytes that a string occupies (not including
|
||
|
** the terminating zero character).
|
||
|
** Arguments:
|
||
|
** sz: string whose length is to be calculated.
|
||
|
** Returns:
|
||
|
** 0 if sz was NULL.
|
||
|
** The number of bytes from the beginning of the string to its
|
||
|
** terminating zero character.
|
||
|
*/
|
||
|
#define CbStrLen(sz) ((CB)lstrlen(sz))
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Checks if the string is empty
|
||
|
** Arguments:
|
||
|
** sz:
|
||
|
** Returns:
|
||
|
** 0 if sz was NULL.
|
||
|
** 1 otherwise
|
||
|
*/
|
||
|
#define FEmptySz(sz) ((BOOL)((sz) == szNull || *(sz) == chEos))
|
||
|
|
||
|
#define FValidSz(sz) (!FEmptySz(sz))
|
||
|
|
||
|
|
||
|
/*
|
||
|
* CHaracter Physical representation datatype
|
||
|
*/
|
||
|
typedef BYTE CHP; /* CHaracter Physical */
|
||
|
typedef CHP * PCHP; /* Ptr to CHaracter Physical */
|
||
|
typedef CB CCHP; /* Count of CHaracter Physical */
|
||
|
typedef CCHP * PCCHP; /* Ptr to Count of CHaracter Physical */
|
||
|
|
||
|
#define pchpNull ((PCHP)NULL)
|
||
|
#define pcchpNull ((PCCHP)NULL)
|
||
|
#define CbFromCchp(cchp) ((CB)(cchp))
|
||
|
|
||
|
|
||
|
/*
|
||
|
* CHaracter Logical representation datatype
|
||
|
*/
|
||
|
typedef CHP CHL; /* CHaracter Logical */
|
||
|
typedef CHL * PCHL; /* Ptr to CHaracter Logical */
|
||
|
typedef PCHL * PPCHL; /* Ptr to Ptr to CHaracter Logical */
|
||
|
typedef CB CCHL; /* Count of CHaracter Logical */
|
||
|
|
||
|
#define pchlNull ((PCHL)NULL)
|
||
|
#define ppchlNull ((PPCHL)NULL)
|
||
|
|
||
|
#define cchpFullPathMax ((CCHP)(_MAX_PATH))
|
||
|
|
||
|
#define cchGrpNameMax 30 /* right for win31, WfW, WinNT */
|
||
|
#ifdef OLD
|
||
|
#define cchGrpNameMax ((CB)(LOWORD(GetVersion()) == 0x0003 ? 24 : 29))
|
||
|
#endif /* OLD */
|
||
|
|
||
|
/*
|
||
|
* Maximum size block that can be allocated (bytes).
|
||
|
*/
|
||
|
#define cbAllocMax ((CB)65520)
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Path Verification Routines
|
||
|
*/
|
||
|
|
||
|
typedef UINT FPV; /* Flags for Path Validation */
|
||
|
|
||
|
#define fpvSub 0x0000 /* Must be subpath, cannot have Drive or UNC */
|
||
|
#define fpvUnc 0x0001 /* Validate UNC path, \\Node\share */
|
||
|
#define fpvDrive 0x0002 /* Validate Drive at start of path */
|
||
|
#define fpvFile 0x0004 /* Validate filename only, no subdirectories */
|
||
|
#define fpvDir 0x0010 /* Allow trailing directory separator */
|
||
|
#define fpvFat 0x0020 /* Restrict to only 8.3 FAT name, no LFNs */
|
||
|
#define fpvFull (fpvDrive | fpvUnc) /* Full path, with Drive or UNC */
|
||
|
#define fpvModule (fpvDrive | fpvUnc | fpvFile) /* Valid executable name */
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Checks the validity of a filepath or filename.
|
||
|
** Allowable filepath components are controlled by bit flags.
|
||
|
** Default behavior is to allow directories with filename.
|
||
|
** Leading backslash is not permitted in directory name.
|
||
|
** Arguments:
|
||
|
** szcPath: non-NULL string to validate
|
||
|
** fpvFlags: pathname options flags
|
||
|
** Returns:
|
||
|
** fTrue if szcPath is valid for requested type
|
||
|
** fFalse if invalid path
|
||
|
***************************************************************************/
|
||
|
|
||
|
BOOL PUBLIC FValidFilePath ( SZC szcPath, FPV fpvFlags );
|
||
|
|
||
|
#define FValidDir(szcDir) FValidFilePath(szcDir, fpvFull | fpvDir)
|
||
|
#define FValidPath(szcPath) FValidFilePath(szcPath, fpvFull)
|
||
|
#define FValidSubDir(szc) FValidFilePath(szc, fpvDir)
|
||
|
#define FValidSubPath(szc) FValidFilePath(szc, fpvSub)
|
||
|
#define FValidFATSubPath(szc) FValidFilePath(szc, fpvFat)
|
||
|
#define FValidFileName(szc) FValidFilePath(szc, fpvFile)
|
||
|
#define FValidDllFileName(szc) FValidFilePath(szc, fpvModule)
|
||
|
#define FValidDstDir(szcDir) FValidFilePath(szcDir, fpvDrive | fpvDir)
|
||
|
|
||
|
|
||
|
#define FValidInfSect(cszcSect) \
|
||
|
(FValidSz(cszcSect) && !strchr(cszcSect, ']'))
|
||
|
|
||
|
#define FValidIniFile(szcFile) \
|
||
|
(FValidPath(szcFile) \
|
||
|
|| CrcStringCompareI(szcFile, "WIN.INI") == crcEqual)
|
||
|
|
||
|
|
||
|
/* String manipulation routines */
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Advances a string pointer to the beginning of the next valid
|
||
|
** character. This may include skipping a double-byte character.
|
||
|
** Arguments:
|
||
|
** sz: the string pointer to advance. It can be NULL or empty, or else
|
||
|
** it must point at the beginning of a valid character.
|
||
|
** Returns:
|
||
|
** NULL if sz was NULL.
|
||
|
** sz unchanged if it was an empty string (*sz == '\0').
|
||
|
** sz advanced past the current character and to the beginning of the
|
||
|
** next valid character.
|
||
|
*/
|
||
|
#define SzNextChar(sz) AnsiNext(sz)
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Retreats a string pointer to the beginning of the previous valid
|
||
|
** character. This may include skipping a double-byte character.
|
||
|
** Arguments:
|
||
|
** szStart: string pointer to the beginning of a valid character that
|
||
|
** equals or preceeds the character szCur.
|
||
|
** szCur: string pointer to retreat. It can be NULL or empty, or
|
||
|
** can point to any byte in a valid character.
|
||
|
** Returns:
|
||
|
** NULL if szCur was NULL.
|
||
|
** sz unchanged if szStart was NULL or if szCur equaled szStart.
|
||
|
** sz retreated past the current character and to the beginning of the
|
||
|
** previous valid character.
|
||
|
*/
|
||
|
#define SzPrevChar(szStart, szCur) AnsiPrev(szStart, szCur)
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Copies a string from one buffer to another.
|
||
|
** Arguments:
|
||
|
** szDst: string pointer to destination buffer. This can be NULL or
|
||
|
** else it must contain enough storage to copy szSrc with its
|
||
|
** terminating zero character.
|
||
|
** szSrc: string pointer to source buffer. This can be NULL or else
|
||
|
** must point to a zero terminated string (can be empty).
|
||
|
** Returns:
|
||
|
** NULL if either szDst or szSrc is NULL.
|
||
|
** szDst signifying the operation succeeded.
|
||
|
*/
|
||
|
#define SzStrCopy(szDst, szSrc) lstrcpy(szDst, szSrc)
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Appends a string from one buffer to another.
|
||
|
** Arguments:
|
||
|
** szDst: string pointer to destination buffer. This can be NULL or
|
||
|
** else it must contain a zero terminated string (can be empty)
|
||
|
** and enough storage to append szSrc with its terminating zero
|
||
|
** character.
|
||
|
** szSrc: string pointer to source buffer. This can be NULL or else
|
||
|
** must point to a zero terminated string (can be empty).
|
||
|
** Returns:
|
||
|
** NULL if either szDst or szSrc is NULL.
|
||
|
** szDst signifying the operation succeeded.
|
||
|
*/
|
||
|
#define SzStrCat(szDst, szSrc) lstrcat(szDst, szSrc)
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Converts a zero-terminated string to upper case.
|
||
|
** Arguments:
|
||
|
** sz: the string to convert to upper case. sz must be non-NULL though
|
||
|
** it can be empty.
|
||
|
** Returns:
|
||
|
** A pointer to the converted string.
|
||
|
*/
|
||
|
/* REVIEW: define SzStrUpper(sz) (sz) */
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Converts a zero-terminated string to lower case.
|
||
|
** Arguments:
|
||
|
** sz: the string to convert to lower case. sz must be non-NULL though
|
||
|
** it can be empty.
|
||
|
** Returns:
|
||
|
** A pointer to the converted string.
|
||
|
*/
|
||
|
#define SzStrLower(sz) AnsiLower(sz)
|
||
|
|
||
|
|
||
|
/* Memory Handling routines */
|
||
|
extern PB WINAPI PbAlloc ( CB cb );
|
||
|
extern BOOL WINAPI FFree ( PB pb, CB cb );
|
||
|
extern PB WINAPI PbRealloc ( PB pb, CB cbNew, CB cbOld );
|
||
|
|
||
|
#define FHandleOOM() HandleOOM()
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Frees the memory used by an sz. This assumes the terminating
|
||
|
** zero occupies the final byte of the allocated buffer.
|
||
|
** Arguments:
|
||
|
** sz: the buffer to free. this must be non-NULL though it can point
|
||
|
** at an empty string.
|
||
|
** Returns:
|
||
|
** fTrue if the Free() operation succeeds.
|
||
|
** fFalse if the Free() operation fails.
|
||
|
*/
|
||
|
#define FFreeSz(sz) FFree((PB)(sz), CbStrLen(sz)+1)
|
||
|
|
||
|
|
||
|
/*
|
||
|
** Purpose:
|
||
|
** Shrinks a buffer to exactly fit a string.
|
||
|
** Arguments:
|
||
|
** sz: the string for which the buffer should shrink to. sz must be
|
||
|
** non-NULL though it can be empty.
|
||
|
** cb: the size in bytes for the buffer that was originally allocated.
|
||
|
** cb must be greater than or equal to CbStrLen(sz) + 1.
|
||
|
** Returns:
|
||
|
** A pointer to the original string if the Realloc() operation succeeds.
|
||
|
** NULL if the Realloc() operation fails.
|
||
|
*/
|
||
|
#define SzReallocSz(sz, cb) (SZ)(PbRealloc((PB)(sz), (CbStrLen(sz)+1), cb))
|
||
|
|
||
|
|
||
|
/*
|
||
|
* File Handle structure
|
||
|
* Fields:
|
||
|
* hFile: Win32 file handle.
|
||
|
* iDosfh: Only used to avoid changing old source code, same as hFile
|
||
|
* szPath: Full path used when the file was opened.
|
||
|
*/
|
||
|
typedef union _fh /* File Handle structure */
|
||
|
{
|
||
|
INT iDosfh; /* temp until code converted */
|
||
|
HANDLE hFile;
|
||
|
} FH;
|
||
|
|
||
|
/*
|
||
|
* File Handle datatype
|
||
|
*/
|
||
|
typedef FH * PFH; /* Ptr to File Handle structure */
|
||
|
typedef PFH * PPFH; /* Ptr to Ptr to File Handle structure */
|
||
|
|
||
|
#define pfhNull ((PFH)NULL)
|
||
|
#define ppfhNull ((PPFH)NULL)
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Open File Mode datatype
|
||
|
*/
|
||
|
typedef UINT OFM; /* Open File Mode */
|
||
|
|
||
|
#define ofmExist ((OFM)OF_EXIST)
|
||
|
#define ofmRead ((OFM)OF_READ | OF_SHARE_DENY_WRITE)
|
||
|
#define ofmReadCompat ((OFM)OF_READ | OF_SHARE_COMPAT)
|
||
|
#define ofmWrite ((OFM)OF_WRITE | OF_SHARE_EXCLUSIVE)
|
||
|
#define ofmReadWrite ((OFM)OF_READWRITE | OF_SHARE_EXCLUSIVE)
|
||
|
#define ofmCreate ((OFM)OF_CREATE | OF_SHARE_EXCLUSIVE)
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Seek File Mode datatype
|
||
|
*/
|
||
|
typedef UINT SFM; /* Seek File Mode */
|
||
|
|
||
|
#define sfmSet ((SFM)FILE_BEGIN)
|
||
|
#define sfmCur ((SFM)FILE_CURRENT)
|
||
|
#define sfmEnd ((SFM)FILE_END)
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Long File Address datatype
|
||
|
*/
|
||
|
typedef unsigned long LFA; /* Long File Address */
|
||
|
|
||
|
#define lfaSeekError ((LFA)HFILE_ERROR)
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Expanded Error Return Code
|
||
|
*/
|
||
|
typedef unsigned int EERC; /* Expanded Error Return Code */
|
||
|
|
||
|
#define eercOkay ((EERC)0)
|
||
|
#define eercAbort ((EERC)1)
|
||
|
#define eercRetry ((EERC)2)
|
||
|
#define eercIgnore ((EERC)3)
|
||
|
|
||
|
|
||
|
/* File handling routines */
|
||
|
extern EERC WINAPI EercOpenFile ( PPFH ppfh, CSZC cszcFile, OFM ofm,
|
||
|
BOOL fVital );
|
||
|
extern BOOL WINAPI FFileExist ( CSZC cszcFile, OFM ofm );
|
||
|
extern BOOL WINAPI FCloseFile ( PFH pfh );
|
||
|
extern CB WINAPI CbReadFile ( PFH pfh, PB pbBuf, CB cbMax );
|
||
|
extern CB WINAPI CbWriteFile ( PFH pfh, PB pbBuf, CB cbMax );
|
||
|
extern LFA WINAPI LfaSeekFile ( PFH pfh, LONG l, SFM sfm );
|
||
|
extern BOOL WINAPI FChmodFile ( CSZC cszcFileName, INT wFlags, BOOL fVital );
|
||
|
extern SZC WINAPI DriveNumToRootPath( INT iDrive );
|
||
|
|
||
|
|
||
|
typedef unsigned int IDDT; /* Insert Disk Dialog Type */
|
||
|
#define iddtStandard ((IDDT)1)
|
||
|
#define iddtHddi ((IDDT)2)
|
||
|
#define iddtHddiMaint ((IDDT)3)
|
||
|
|
||
|
|
||
|
/* Media source file handling routines */
|
||
|
extern EERC WINAPI EercOpenSrcFile ( PPFH ppfh, UINT did, SZ szSrcDir,
|
||
|
SZ szFile, BOOL fWrite );
|
||
|
extern EERC WINAPI EercOpenSrcFileEx ( PPFH ppfh, UINT did, SZ szSrcDir,
|
||
|
SZ szFile, BOOL fWrite, BOOL fVital, IDDT iddt );
|
||
|
extern EERC WINAPI EercReadSrcFile ( PFH pfh, PB pbBuf, CB cbMax );
|
||
|
|
||
|
extern EERC WINAPI EercWriteSrcFile ( PFH pfh, PB pbBuf, CB cbMax );
|
||
|
|
||
|
extern BOOL WINAPI FCloseSrcFile( PFH pfh, BOOL fRdOnly );
|
||
|
|
||
|
extern EERC WINAPI EercFindHddiFloppy ( SZ szSrcDir, DWORD dwDrives,
|
||
|
PCH pchDrive, BOOL fVital, IDDT iddt );
|
||
|
|
||
|
/*
|
||
|
* SetErrorMode type
|
||
|
*/
|
||
|
typedef unsigned int SEM; /* SetErrorMode type */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Comparison Return Code datatype
|
||
|
*/
|
||
|
typedef INT CRC; /* Comparison Return Code */
|
||
|
|
||
|
#define crcError ((CRC)(-2))
|
||
|
#define crcEqual ((CRC) 0 )
|
||
|
#define crcFirstHigher ((CRC) 1 )
|
||
|
#define crcSecondHigher ((CRC)(-1))
|
||
|
|
||
|
extern SZ PUBLIC SzDupl ( CSZC cszc );
|
||
|
extern CRC WINAPI CrcStringCompare ( CSZC cszc1, CSZC cszc2 );
|
||
|
extern CRC WINAPI CrcStringCompareI ( CSZC cszc1, CSZC cszc2 );
|
||
|
extern SZ WINAPI SzLastChar ( CSZC cszc );
|
||
|
extern CB WINAPI CbStrCopyToBuffer ( PB pbBuf, CB cbMax, CSZC cszcSrc );
|
||
|
|
||
|
|
||
|
/*
|
||
|
* BindImage API, exported from MSSETUP.DLL, and/or IMAGEHLP.DLL
|
||
|
*/
|
||
|
|
||
|
#define IMAGEHELP_DLL "imagehlp.dll"
|
||
|
#define BINDIMAGE_PROC "BindImage"
|
||
|
typedef BOOL (WINAPI *PFNBindImage)( SZ szImage, SZ szDllPath, SZ szSymPath);
|
||
|
|
||
|
extern BOOL WINAPI BindImage( SZ szImage, SZ szDllPath, SZ szSymPath);
|
||
|
|
||
|
|
||
|
/*
|
||
|
* API to set Admin mode in toolkit DLL
|
||
|
*/
|
||
|
|
||
|
VOID WINAPI SetAdminMode ( VOID ); /* called only by ACMSETUP.EXE */
|
||
|
BOOL WINAPI IsAdminMode ( VOID );
|
||
|
|
||
|
|
||
|
/* Like FStampResource, but only reads the data into the buffer.
|
||
|
*/
|
||
|
BOOL WINAPI FReadResource ( SZ szFilePath, UINT uiResType, UINT uiResId,
|
||
|
SZ szData, CB cbData, BOOL fNotCopied );
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} /* End of extern "C" { */
|
||
|
#endif
|
||
|
|
||
|
#endif /* SETUPKIT_H */
|