#include #include #include #include #include "shmgdefs.h" EXTERN_C void UpgradeDesktopWallpaper(void); enum { CMD_W95_TO_SUR, CMD_DAYTONA_CURSORS, CMD_FIX_CURSOR_PATHS, CMD_FIX_SPECIAL_FOLDERS, CMD_FIX_WINDOWS_PROFILE_SECURITY, CMD_FIX_USER_PROFILE_SECURITY, CMD_FIX_POLICIES_SECURITY, CMD_CVT_SCHEMES_TO_MULTIUSER, CMD_UPGRADE_NT4_PROFILE_TO_NT5, CMD_UPGRADE_SCHEMES_AND_NCMETRICS_TO_WIN2000, CMD_UPGRADE_SCHEMES_AND_NCMETRICS_FROM_WIN9X_TO_WIN2000, CMD_FIX_CAPI_DIR_ATTRIBUTES, CMD_MERGE_DESKTOP_AND_NORMAL_STREAMS, CMD_MOVE_AND_ADJUST_ICON_METRICS, CMD_FIX_HTML_HELP, CMD_SET_SCREENSAVER_FRIENDLYUI, CMD_ADD_CONFIGURE_PROGRAMS, CMD_OCINSTALL_FIXUP, // enums from here down will run within OleInitialize/OleUnitialize CMD_OLE_REQUIRED_START = 10000, CMD_OCINSTALL_SHOW_IE, CMD_OCINSTALL_REINSTALL_IE, CMD_OCINSTALL_HIDE_IE, CMD_OCINSTALL_USER_CONFIG_IE, CMD_OCINSTALL_SHOW_OE, CMD_OCINSTALL_REINSTALL_OE, CMD_OCINSTALL_HIDE_OE, CMD_OCINSTALL_USER_CONFIG_OE, CMD_OCINSTALL_SHOW_VM, CMD_OCINSTALL_REINSTALL_VM, CMD_OCINSTALL_HIDE_VM, CMD_OCINSTALL_UPDATE, CMD_OCINSTALL_CLEANUP_INITIALLY_CLEAR, } CMD_VALS; int mystrcpy( LPTSTR pszOut, LPTSTR pszIn, TCHAR chTerm ) { BOOL fInQuote = FALSE; LPTSTR pszStrt = pszOut; while( *pszIn && !fInQuote && *pszIn != chTerm ) { if (*pszIn == TEXT('"')) { fInQuote = !fInQuote; } *pszOut++ = *pszIn++; } *pszOut = TEXT('\0'); return (int)(pszOut - pszStrt); } BOOL HasPath( LPTSTR pszFilename ) { // // Special case null string so it won't get changed // if (*pszFilename == TEXT('\0')) return TRUE; for(; *pszFilename; pszFilename++ ) { if (*pszFilename == TEXT(':') || *pszFilename == TEXT('\\') || *pszFilename == TEXT('/')) { return TRUE; } } return FALSE; } void HandOffToShell32 (LPCSTR pcszCommand, LPCSTR pcszOptionalArgument) { TCHAR szShell32Path[MAX_PATH]; if (GetSystemDirectory(szShell32Path, ARRAYSIZE(szShell32Path)) != 0) { HINSTANCE hInstShell32; PathAppend(szShell32Path, TEXT("shell32.dll")); hInstShell32 = LoadLibrary(szShell32Path); if (hInstShell32 != NULL) { typedef HRESULT (*PFNFirstUserLogon) (LPCSTR pcszCommand, LPCSTR pcszOptionalArgument); PFNFirstUserLogon pfnFirstUserLogon; // Call shell32!FirstUserLogon which is Ordinal230 defined in shell32.src. pfnFirstUserLogon = (PFNFirstUserLogon)GetProcAddress(hInstShell32, (LPCSTR)MAKEINTRESOURCE(230)); if (pfnFirstUserLogon != NULL) pfnFirstUserLogon(pcszCommand, pcszOptionalArgument); FreeLibrary(hInstShell32); } } } /* * Command Parser */ typedef struct { LPSTR pszCmd; int idCmd; } CMD; CMD aCmds[] = { { "W", CMD_W95_TO_SUR }, { "Cvt-Curs", CMD_DAYTONA_CURSORS }, { "Fix-Curs", CMD_FIX_CURSOR_PATHS }, { "Fix-Folders", CMD_FIX_SPECIAL_FOLDERS}, { "Fix-Win-Security", CMD_FIX_WINDOWS_PROFILE_SECURITY}, { "Fix-User-Security", CMD_FIX_USER_PROFILE_SECURITY}, { "Fix-Policies-Security", CMD_FIX_POLICIES_SECURITY}, { "Cvt-Mouse-Schemes", CMD_CVT_SCHEMES_TO_MULTIUSER}, { "UpgradeProfileNT4ToNT5", CMD_UPGRADE_NT4_PROFILE_TO_NT5}, { "UpgradeSchemesAndNcMetricsToWin2000", CMD_UPGRADE_SCHEMES_AND_NCMETRICS_TO_WIN2000}, { "UpgradeSchemesAndNcMetricsFromWin9xToWin2000", CMD_UPGRADE_SCHEMES_AND_NCMETRICS_FROM_WIN9X_TO_WIN2000}, { "FixCAPIDirAttrib", CMD_FIX_CAPI_DIR_ATTRIBUTES}, { "MergeDesktopAndNormalStreams", CMD_MERGE_DESKTOP_AND_NORMAL_STREAMS }, { "MoveAndAdjustIconMetrics", CMD_MOVE_AND_ADJUST_ICON_METRICS }, { "Fix-HTML-Help", CMD_FIX_HTML_HELP }, { "Set-Screensaver-On-FriendlyUI", CMD_SET_SCREENSAVER_FRIENDLYUI }, { "AddConfigurePrograms", CMD_ADD_CONFIGURE_PROGRAMS }, { "OCInstallShowIE", CMD_OCINSTALL_SHOW_IE }, { "OCInstallReinstallIE", CMD_OCINSTALL_REINSTALL_IE }, { "OCInstallHideIE", CMD_OCINSTALL_HIDE_IE }, { "OCInstallUserConfigIE", CMD_OCINSTALL_USER_CONFIG_IE }, { "OCInstallShowOE", CMD_OCINSTALL_SHOW_OE }, { "OCInstallReinstallOE", CMD_OCINSTALL_REINSTALL_OE }, { "OCInstallHideOE", CMD_OCINSTALL_HIDE_OE }, { "OCInstallUserConfigOE", CMD_OCINSTALL_USER_CONFIG_OE }, // { "OCInstallShowVM", CMD_OCINSTALL_SHOW_VM }, { "OCInstallReinstallVM", CMD_OCINSTALL_REINSTALL_VM }, // { "OCInstallHideVM", CMD_OCINSTALL_HIDE_VM }, { "OCInstallFixup", CMD_OCINSTALL_FIXUP }, { "OCInstallUpdate", CMD_OCINSTALL_UPDATE }, { "OCInstallCleanupInitiallyClear", CMD_OCINSTALL_CLEANUP_INITIALLY_CLEAR }, }; #define C_CMDS ARRAYSIZE(aCmds) void __cdecl main( int cArgs, char **szArg) { int i; HRESULT hrOle = E_FAIL; SHMGLogErrMsg("main called with args", (DWORD)cArgs); if (cArgs < 2 || cArgs > 3) ExitProcess(1); #ifdef SHMG_DBG for(i=1; i= C_CMDS) ExitProcess(1); if (aCmds[i].idCmd >= CMD_OLE_REQUIRED_START) { hrOle = OleInitialize(NULL); if (FAILED(hrOle)) { ExitProcess(1); } } switch( aCmds[i].idCmd ) { case CMD_W95_TO_SUR: CvtDeskCPL_Win95ToSUR(); break; case CMD_DAYTONA_CURSORS: CvtCursorsCPL_DaytonaToSUR(); break; case CMD_FIX_CURSOR_PATHS: FixupCursorSchemePaths(); break; case CMD_FIX_SPECIAL_FOLDERS: ResetUserSpecialFolderPaths(); break; case CMD_FIX_WINDOWS_PROFILE_SECURITY: FixWindowsProfileSecurity(); break; case CMD_FIX_USER_PROFILE_SECURITY: FixUserProfileSecurity(); break; case CMD_FIX_POLICIES_SECURITY: FixPoliciesSecurity(); break; case CMD_CVT_SCHEMES_TO_MULTIUSER: CvtCursorSchemesToMultiuser(); break; case CMD_UPGRADE_NT4_PROFILE_TO_NT5: MigrateNT4ToNT5(); break; case CMD_UPGRADE_SCHEMES_AND_NCMETRICS_TO_WIN2000: UpgradeSchemesAndNcMetricsToWin2000(); break; case CMD_UPGRADE_SCHEMES_AND_NCMETRICS_FROM_WIN9X_TO_WIN2000: UpgradeSchemesAndNcMetricsFromWin9xToWin2000(cArgs > 2 ? szArg[2] : NULL); break; case CMD_FIX_CAPI_DIR_ATTRIBUTES: SetSystemBitOnCAPIDir(); break; case CMD_MERGE_DESKTOP_AND_NORMAL_STREAMS: case CMD_MOVE_AND_ADJUST_ICON_METRICS: HandOffToShell32(szArg[1], cArgs > 2 ? szArg[2] : NULL); break; case CMD_FIX_HTML_HELP: FixHtmlHelp(); break; case CMD_SET_SCREENSAVER_FRIENDLYUI: SetScreensaverOnFriendlyUI(); break; case CMD_ADD_CONFIGURE_PROGRAMS: AddConfigurePrograms(); break; case CMD_OCINSTALL_FIXUP: FixupOptionalComponents(); break; case CMD_OCINSTALL_UPDATE: OCInstallUpdate(); break; case CMD_OCINSTALL_CLEANUP_INITIALLY_CLEAR: OCInstallCleanupInitiallyClear(); break; case CMD_OCINSTALL_SHOW_IE: ShowHideIE(TRUE, FALSE, TRUE); break; case CMD_OCINSTALL_REINSTALL_IE: ShowHideIE(TRUE, TRUE, TRUE); break; case CMD_OCINSTALL_HIDE_IE: ShowHideIE(FALSE, FALSE, TRUE); break; case CMD_OCINSTALL_USER_CONFIG_IE: UserConfigIE(); break; case CMD_OCINSTALL_SHOW_OE: ShowHideOE(TRUE, FALSE, TRUE); break; case CMD_OCINSTALL_REINSTALL_OE: ShowHideOE(TRUE, TRUE, TRUE); break; case CMD_OCINSTALL_HIDE_OE: ShowHideOE(FALSE, FALSE, TRUE); break; case CMD_OCINSTALL_USER_CONFIG_OE: UserConfigOE(); break; case CMD_OCINSTALL_SHOW_VM: // Do nothing... break; case CMD_OCINSTALL_REINSTALL_VM: ReinstallVM(); break; case CMD_OCINSTALL_HIDE_VM: // Do nothing... break; default: ExitProcess(2); } if (SUCCEEDED(hrOle)) { OleUninitialize(); } ExitProcess(0); } #ifdef SHMG_DBG /***************************************************************************\ * * FUNCTION: FmtSprintf( DWORD id, ... ); * * PURPOSE: sprintf but it gets the pattern string from the message rc. * * History: * 03-May-1993 JonPa Created it. \***************************************************************************/ TCHAR g_szDbgBuffer[16384]; char g_szDbgBufA[16384]; void Dprintf( LPTSTR pszFmt, ... ) { DWORD cb; LPVOID psz = g_szDbgBuffer; va_list marker; va_start( marker, pszFmt ); wvsprintf( g_szDbgBuffer, pszFmt, marker ); OutputDebugString(g_szDbgBuffer); #ifdef UNICODE cb = WideCharToMultiByte(CP_ACP, 0, g_szDbgBuffer, -1, g_szDbgBufA, sizeof(g_szDbgBufA), NULL, NULL); psz = g_szDbgBufA; #else cb = lstrlen(g_szDbgBuffer) * sizeof(TCHAR); #endif WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), psz, cb, &cb, NULL); va_end( marker ); } #endif