/*++ Copyright (c) 2000 Microsoft Corporation Module Name : acme.cpp Abstract: remove acme installed client files and acme registry keys Author: JoyC Revision History: --*/ #include #include #include #include "setuplib.h" #include "resource.h" #define TERMINAL_SERVER_CLIENT_REGKEY _T("Software\\Microsoft\\Terminal Server Client") #define LOGFILE_STR _T("LogFile") HANDLE g_hLogFile = INVALID_HANDLE_VALUE; int __cdecl main(int argc, char** argv) { DWORD status; HKEY hKey; HINSTANCE hInstance = (HINSTANCE) NULL; TCHAR buffer[MAX_PATH]; TCHAR szProgmanPath[MAX_PATH] = _T(""); TCHAR szOldProgmanPath[MAX_PATH] = _T(""); DWORD bufLen; TCHAR szMigratePathLaunch[MAX_PATH]; // // Open the tsclient registry key to get the log file name // memset(buffer, 0, sizeof(buffer)); bufLen = sizeof(buffer); //size in bytes needed status = RegOpenKeyEx(HKEY_LOCAL_MACHINE, TERMINAL_SERVER_CLIENT_REGKEY, 0, KEY_READ, &hKey); if(ERROR_SUCCESS == status) { // // Query the tsclient optional logfile path // status = RegQueryValueEx(hKey, LOGFILE_STR, NULL, NULL, (BYTE *)buffer, &bufLen); if(ERROR_SUCCESS == status) { g_hLogFile = CreateFile(buffer, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if(g_hLogFile != INVALID_HANDLE_VALUE) { //Always append to the end of the log file SetFilePointer(g_hLogFile, 0, 0, FILE_END); } else { DBGMSG((_T("CreateFile for log file failed %d %d"), g_hLogFile, GetLastError())); } } else { DBGMSG((_T("RegQueryValueEx for log file failed %d %d"), status, GetLastError())); } RegCloseKey(hKey); } if(g_hLogFile != INVALID_HANDLE_VALUE) { DBGMSG((_T("Log file opened by new process attach"))); } DeleteTSCDesktopShortcuts(); LoadString(hInstance, IDS_PROGMAN_GROUP, szProgmanPath, sizeof(szProgmanPath) / sizeof(TCHAR)); DeleteTSCFromStartMenu(szProgmanPath); LoadString(hInstance, IDS_OLD_NAME, szOldProgmanPath, sizeof(szOldProgmanPath) / sizeof(TCHAR)); DeleteTSCFromStartMenu(szOldProgmanPath); DeleteTSCProgramFiles(); DeleteTSCRegKeys(); UninstallTSACMsi(); // // Start registry and connection file migration // PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; ZeroMemory(&sinfo, sizeof(sinfo)); sinfo.cb = sizeof(sinfo); // // CreateProcess modifies buffer we pass it so it can't // be a static string // _tcscpy(szMigratePathLaunch, _T("mstsc.exe /migrate")); if (CreateProcess(NULL, // name of executable module szMigratePathLaunch, // command line string NULL, // SD NULL, // SD FALSE, // handle inheritance option CREATE_NEW_PROCESS_GROUP, // creation flags NULL, // new environment block NULL, // current directory name &sinfo, // startup information &pinfo // process information )) { DBGMSG((_T("Started mstsc.exe /migrate"))); } else { DBGMSG((_T("Failed to starte mstsc.exe /migrate: %d"), GetLastError())); } }