windows-nt/Source/XPSP1/NT/base/ntsetup/opktools/inc/opklib.h
2020-09-26 16:20:57 +08:00

552 lines
15 KiB
C

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
opk.h
Abstract:
Common functions for OPK Tools.
Author:
Donald McNamara (donaldm) 02/08/2000
Brian Ku (briank) 06/21/2000
Revision History:
--*/
#ifndef OPKLIB_H
#define OPKLIB_H
#ifndef STRICT
#define STRICT
#endif
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <shlwapi.h>
#include <regstr.h>
#include <tchar.h>
#include <lm.h>
#include <devguid.h>
#include <setupapi.h>
#include <spsyslib.h>
#include <sysprep_.h>
// ============================================================================
// JCOHEN.H - Brought over from Windows Millennium Edition
// ============================================================================
#ifdef NULLSTR
#undef NULLSTR
#endif // NULLSTR
#define NULLSTR _T("\0")
#ifdef NULLCHR
#undef NULLCHR
#endif // NULLCHR
#define NULLCHR _T('\0')
#ifdef CHR_BACKSLASH
#undef CHR_BACKSLASH
#endif // CHR_BACKSLASH
#define CHR_BACKSLASH _T('\\')
#ifdef CHR_SPACE
#undef CHR_SPACE
#endif // CHR_SPACE
#define CHR_SPACE _T(' ')
//
// Macros.
//
// String macros.
//
#ifndef LSTRCMPI
#define LSTRCMPI(x, y) ( ( CompareString( LOCALE_INVARIANT, NORM_IGNORECASE, x, -1, y, -1 ) - CSTR_EQUAL ) )
#endif // LSTRCMPI
// Memory managing macros.
//
#ifdef MALLOC
#undef MALLOC
#endif // MALLOC
#define MALLOC(cb) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cb)
#ifdef REALLOC
#undef REALLOC
#endif // REALLOC
#define REALLOC(lp, cb) HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, lp, cb)
#ifdef FREE
#undef FREE
#endif // FREE
#define FREE(lp) ( (lp != NULL) ? ( (HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, (LPVOID) lp)) ? ((lp = NULL) == NULL) : (FALSE) ) : (FALSE) )
#ifdef NETFREE
#undef NETFREE
#endif // NETFREE
#define NETFREE(lp) ( (lp != NULL) ? ( (NetApiBufferFree((LPVOID) lp)) ? ((lp = NULL) == NULL) : (FALSE) ) : (FALSE) )
// Misc. macros.
//
#ifdef EXIST
#undef EXIST
#endif // EXIST
#define EXIST(lpFileName) ( (GetFileAttributes(lpFileName) == 0xFFFFFFFF) ? (FALSE) : (TRUE) )
#ifdef ISNUM
#undef ISNUM
#endif // ISNUM
#define ISNUM(cChar) ( ( ( cChar >= _T('0') ) && ( cChar <= _T('9') ) ) ? (TRUE) : (FALSE) )
#ifdef ISLET
#undef ISLET
#endif // ISLET
#define ISLET(cChar) ( ( ( ( cChar >= _T('a') ) && ( cChar <= _T('z') ) ) || ( ( cChar >= _T('A') ) && ( cChar <= _T('Z') ) ) ) ? (TRUE) : (FALSE) )
#ifdef UPPER
#undef UPPER
#endif // UPPER
#define UPPER(x) ( ( (x >= _T('a')) && (x <= _T('z')) ) ? (x + _T('A') - _T('a')) : (x) )
#ifdef RANDOM
#undef RANDOM
#endif // RANDOM
#define RANDOM(low, high) ( (high - low + 1) ? (rand() % (high - low + 1) + low) : (0) )
#ifdef COMP
#undef COMP
#endif // COMP
#define COMP(x, y) ( (UPPER(x) == UPPER(y)) ? (TRUE) : (FALSE) )
#ifdef STRSIZE
#undef STRSIZE
#endif // STRSIZE
#define STRSIZE(sz) ( sizeof(sz) / sizeof(TCHAR) )
#ifdef ARRAYSIZE
#undef ARRAYSIZE
#endif // ARRAYSIZE
#define ARRAYSIZE(a) ( sizeof(a) / sizeof(a[0]) )
#ifdef AS
#undef AS
#endif // AS
#define AS(a) ARRAYSIZE(a)
#ifdef GETBIT
#undef GETBIT
#endif // GETBIT
#define GETBIT(dw, b) ( dw & b )
#ifdef SETBIT
#undef SETBIT
#endif // SETBIT
#define SETBIT(dw, b, f) ( (f) ? (dw |= b) : (dw &= ~b) )
#ifndef GET_FLAG
#define GET_FLAG(f, b) ( f & b )
#endif // GET_FLAG
#ifndef SET_FLAG
#define SET_FLAG(f, b) ( f |= b )
#endif // SET_FLAG
#ifndef RESET_FLAG
#define RESET_FLAG(f, b) ( f &= ~b )
#endif // RESET_FLAG
//
// Logging constants and definitions.
//
#define LOG_DEBUG 0x00000003 // Only log in debug builds if this is specified. (Debug Level for logging.)
#define LOG_LEVEL_MASK 0x0000000F // Mask to only show the log level bits
#define LOG_MSG_BOX 0x00000010 // Display the message boxes if this is enabled.
#define LOG_ERR 0x00000020 // Prefix the logged string with "Error:" if the message is level 0,
// or "WARNx" if the message is at level x > 0.
#define LOG_TIME 0x00000040 // Display time if this is enabled
#define LOG_NO_NL 0x00000080 // Don't add new Line to the end of log string if this is set.
#define LOG_FLAG_QUIET_MODE 0x00000001 // Quiet mode - don't display message boxes.
typedef struct _LOG_INFO
{
DWORD dwLogFlags;
DWORD dwLogLevel;
TCHAR szLogFile[MAX_PATH];
LPTSTR lpAppName;
} LOG_INFO, *PLOG_INFO;
#define INI_SEC_LOGGING _T("Logging")
#define INI_KEY_LOGGING INI_SEC_LOGGING
#define INI_VAL_YES _T("Yes")
#define INI_VAL_NO _T("No")
#define INI_KEY_LOGLEVEL _T("LogLevel")
#define INI_KEY_QUIET _T("QuietMode")
#define INI_KEY_LOGFILE _T("LogFile")
// ============================================================================
// MISCAPI.H - Brought over from Windows Millennium Edition
// ============================================================================
//
// Defined Value(s):
//
#define MB_ERRORBOX MB_ICONSTOP | MB_OK | MB_APPLMODAL
//
// Type Definition(s):
//
// Use this simple struture to create a table that
// maps a constant string to a localizable resource id.
//
typedef struct _STRRES
{
LPTSTR lpStr;
UINT uId;
} STRRES, *PLSTRRES, *LPSTRRES;
//
// External Function Prototype(s):
//
LPTSTR AllocateString(HINSTANCE, UINT);
LPTSTR AllocateExpand(LPTSTR lpszBuffer);
LPTSTR AllocateStrRes(HINSTANCE hInstance, LPSTRRES lpsrTable, DWORD cbTable, LPTSTR lpString, LPTSTR * lplpReturn);
int MsgBoxLst(HWND, LPTSTR, LPTSTR, UINT, va_list);
int MsgBoxStr(HWND, LPTSTR, LPTSTR, UINT, ...);
int MsgBox(HWND, UINT, UINT, UINT, ...);
void CenterDialog(HWND hwnd);
void CenterDialogEx(HWND hParent, HWND hChild);
INT_PTR CALLBACK SimpleDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
INT_PTR SimpleDialogBox(HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent);
HFONT GetFont(HWND, LPTSTR, DWORD, LONG, BOOL);
void ShowEnableWindow(HWND, BOOL);
extern BOOL IsServer(VOID);
extern BOOL IsIA64(VOID);
BOOL ValidDosName(LPCTSTR);
DWORD GetLineArgs(LPTSTR lpSrc, LPTSTR ** lplplpArgs, LPTSTR * lplpAllArgs);
DWORD GetCommandLineArgs(LPTSTR ** lplplpArgs);
//
// Generic singularly linked list
//
typedef struct _GENERIC_LIST {
void* pvItem; // points to your structure
struct _GENERIC_LIST* pNext;
}GENERIC_LIST, *PGENERIC_LIST;
BOOL FAddListItem(PGENERIC_LIST*, PGENERIC_LIST**, PVOID pvItem);
void FreeList(PGENERIC_LIST);
// ============================================================================
BOOL FGetFactoryPath(LPTSTR pszFactoryPath);
BOOL FGetSysprepPath(LPTSTR pszSysprepPath);
// ============================================================================
// DISKAPI.H - Brought over from Windows Millennium Edition
// ============================================================================
BOOL DirectoryExists(LPCTSTR);
BOOL FileExists(LPCTSTR);
BOOL CopyResetFile(LPCTSTR, LPCTSTR);
DWORD IfGetLongPathName(LPCTSTR lpszShortPath, LPTSTR lpszLongPath, DWORD cchBuffer);
BOOL CreatePath(LPCTSTR);
BOOL DeletePath(LPCTSTR);
BOOL DeleteFilesEx(LPCTSTR lpDirectory, LPCTSTR lpFileSpec);
LPTSTR AddPathN(LPTSTR lpPath, LPCTSTR lpName, DWORD cbPath);
LPTSTR AddPath(LPTSTR, LPCTSTR);
DWORD ExpandFullPath(LPTSTR lpszPath, LPTSTR lpszReturn, DWORD cbReturn);
BOOL CopyDirectory(LPCTSTR, LPCTSTR);
BOOL CopyDirectoryProgress(HWND, LPCTSTR, LPCTSTR);
BOOL CopyDirectoryProgressCancel(HWND hwnd, HANDLE hEvent, LPCTSTR lpSrc, LPCTSTR lpDst);
DWORD FileCount(LPCTSTR);
BOOL BrowseForFolder(HWND, INT, LPTSTR, DWORD);
BOOL BrowseForFile(HWND hwnd, INT, INT, INT, LPTSTR, DWORD, LPTSTR, DWORD);
ULONG CrcFile(LPCTSTR); // In CRC32.C
BOOL CreateUnicodeFile(LPCTSTR);
// ============================================================================
// STRAPI.H - Brought over from Windows Millennium Edition
// ============================================================================
#ifndef _INC_SHLWAPI
LPTSTR StrChr(LPCTSTR, TCHAR);
LPTSTR StrRChr(LPCTSTR, TCHAR);
#endif // _INC_SHLWAPI
LPTSTR StrRem(LPTSTR, TCHAR);
LPTSTR StrRTrm(LPTSTR, TCHAR);
LPTSTR StrTrm(LPTSTR, TCHAR);
LPTSTR StrMov(LPTSTR, LPTSTR, INT);
// Exported Function(s) in LOG.C:
//
INT LogFileLst(LPCTSTR lpFileName, LPTSTR lpFormat, va_list lpArgs);
INT LogFileStr(LPCTSTR lpFileName, LPTSTR lpFormat, ...);
INT LogFile(LPCTSTR lpFileName, UINT uFormat, ...);
DWORD OpkLogFileLst(PLOG_INFO pLogInfo, DWORD dwLogOpt, LPTSTR lpFormat, va_list lpArgs);
DWORD OpkLogFile(DWORD dwLogOpt, UINT uFormat, ...);
DWORD OpkLogFileStr(DWORD dwLogOpt, LPTSTR lpFormat, ...);
BOOL OpkInitLogging(LPTSTR lpszIniPath, LPTSTR lpAppName);
/****************************************************************************\
From REGAPI.C
Registry API function prototypes and defined values.
\****************************************************************************/
//
// Defined Root Key(s):
//
#define HKCR HKEY_CLASSES_ROOT
#define HKCU HKEY_CURRENT_USER
#define HKLM HKEY_LOCAL_MACHINE
#define HKU HKEY_USERS
//
// Type Definition(s):
//
typedef BOOL (CALLBACK * REGENUMKEYPROC) (HKEY, LPTSTR, LPARAM);
typedef BOOL (CALLBACK * REGENUMVALPROC) (LPTSTR, LPTSTR, LPARAM);
//
// External Function Prototype(s):
//
BOOL RegExists(HKEY hKeyReg, LPTSTR lpKey, LPTSTR lpValue);
BOOL RegDelete(HKEY hRootKey, LPTSTR lpSubKey, LPTSTR lpValue);
LPTSTR RegGetStringEx(HKEY hKeyReg, LPTSTR lpKey, LPTSTR lpValue, BOOL bExpand);
LPTSTR RegGetString(HKEY hKeyReg, LPTSTR lpKey, LPTSTR lpValue);
LPTSTR RegGetExpand(HKEY hKeyReg, LPTSTR lpKey, LPTSTR lpValue);
LPVOID RegGetBin(HKEY hKeyReg, LPTSTR lpKey, LPTSTR lpValue);
DWORD RegGetDword(HKEY hKeyReg, LPTSTR lpKey, LPTSTR lpValue);
BOOL RegSetStringEx(HKEY hRootKey, LPTSTR lpSubKey, LPTSTR lpValue, LPTSTR lpData, BOOL bExpand);
BOOL RegSetString(HKEY hRootKey, LPTSTR lpSubKey, LPTSTR lpValue, LPTSTR lpData);
BOOL RegSetExpand(HKEY hRootKey, LPTSTR lpSubKey, LPTSTR lpValue, LPTSTR lpData);
BOOL RegSetDword(HKEY hRootKey, LPTSTR lpSubKey, LPTSTR lpValue, DWORD dwData);
BOOL RegCheck(HKEY hKeyRoot, LPTSTR lpKey, LPTSTR lpValue);
BOOL RegEnumKeys(HKEY hKey, LPTSTR lpRegKey, REGENUMKEYPROC hCallBack, LPARAM lParam, BOOL bDelKeys);
BOOL RegEnumValues(HKEY hKey, LPTSTR lpRegKey, REGENUMVALPROC hCallBack, LPARAM lParam, BOOL bDelValues);
/****************************************************************************\
From INIAPI.C
INI API function prototypes and defined values.
\****************************************************************************/
//
// External Function Prototype(s):
//
LPTSTR IniGetExpand(LPTSTR lpszIniFile, LPTSTR lpszSection, LPTSTR lpszKey, LPTSTR lpszDefault);
LPTSTR IniGetString(LPTSTR lpszIniFile, LPTSTR lpszSection, LPTSTR lpszKey, LPTSTR lpszDefault);
LPTSTR IniGetSection(LPTSTR lpszIniFile, LPTSTR lpszSection);
LPTSTR IniGetStringEx(LPTSTR lpszIniFile, LPTSTR lpszSection, LPTSTR lpszKey, LPTSTR lpszDefault, LPDWORD lpdwSize);
LPTSTR IniGetSectionEx(LPTSTR lpszIniFile, LPTSTR lpszSection, LPDWORD lpdwSize);
BOOL IniSettingExists(LPCTSTR lpszFile, LPCTSTR lpszSection, LPCTSTR lpszKey, LPCTSTR lpszValue);
/****************************************************************************\
From OPKFAC.C
Factory API function prototypes and defined values.
\****************************************************************************/
//
// Defined Value(s):
//
// Flags for LocateWinBom():
//
#define LOCATE_NORMAL 0x00000000
#define LOCATE_AGAIN 0x00000001
#define LOCATE_NONET 0x00000002
//
// External Function Prototype(s):
//
BOOL EnablePrivilege(IN PCTSTR,IN BOOL);
extern BOOL GetCredentials(LPTSTR lpszUsername, DWORD dwUsernameSize, LPTSTR lpszPassword, DWORD dwPasswordSize, LPTSTR lpFileName, LPTSTR lpAlternateSection);
extern NET_API_STATUS FactoryNetworkConnect(LPTSTR lpszPath, LPTSTR lpszWinBOMPath, LPTSTR lpAlternateSection, BOOL bState);
extern BOOL LocateWinBom(LPTSTR lpWinBOMPath, DWORD cbWinbBOMPath, LPTSTR lpFactoryPath, LPTSTR lpFactoryMode, DWORD dwFlags);
void CleanupRegistry(VOID);
VOID GenUniqueName(OUT PWSTR GeneratedString, IN DWORD DesiredStrLen);
NET_API_STATUS ConnectNetworkResource(LPTSTR, LPTSTR, LPTSTR, BOOL);
BOOL GetUncShare(LPCTSTR lpszPath, LPTSTR lpszShare, DWORD cbShare);
DWORD GetSkuType();
BOOL SetFactoryStartup(LPCTSTR lpFactory);
BOOL UpdateDevicePathEx(HKEY hKeyRoot, LPTSTR lpszSubKey, LPTSTR lpszNewPath, LPTSTR lpszRoot, BOOL bRecursive);
BOOL UpdateDevicePath(LPTSTR lpszNewPath, LPTSTR lpszRoot, BOOL bRecursive);
BOOL UpdateSourcePath(LPTSTR lpszSourcePath);
VOID CleanupSourcesDir(LPTSTR lpszSourcesPath);
BOOL SetDefaultOEMApps(LPCTSTR pszWinBOMPath);
BOOL OpklibCheckVersion(DWORD dwMajorVersion, DWORD dwQFEVersion);
// If app uses setDefaultOEMApps, it must implement the following function
// which is used for error reporting.
void ReportSetDefaultOEMAppsError(LPCTSTR pszMissingApp, LPCTSTR pszCategory);
//
// Sysprep_c.w
//
// ============================================================================
// USEFUL STRINGS
// ============================================================================
#define SYSCLONE_PART2 "setupcl.exe"
#define IDS_ADMINISTRATOR 1
// ============================================================================
// USEFUL CONSTANTS
// ============================================================================
#define SETUPTYPE 1 // from winlogon\setup.h
#define SETUPTYPE_NOREBOOT 2
#define REGISTRY_QUOTA_BUMP (10* (1024 * 1024))
#define DEFAULT_REGISTRY_QUOTA (32 * (1024 * 1024))
#define SFC_DISABLE_NOPOPUPS 4 // from sfc.h
#define FILE_SRCLIENT_DLL L"SRCLIENT.DLL"
// ============================================================================
// FUNCTION DECLARATIONS
// ============================================================================
BOOL
IsDomainMember(
VOID
);
BOOL
ResetRegistryKey(
IN HKEY Rootkey,
IN PCWSTR Subkey,
IN PCWSTR Delkey
);
BOOL
DeleteWinlogonDefaults(
VOID
);
VOID
FixDevicePaths(
VOID
);
BOOL
NukeMruList(
VOID
);
BOOL
RemoveNetworkSettings(
LPTSTR lpszSysprepINFPath
);
VOID
RunExternalUniqueness(
VOID
);
BOOL
IsSetupClPresent(
VOID
);
BOOL
CheckOSVersion(
VOID
);
//
// from spapip.h
//
BOOL
pSetupIsUserAdmin(
VOID
);
BOOL
pSetupDoesUserHavePrivilege(
PCTSTR
);
BOOL
EnablePrivilege(
IN PCTSTR,
IN BOOL
);
BOOL
ValidateAndChecksumFile(
IN PCTSTR Filename,
OUT PBOOLEAN IsNtImage,
OUT PULONG Checksum,
OUT PBOOLEAN Valid
);
VOID
LogRepairInfo(
IN PWSTR Source,
IN PWSTR Target,
IN PWSTR DirectoryOnSourceDevice,
IN PWSTR DiskDescription,
IN PWSTR DiskTag
);
BOOL
ChangeBootTimeout(
IN UINT
);
VOID
DisableSR(
VOID
);
VOID
EnableSR(
VOID
);
#endif // OPKLIB_H