/*++ Copyright (c) 1996 Microsoft Corporation Module Name: groups.c Abstract: This file implements the file copy code. Environment: WIN32 User Mode Author: Wesley Witt (wesw) 17-Feb-1996 --*/ #include "wizard.h" #pragma hdrstop GROUP_ITEMS RemoteAdminGroupItems[] = { { TEXT("Fax"), TEXT("Remote Administration"), TEXT("%systemroot%\\system32\\faxcfg.exe"), TEXT("%systemroot%\\system32\\faxcfg.exe"), TEXT("%systemroot%\\system32"), USE_COMMON_GROUP, 0, SW_NORMAL, 0 } }; #define MAX_REMOTE_ADMIN_GROUP_ITEMS (sizeof(RemoteAdminGroupItems)/sizeof(RemoteAdminGroupItems[0])) GROUP_ITEMS GroupItems[] = { { TEXT("Fax"), TEXT("Fax Queue Management"), TEXT("%systemroot%\\system32\\faxqueue.exe"), TEXT("%systemroot%\\system32\\faxqueue.exe"), TEXT("%systemroot%\\system32"), USE_COMMON_GROUP | USE_SERVER_NAME, 0, SW_NORMAL, 0 }, { TEXT("Fax"), TEXT("Cover Page Editor"), TEXT("%systemroot%\\system32\\faxcover.exe"), TEXT("%systemroot%\\system32\\faxcover.exe"), TEXT("%systemroot%\\system32"), USE_COMMON_GROUP, 0, SW_NORMAL, 0 }, { TEXT("Fax"), TEXT("Fax Send Utility"), TEXT("%systemroot%\\system32\\faxsend.exe"), TEXT("%systemroot%\\system32\\faxsend.exe"), TEXT("%systemroot%\\system32"), USE_COMMON_GROUP, 0, SW_NORMAL, 0 }, { TEXT("Fax"), TEXT("Fax Configuration"), TEXT("%systemroot%\\system32\\faxcfgst.exe"), TEXT("%systemroot%\\system32\\faxcfgst.exe"), TEXT("%systemroot%\\system32"), USE_COMMON_GROUP, 0, SW_NORMAL, 0 }, { TEXT("Fax"), TEXT("Fax Document Viewer"), TEXT("kodakimg.exe"), NULL, NULL, USE_COMMON_GROUP | USE_APP_PATH, 0, SW_NORMAL, 0 }, { TEXT("Fax"), TEXT("Help"), TEXT("%systemroot%\\system32\\winhlp32.exe %systemroot%\\help\\fax.hlp"), TEXT("%systemroot%\\system32\\winhlp32.exe"), TEXT("%systemroot%\\system32"), USE_COMMON_GROUP, 0, SW_NORMAL, 0 } }; #define MAX_GROUP_ITEMS (sizeof(GroupItems)/sizeof(GroupItems[0])) GROUP_ITEMS UserGroupItems[] = { { TEXT("Startup"), TEXT("Fax Monitor"), TEXT("%systemroot%\\system32\\faxstat.exe"), TEXT("%systemroot%\\system32\\faxstat.exe"), TEXT("%systemroot%\\system32"), USE_USER_GROUP, 0, SW_MINIMIZE, 0 } }; #define MAX_USER_GROUP_ITEMS (sizeof(UserGroupItems)/sizeof(UserGroupItems[0])) VOID CreateGroupItems( BOOL RemoteAdmin, LPTSTR ServerName ) { DWORD i; TCHAR Buffer[MAX_PATH*2]; TCHAR CommandLine[MAX_PATH*2]; TCHAR IconPath[MAX_PATH*2]; TCHAR WorkingDirectory[MAX_PATH*2]; PGROUP_ITEMS Groups; DWORD GroupCount; HKEY hKey; LPTSTR p; DWORD Size; if (InstallMode & INSTALL_UPGRADE) { DeleteGroupItems(); } hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_WINDOWS_CURRVER, FALSE, KEY_READ ); if (hKey) { LPTSTR ProgFilesDir = GetRegistryString( hKey, REGVAL_PROGRAM_FILES_DIR, EMPTY_STRING ); if (ProgFilesDir) { SetEnvironmentVariable( TEXT("%programfilesdir%"), ProgFilesDir ); MemFree( ProgFilesDir ); } RegCloseKey( hKey ); } if (RemoteAdmin) { Groups = RemoteAdminGroupItems; GroupCount = MAX_REMOTE_ADMIN_GROUP_ITEMS; } else { Groups = GroupItems; GroupCount = MAX_GROUP_ITEMS; } for (i=0; i<GroupCount; i++) { CreateGroup( Groups[i].GroupName, Groups[i].Flags & USE_COMMON_GROUP ); if (Groups[i].Flags & USE_APP_PATH) { hKey = OpenRegistryKey( HKEY_LOCAL_MACHINE, REGKEY_APP_PATHS, FALSE, KEY_READ ); if (hKey) { Size = sizeof(Buffer) - sizeof(TCHAR); Buffer[0] = TEXT('\"'); Size = RegQueryValue( hKey, Groups[i].CommandLine, &Buffer[1], &Size ); if (Size == ERROR_SUCCESS || Size == ERROR_INVALID_DATA) { _tcscat( Buffer, TEXT("\"") ); ExpandEnvironmentStrings( Buffer, CommandLine, sizeof(CommandLine)/sizeof(TCHAR) ); ExpandEnvironmentStrings( &Buffer[1], IconPath, sizeof(IconPath)/sizeof(TCHAR) ); IconPath[wcslen(IconPath)-1] = 0; ExpandEnvironmentStrings( &Buffer[1], WorkingDirectory, sizeof(WorkingDirectory)/sizeof(TCHAR) ); p = _tcsrchr( WorkingDirectory, TEXT('\\') ); if (p) { *p = 0; } else { continue; } } RegCloseKey( hKey ); } else { continue; } } else { ExpandEnvironmentStrings( Groups[i].CommandLine, CommandLine, sizeof(CommandLine)/sizeof(TCHAR) ); ExpandEnvironmentStrings( Groups[i].IconPath, IconPath, sizeof(IconPath)/sizeof(TCHAR) ); ExpandEnvironmentStrings( Groups[i].WorkingDirectory, WorkingDirectory, sizeof(WorkingDirectory)/sizeof(TCHAR) ); } if ((Groups[i].Flags & USE_SERVER_NAME) && ServerName) { _tcscat( CommandLine, TEXT(" ") ); _tcscat( CommandLine, ServerName ); } AddItem( Groups[i].GroupName, Groups[i].Flags & USE_COMMON_GROUP, Groups[i].Description, CommandLine, IconPath, Groups[i].IconIndex, WorkingDirectory, Groups[i].HotKey, Groups[i].ShowCmd ); } if (RequestedSetupType & FAX_INSTALL_WORKSTATION) { Groups = UserGroupItems; GroupCount = MAX_USER_GROUP_ITEMS; for (i=0; i<GroupCount; i++) { ExpandEnvironmentStrings( Groups[i].CommandLine, CommandLine, sizeof(CommandLine) ); ExpandEnvironmentStrings( Groups[i].IconPath, IconPath, sizeof(IconPath) ); ExpandEnvironmentStrings( Groups[i].WorkingDirectory, WorkingDirectory, sizeof(WorkingDirectory) ); AddItem( Groups[i].GroupName, Groups[i].Flags & USE_COMMON_GROUP, Groups[i].Description, CommandLine, IconPath, Groups[i].IconIndex, WorkingDirectory, Groups[i].HotKey, Groups[i].ShowCmd ); } } } VOID DeleteGroupItems( VOID ) { DWORD i; for (i=0; i<MAX_GROUP_ITEMS; i++) { DeleteItem( GroupItems[i].GroupName, GroupItems[i].Flags & USE_COMMON_GROUP, GroupItems[i].Description, FALSE ); } for (i=0; i<MAX_REMOTE_ADMIN_GROUP_ITEMS; i++) { DeleteItem( RemoteAdminGroupItems[i].GroupName, RemoteAdminGroupItems[i].Flags & USE_COMMON_GROUP, RemoteAdminGroupItems[i].Description, FALSE ); } for (i=0; i<MAX_USER_GROUP_ITEMS; i++) { DeleteItem( UserGroupItems[i].GroupName, UserGroupItems[i].Flags & USE_COMMON_GROUP, UserGroupItems[i].Description, FALSE ); } DeleteGroup( GroupItems[0].GroupName, GroupItems[0].Flags & USE_COMMON_GROUP ); }