/*++ Copyright (c) 1998 Microsoft Corporation Module Name: creatwr2.c Abstract: This source file implements the operations needed to properly migrate Creative Writer 2.0 from Windows 9x to Windows NT. This is part of the Setup Migration DLL. Author: Calin Negreanu (calinn) 07-Nov-1998 Revision History: --*/ #include "pch.h" #define S_MIGRATION_PATHS "Migration Paths" #define S_MS_WORDART_30 "HKCR\\CLSID\\{000212F0-0000-0000-C000-000000000046}\\AlternateLocalServer32" #define S_WRDART_FILE1 "KIDART32.EXE" #define S_WRDART_FILE2 "WRDART32.EXE" #define S_WRDART_FILE3 "WORDART.EXE" #define MEMDB_CATEGORY_FILE1 "CreativeWriter2\\File1" #define MEMDB_CATEGORY_FILE2 "CreativeWriter2\\File2" static GROWBUFFER g_FilesBuff = GROWBUF_INIT; BOOL CreativeWriter2_Attach ( IN HINSTANCE DllInstance ) { return TRUE; } BOOL CreativeWriter2_Detach ( IN HINSTANCE DllInstance ) { FreeGrowBuffer (&g_FilesBuff); return TRUE; } LONG CreativeWriter2_QueryVersion ( IN PCSTR *ExeNamesBuf ) { HKEY key = NULL; PCTSTR fullFileName = NULL; PCTSTR fileName = NULL; DWORD result = ERROR_SUCCESS; __try { key = OpenRegKeyStrA (S_MS_WORDART_30); if (!key) { DEBUGMSGA ((DBG_VERBOSE, "Creative Writer 2 migration DLL will not run.")); result = ERROR_NOT_INSTALLED; __leave; } fullFileName = GetRegValueStringA (key, ""); if (!fullFileName) { DEBUGMSGA ((DBG_VERBOSE, "Creative Writer 2 migration DLL will not run.")); result = ERROR_NOT_INSTALLED; __leave; } fileName = GetFileNameFromPathA (fullFileName); if (!StringIMatchA (fileName, S_WRDART_FILE1)) { DEBUGMSGA ((DBG_VERBOSE, "Creative Writer 2 migration DLL will not run.")); result = ERROR_NOT_INSTALLED; __leave; } MultiSzAppendA (&g_FilesBuff, S_WRDART_FILE1); MultiSzAppendA (&g_FilesBuff, S_WRDART_FILE2); *ExeNamesBuf = g_FilesBuff.Buf; } __finally { if (fullFileName) { MemFree (g_hHeap, 0, fullFileName); fullFileName = NULL; } if (key) { CloseRegKey (key); key = NULL; } } return result; } LONG CreativeWriter2_Initialize9x ( IN PCSTR WorkingDirectory, IN PCSTR SourceDirectories ) { INFSTRUCT context = INITINFSTRUCT_GROWBUFFER; PCSTR fullFileName; PCSTR fileName; LONG result = ERROR_SUCCESS; BOOL set1 = FALSE; BOOL set2 = FALSE; // // Let's find out where are our files located // if (g_MigrateInf != INVALID_HANDLE_VALUE) { if (InfFindFirstLineA (g_MigrateInf, S_MIGRATION_PATHS, NULL, &context)) { do { fullFileName = InfGetStringFieldA (&context, 1); if (fullFileName) { fileName = GetFileNameFromPathA (fullFileName); if (!set1 && StringIMatchA (fileName, S_WRDART_FILE1)) { set1 = TRUE; // // this copy is safe. S_WRDART_FILE1 is longer than S_WRDART_FILE3 // MYASSERT (ByteCount (S_WRDART_FILE1) >= ByteCount (S_WRDART_FILE3)); StringCopy ((PSTR)fileName, S_WRDART_FILE3); MemDbSetValueExA (MEMDB_CATEGORY_FILE1, fullFileName, NULL, NULL, 0, NULL); } if (!set2 && StringIMatchA (fileName, S_WRDART_FILE2)) { set2 = TRUE; MemDbSetValueExA (MEMDB_CATEGORY_FILE2, fullFileName, NULL, NULL, 0, NULL); } } } while (InfFindNextLine (&context)); InfCleanUpInfStruct (&context); } if (!set1 || !set2) { DEBUGMSGA ((DBG_WARNING, "Creative Writer 2 migration DLL: Could not find needed files.")); result = ERROR_NOT_INSTALLED; } } else { DEBUGMSGA ((DBG_ERROR, "Could not open MIGRATE.INF.")); result = ERROR_NOT_INSTALLED; } return result; } LONG CreativeWriter2_MigrateUser9x ( IN HWND ParentWnd, IN PCSTR UnattendFile, IN HKEY UserRegKey, IN PCSTR UserName ) { return ERROR_SUCCESS; } LONG CreativeWriter2_MigrateSystem9x ( IN HWND ParentWnd, IN PCSTR UnattendFile ) { return ERROR_SUCCESS; } LONG CreativeWriter2_InitializeNT ( IN PCWSTR WorkingDirectory, IN PCWSTR SourceDirectories ) { PCSTR file1 = NULL; PCSTR file2 = NULL; CHAR pattern[MEMDB_MAX]; MEMDB_ENUMA e; LONG result = ERROR_SUCCESS; MemDbBuildKeyA (pattern, MEMDB_CATEGORY_FILE1, "*", NULL, NULL); if (MemDbEnumFirstValueA (&e, pattern, MEMDB_ALL_SUBLEVELS, MEMDB_ENDPOINTS_ONLY)) { do { if (!file1) { file1 = DuplicatePathStringA (e.szName, 0); } } while (MemDbEnumNextValueA (&e)); } MemDbBuildKeyA (pattern, MEMDB_CATEGORY_FILE2, "*", NULL, NULL); if (MemDbEnumFirstValueA (&e, pattern, MEMDB_ALL_SUBLEVELS, MEMDB_ENDPOINTS_ONLY)) { do { if (!file2) { file2 = DuplicatePathStringA (e.szName, 0); } } while (MemDbEnumNextValueA (&e)); } if (!file1 || !file2 || !DoesFileExist (file1) || !DoesFileExist (file2) ) { DEBUGMSGA ((DBG_WARNING, "Creative Writer 2 migration DLL: Could not find needed files.")); result = ERROR_NOT_INSTALLED; } else { CopyFileA (file2, file1, FALSE); } if (file1) { FreePathStringA (file1); } if (file2) { FreePathStringA (file2); } return result; } LONG CreativeWriter2_MigrateUserNT ( IN HINF UnattendFile, IN HKEY UserRegKey, IN PCWSTR UserName ) { return ERROR_SUCCESS; } LONG CreativeWriter2_MigrateSystemNT ( IN HINF UnattendFile ) { return ERROR_SUCCESS; }