/*++ 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 #include #include #include #include #include #include #include #include #include #include #include // ============================================================================ // 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