windows-nt/Source/XPSP1/NT/base/wow64/setup/inc/setupkit.h

409 lines
12 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/***************************************************************************
**
** 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 */