From 28676d58606c656a8fca4b0ad0e6e2883543fb42 Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Tue, 18 Jan 2022 10:58:25 -0800 Subject: [PATCH] Updated installation dialog box, new user interface. --- meshservice/MeshService.aps | Bin 38516 -> 162144 bytes meshservice/MeshService.rc | 95 +-- meshservice/MeshService.vcxproj | 2 + meshservice/MeshService.vcxproj.filters | 4 + meshservice/ServiceMain.c | 751 +++++++++++++----------- meshservice/mc.bmp | Bin 0 -> 120054 bytes meshservice/resource.h | 12 +- meshservice/stdafx.h | 2 + microscript/ILibDuktape_Commit.h | 4 +- 9 files changed, 505 insertions(+), 365 deletions(-) create mode 100644 meshservice/mc.bmp create mode 100644 meshservice/stdafx.h diff --git a/meshservice/MeshService.aps b/meshservice/MeshService.aps index 33a660fb955e2010fb9a819e4c5aeab5aa1e45e7..a4f776c75223a3aa4b849f23bbc4dc951195d603 100644 GIT binary patch literal 162144 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പL(-sfjNQUFtBoj^;O%PTJ$HMVx1% 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 delta 16977 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 b(1x8`b%wmPiwCr6OUxG<@u&Q$FyQ|HqjQgr diff --git a/meshservice/MeshService.rc b/meshservice/MeshService.rc index 5c44024..5e08579 100644 --- a/meshservice/MeshService.rc +++ b/meshservice/MeshService.rc @@ -12,6 +12,24 @@ ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// Neutral resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU) +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL +#pragma code_page(1252) + +///////////////////////////////////////////////////////////////////////////// +// +// Bitmap +// + +IDB_BITMAP_MC BITMAP "mc.bmp" + +#endif // Neutral resources +///////////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////////// // English (United States) resources @@ -45,16 +63,6 @@ END #endif // APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON1 ICON "MeshService.ico" - - ///////////////////////////////////////////////////////////////////////////// // // Version @@ -98,30 +106,38 @@ END // Dialog // -IDD_INSTALLDIALOG DIALOGEX 0, 100, 317, 148 -STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION +IDD_INSTALLDIALOG DIALOGEX 0, 100, 308, 153 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "MeshCentral Agent" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - PUSHBUTTON "Close",IDCANCEL,260,127,50,14 - LTEXT "Click the buttons below to install or uninstall the mesh agent. When installed, this software runs in the background allowing this computer to be managed and controlled by a remote administrator.",IDC_DESCRIPTION,7,7,275,28 - GROUPBOX "Installation Information",IDC_STATIC,7,38,303,87 - PUSHBUTTON "Install / Update",IDC_INSTALLBUTTON,7,127,65,14 - PUSHBUTTON "Uninstall",IDC_UNINSTALLBUTTON,75,127,65,14 - ICON IDI_ICON1,IDC_STATIC,288,7,20,20 - LTEXT "Current Agent Status",IDC_AGENTSTATUS_TEXT,14,51,100,8 - LTEXT "Unknown",IDC_STATUSTEXT,127,51,175,8,0,WS_EX_RIGHT - LTEXT "New Agent Version",IDC_AGENT_VERSION,14,63, 100,8 - LTEXT "Unknown",IDC_VERSIONTEXT,127,63,175,8,0,WS_EX_RIGHT - LTEXT "New Group Id",IDC_MESH_IDENTIFIER,14,99, 100,8 - LTEXT "Unknown",IDC_HASHTEXT,127,99,175,8,0,WS_EX_RIGHT - LTEXT "New Group Name",IDC_MESH_NAME,14,87, 100,8 - LTEXT "Unknown",IDC_POLICYTEXT,127,87,175,8,0,WS_EX_RIGHT - LTEXT "New Server Identifier",IDC_SERVER_IDENTIFIER,14,111, 100,8 - LTEXT "Unknown",IDC_SERVERID,127,111,175,8,0,WS_EX_RIGHT - LTEXT "New Server Location",IDC_SERVER_LOCATION,14,75, 100,8 - LTEXT "Unknown",IDC_SERVERLOCATION,127,75,175,8,0,WS_EX_RIGHT - PUSHBUTTON "Connect",IDC_CONNECTBUTTON,143,127,65,14 + PUSHBUTTON "Close",IDCLOSE,251,132,50,14 + PUSHBUTTON "Install / Update",IDC_INSTALLBUTTON,7,132,65,14 + PUSHBUTTON "Uninstall",IDC_UNINSTALLBUTTON,75,132,65,14 + PUSHBUTTON "Connect",IDC_CONNECTBUTTON,143,132,65,14 + LTEXT "Click the buttons below to install or uninstall this remote management software. When installed, this software runs in the background allowing this computer to be managed and controlled by a remote administrator.",IDC_STATIC_LEFTTEXT,7,7,171,63 + LTEXT "Static",IDC_STATIC_LINE,7,128,294,1 + PUSHBUTTON "Connection Details...",IDC_DETAILSBUTTON,7,111,97,14 +END + +IDD_DETAILSDIALOG DIALOGEX 0, 0, 311, 102 +STYLE DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Connection Details" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,254,81,50,14 + LTEXT "Agent Status",IDC_AGENTSTATUS_TEXT,7,7,100,8 + LTEXT "Unknown",IDC_STATUSTEXT,129,7,175,8,0,WS_EX_RIGHT + LTEXT "Agent Version",IDC_AGENT_VERSION,7,19,100,8 + LTEXT "Unknown",IDC_VERSIONTEXT,129,19,175,8,0,WS_EX_RIGHT + LTEXT "Group Identifier",IDC_MESH_IDENTIFIER,7,67,100,8 + LTEXT "Unknown",IDC_HASHTEXT,129,67,175,8,0,WS_EX_RIGHT + LTEXT "Group Name",IDC_MESH_NAME,7,55,100,8 + LTEXT "Unknown",IDC_POLICYTEXT,129,55,175,8,0,WS_EX_RIGHT + LTEXT "Server Identifier",IDC_SERVER_IDENTIFIER,7,43,100,8 + LTEXT "Unknown",IDC_SERVERID,129,43,175,8,0,WS_EX_RIGHT + LTEXT "Server Location",IDC_SERVER_LOCATION,7,31,100,8 + LTEXT "Unknown",IDC_SERVERLOCATION,129,31,175,8,0,WS_EX_RIGHT END @@ -136,9 +152,17 @@ BEGIN IDD_INSTALLDIALOG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 310 + RIGHTMARGIN, 301 TOPMARGIN, 7 - BOTTOMMARGIN, 141 + BOTTOMMARGIN, 146 + END + + IDD_DETAILSDIALOG, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 304 + TOPMARGIN, 7 + BOTTOMMARGIN, 95 END END #endif // APSTUDIO_INVOKED @@ -154,6 +178,11 @@ BEGIN 0 END +IDD_DETAILSDIALOG AFX_DIALOG_LAYOUT +BEGIN + 0 +END + #endif // English (United States) resources ///////////////////////////////////////////////////////////////////////////// diff --git a/meshservice/MeshService.vcxproj b/meshservice/MeshService.vcxproj index 2923e3b..17d2ce4 100644 --- a/meshservice/MeshService.vcxproj +++ b/meshservice/MeshService.vcxproj @@ -552,6 +552,7 @@ + @@ -666,6 +667,7 @@ + diff --git a/meshservice/MeshService.vcxproj.filters b/meshservice/MeshService.vcxproj.filters index 22b2a96..7c40f45 100644 --- a/meshservice/MeshService.vcxproj.filters +++ b/meshservice/MeshService.vcxproj.filters @@ -30,6 +30,9 @@ Resource Files + + Resource Files + @@ -355,5 +358,6 @@ Microscript + \ No newline at end of file diff --git a/meshservice/ServiceMain.c b/meshservice/ServiceMain.c index 11ce6b0..e0f23b2 100644 --- a/meshservice/ServiceMain.c +++ b/meshservice/ServiceMain.c @@ -15,11 +15,11 @@ limitations under the License. */ #if defined(WINSOCK2) - #include - #include +#include +#include #elif defined(WINSOCK1) - #include - #include +#include +#include #endif #include @@ -57,6 +57,7 @@ TCHAR* serviceName = TEXT("Mesh Agent background service"); SERVICE_STATUS serviceStatus; SERVICE_STATUS_HANDLE serviceStatusHandle = 0; INT_PTR CALLBACK DialogHandler(HWND, UINT, WPARAM, LPARAM); +INT_PTR CALLBACK DialogHandler2(HWND, UINT, WPARAM, LPARAM); MeshAgentHostContainer *agent = NULL; DWORD g_serviceArgc; @@ -64,6 +65,9 @@ char **g_serviceArgv; extern int gRemoteMouseRenderDefault; char *DIALOG_LANG = NULL; +HBRUSH DialogBackgroundBrush = NULL; +HBITMAP g_hbmLogo = NULL; + /* extern int g_TrustedHashSet; extern char g_TrustedHash[32]; @@ -75,6 +79,7 @@ extern char* g_ServiceProxyHost; extern int g_ServiceConnectFlags; */ + #if defined(_LINKVM) extern DWORD WINAPI kvm_server_mainloop(LPVOID Param); #endif @@ -82,12 +87,12 @@ extern DWORD WINAPI kvm_server_mainloop(LPVOID Param); BOOL IsAdmin() { BOOL admin; - PSID AdministratorsGroup; + PSID AdministratorsGroup; SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; - if ((admin = AllocateAndInitializeSid( &NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup)) != 0) + if ((admin = AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup)) != 0) { - if (!CheckTokenMembership( NULL, AdministratorsGroup, &admin)) admin = FALSE; + if (!CheckTokenMembership(NULL, AdministratorsGroup, &admin)) admin = FALSE; FreeSid(AdministratorsGroup); } return admin; @@ -96,12 +101,12 @@ BOOL IsAdmin() BOOL RunAsAdmin(char* args, int isAdmin) { WCHAR szPath[_MAX_PATH + 100]; - if (GetModuleFileNameW(NULL, szPath, sizeof(szPath)/2)) + if (GetModuleFileNameW(NULL, szPath, sizeof(szPath) / 2)) { SHELLEXECUTEINFOW sei = { sizeof(sei) }; sei.hwnd = NULL; sei.nShow = SW_NORMAL; - sei.lpVerb = isAdmin?L"open":L"runas"; + sei.lpVerb = isAdmin ? L"open" : L"runas"; sei.lpFile = szPath; sei.lpParameters = ILibUTF8ToWide(args, -1); return ShellExecuteExW(&sei); @@ -109,68 +114,68 @@ BOOL RunAsAdmin(char* args, int isAdmin) return FALSE; } -DWORD WINAPI ServiceControlHandler( DWORD controlCode, DWORD eventType, void *eventData, void* eventContext ) +DWORD WINAPI ServiceControlHandler(DWORD controlCode, DWORD eventType, void *eventData, void* eventContext) { switch (controlCode) { - case SERVICE_CONTROL_INTERROGATE: + case SERVICE_CONTROL_INTERROGATE: + break; + case SERVICE_CONTROL_SHUTDOWN: + case SERVICE_CONTROL_STOP: + serviceStatus.dwCurrentState = SERVICE_STOP_PENDING; + SetServiceStatus(serviceStatusHandle, &serviceStatus); + if (agent != NULL) { MeshAgent_Stop(agent); } + return(0); + case SERVICE_CONTROL_POWEREVENT: + switch (eventType) + { + case PBT_APMPOWERSTATUSCHANGE: // Power status has changed. break; - case SERVICE_CONTROL_SHUTDOWN: - case SERVICE_CONTROL_STOP: - serviceStatus.dwCurrentState = SERVICE_STOP_PENDING; - SetServiceStatus( serviceStatusHandle, &serviceStatus ); - if (agent != NULL) { MeshAgent_Stop(agent); } - return(0); - case SERVICE_CONTROL_POWEREVENT: - switch (eventType) - { - case PBT_APMPOWERSTATUSCHANGE: // Power status has changed. - break; - case PBT_APMRESUMEAUTOMATIC: // Operation is resuming automatically from a low - power state.This message is sent every time the system resumes. - break; - case PBT_APMRESUMESUSPEND: // Operation is resuming from a low - power state.This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key. - break; - case PBT_APMSUSPEND: // System is suspending operation. - break; - case PBT_POWERSETTINGCHANGE: // Power setting change event has been received. - break; - } + case PBT_APMRESUMEAUTOMATIC: // Operation is resuming automatically from a low - power state.This message is sent every time the system resumes. break; - case SERVICE_CONTROL_SESSIONCHANGE: - if (agent == NULL) - { - break; // If there isn't an agent, no point in doing anything, cuz nobody will hear us - } + case PBT_APMRESUMESUSPEND: // Operation is resuming from a low - power state.This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key. + break; + case PBT_APMSUSPEND: // System is suspending operation. + break; + case PBT_POWERSETTINGCHANGE: // Power setting change event has been received. + break; + } + break; + case SERVICE_CONTROL_SESSIONCHANGE: + if (agent == NULL) + { + break; // If there isn't an agent, no point in doing anything, cuz nobody will hear us + } - switch (eventType) - { - case WTS_CONSOLE_CONNECT: // The session identified by lParam was connected to the console terminal or RemoteFX session. - break; - case WTS_CONSOLE_DISCONNECT: // The session identified by lParam was disconnected from the console terminal or RemoteFX session. - break; - case WTS_REMOTE_CONNECT: // The session identified by lParam was connected to the remote terminal. - break; - case WTS_REMOTE_DISCONNECT: // The session identified by lParam was disconnected from the remote terminal. - break; - case WTS_SESSION_LOGON: // A user has logged on to the session identified by lParam. - case WTS_SESSION_LOGOFF: // A user has logged off the session identified by lParam. - break; - case WTS_SESSION_LOCK: // The session identified by lParam has been locked. - break; - case WTS_SESSION_UNLOCK: // The session identified by lParam has been unlocked. - break; - case WTS_SESSION_REMOTE_CONTROL:// The session identified by lParam has changed its remote controlled status.To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric. - break; - case WTS_SESSION_CREATE: // Reserved for future use. - case WTS_SESSION_TERMINATE: // Reserved for future use. - break; - } + switch (eventType) + { + case WTS_CONSOLE_CONNECT: // The session identified by lParam was connected to the console terminal or RemoteFX session. break; - default: + case WTS_CONSOLE_DISCONNECT: // The session identified by lParam was disconnected from the console terminal or RemoteFX session. break; + case WTS_REMOTE_CONNECT: // The session identified by lParam was connected to the remote terminal. + break; + case WTS_REMOTE_DISCONNECT: // The session identified by lParam was disconnected from the remote terminal. + break; + case WTS_SESSION_LOGON: // A user has logged on to the session identified by lParam. + case WTS_SESSION_LOGOFF: // A user has logged off the session identified by lParam. + break; + case WTS_SESSION_LOCK: // The session identified by lParam has been locked. + break; + case WTS_SESSION_UNLOCK: // The session identified by lParam has been unlocked. + break; + case WTS_SESSION_REMOTE_CONTROL:// The session identified by lParam has changed its remote controlled status.To determine the status, call GetSystemMetrics and check the SM_REMOTECONTROL metric. + break; + case WTS_SESSION_CREATE: // Reserved for future use. + case WTS_SESSION_TERMINATE: // Reserved for future use. + break; + } + break; + default: + break; } - SetServiceStatus( serviceStatusHandle, &serviceStatus ); + SetServiceStatus(serviceStatusHandle, &serviceStatus); return(0); } @@ -182,8 +187,8 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) WCHAR str[_MAX_PATH]; - UNREFERENCED_PARAMETER( argc ); - UNREFERENCED_PARAMETER( argv ); + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); // Initialise service status serviceStatus.dwServiceType = SERVICE_WIN32; @@ -204,7 +209,7 @@ void WINAPI ServiceMain(DWORD argc, LPTSTR *argv) // Service running serviceStatus.dwControlsAccepted |= (SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_POWEREVENT | SERVICE_ACCEPT_SESSIONCHANGE); serviceStatus.dwCurrentState = SERVICE_RUNNING; - SetServiceStatus( serviceStatusHandle, &serviceStatus); + SetServiceStatus(serviceStatusHandle, &serviceStatus); // Get our own executable name GetModuleFileNameW(NULL, str, _MAX_PATH); @@ -251,7 +256,7 @@ int RunService(int argc, char* argv[]) g_serviceArgc = argc; g_serviceArgv = argv; - return StartServiceCtrlDispatcher( serviceTable ); + return StartServiceCtrlDispatcher(serviceTable); } // SERVICE_STOPPED 1 The service is not running. @@ -269,21 +274,21 @@ int GetServiceState(LPCSTR servicename) if (serviceControlManager) { - SC_HANDLE service = OpenService( serviceControlManager, servicename, SERVICE_QUERY_STATUS ); + SC_HANDLE service = OpenService(serviceControlManager, servicename, SERVICE_QUERY_STATUS); if (service) { SERVICE_STATUS serviceStatusEx; - if ( QueryServiceStatus( service, &serviceStatusEx) ) + if (QueryServiceStatus(service, &serviceStatusEx)) { r = serviceStatusEx.dwCurrentState; } - CloseServiceHandle( service ); + CloseServiceHandle(service); } else { r = 100; } - CloseServiceHandle( serviceControlManager ); + CloseServiceHandle(serviceControlManager); } return r; } @@ -291,9 +296,9 @@ int GetServiceState(LPCSTR servicename) /* int APIENTRY _tWinMain(HINSTANCE hInstance, - HINSTANCE hPrevInstance, - LPTSTR lpCmdLine, - int nCmdShow) + HINSTANCE hPrevInstance, + LPTSTR lpCmdLine, + int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); @@ -335,7 +340,7 @@ int wmain(int argc, char* wargv[]) int retCode = 0; int argvi, argvsz; - char **argv = (char**)ILibMemory_SmartAllocate((argc+1) * sizeof(void*)); + char **argv = (char**)ILibMemory_SmartAllocate((argc + 1) * sizeof(void*)); for (argvi = 0; argvi < argc; ++argvi) { argvsz = WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, NULL, 0, NULL, NULL); @@ -343,9 +348,9 @@ int wmain(int argc, char* wargv[]) WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, argv[argvi], argvsz, NULL, NULL); } - if (argc > 1 && (strcasecmp(argv[1], "-finstall") == 0 || strcasecmp(argv[1], "-funinstall") == 0 || + if (argc > 1 && (strcasecmp(argv[1], "-finstall") == 0 || strcasecmp(argv[1], "-funinstall") == 0 || strcasecmp(argv[1], "-fulluninstall") == 0 || strcasecmp(argv[1], "-fullinstall") == 0 || - strcasecmp(argv[1], "-install")==0 || strcasecmp(argv[1], "-uninstall") == 0 || + strcasecmp(argv[1], "-install") == 0 || strcasecmp(argv[1], "-uninstall") == 0 || strcasecmp(argv[1], "-state") == 0)) { argv[argc] = argv[1]; @@ -547,9 +552,9 @@ int wmain(int argc, char* wargv[]) wmain_free(argv); return(0); } - #if defined(_LINKVM) +#if defined(_LINKVM) if (argc > 1 && strcasecmp(argv[1], "-kvm0") == 0) - { + { void **parm = (void**)ILibMemory_Allocate(4 * sizeof(void*), 0, 0, NULL); parm[0] = kvm_serviceWriteSink; ((int*)&(parm[2]))[0] = 0; @@ -625,7 +630,7 @@ int wmain(int argc, char* wargv[]) wmain_free(argv); return 0; } - #endif +#endif if (integratedJavaScript != NULL || (argc > 0 && strcasecmp(argv[0], "--slave") == 0) || (argc > 1 && ((strcasecmp(argv[1], "run") == 0) || (strcasecmp(argv[1], "connect") == 0) || (strcasecmp(argv[1], "--slave") == 0)))) { // Run the mesh agent in console mode, since the agent is compiled for windows service, the KVM will not work right. This is only good for testing. @@ -652,7 +657,7 @@ int wmain(int argc, char* wargv[]) return(retCode); } else if (argc > 1 && memcmp(argv[1], "-update:", 8) == 0) - { + { char *update = ILibMemory_Allocate(1024, 0, NULL, NULL); int updateLen; @@ -704,13 +709,15 @@ int wmain(int argc, char* wargv[]) { // Reset the firewall rules GetModuleFileNameW(NULL, str, _MAX_PATH); - if (IsAdmin() == FALSE) { printf("Must run as administrator"); } else { ClearWindowsFirewall(str); SetupWindowsFirewall(str); printf("Done"); } + if (IsAdmin() == FALSE) { printf("Must run as administrator"); } + else { ClearWindowsFirewall(str); SetupWindowsFirewall(str); printf("Done"); } } else if (argc > 1 && (strcasecmp(argv[1], "-clearfirewall") == 0)) { // Clear the firewall rules GetModuleFileNameW(NULL, str, _MAX_PATH); - if (IsAdmin() == FALSE) { printf("Must run as administrator"); } else { ClearWindowsFirewall(str); printf("Done"); } + if (IsAdmin() == FALSE) { printf("Must run as administrator"); } + else { ClearWindowsFirewall(str); printf("Done"); } } #endif else if (argc == 2 && (strcasecmp(argv[1], "-resetnodeid") == 0)) @@ -718,9 +725,9 @@ int wmain(int argc, char* wargv[]) // Set "resetnodeid" in registry HKEY hKey; #ifndef _WIN64 - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE | KEY_WOW64_32KEY, &hKey) == ERROR_SUCCESS ) + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE | KEY_WOW64_32KEY, &hKey) == ERROR_SUCCESS) #else - if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE, &hKey) == ERROR_SUCCESS ) + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Open Source\\MeshAgent2", 0, KEY_WRITE, &hKey) == ERROR_SUCCESS) #endif { i = 1; @@ -774,7 +781,7 @@ int wmain(int argc, char* wargv[]) void *dialogchain = ILibCreateChain(); ILibChain_PartialStart(dialogchain); duk_context *ctx = ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx(0, 0, dialogchain, NULL, NULL, selfexe, NULL, NULL, dialogchain); - if (duk_peval_string(ctx, "require('util-language').current.toUpperCase().split('-').join('_');") == 0) + if (duk_peval_string(ctx, "require('util-language').current.toUpperCase().split('-').join('_');") == 0) { lang = (char*)duk_safe_to_string(ctx, -1); printf("Current Language: %s\n", lang); @@ -814,7 +821,7 @@ int wmain(int argc, char* wargv[]) printf(" --WebProxy=\"http://proxyhost:port\" Specify an HTTPS proxy.\r\n"); printf(" --agentName=\"alternate name\" Specify an alternate name to be provided by the agent.\r\n"); } - else if(skip==0) + else if (skip == 0) { // This is only supported on Windows 8 / Windows Server 2012 R2 and newer FreeConsole(); @@ -892,269 +899,312 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP UNREFERENCED_PARAMETER(lParam); switch (message) { - case WM_INITDIALOG: + case WM_CTLCOLORDLG: { + // Set the background of the dialog box to blue + if (DialogBackgroundBrush == NULL) { + DialogBackgroundBrush = CreateSolidBrush(RGB(0, 54, 105)); + } + return (INT_PTR)DialogBackgroundBrush; + } + case WM_CTLCOLORSTATIC: { + // Set the left text to white over transparent + if ((HWND)lParam == GetDlgItem(hDlg, IDC_STATIC_LEFTTEXT)) { - char selfexe[_MAX_PATH]; - char *lang = NULL; + SetBkMode((HDC)wParam, TRANSPARENT); + SetTextColor((HDC)wParam, RGB(255, 255, 255)); + return (INT_PTR)GetStockObject(NULL_BRUSH); + } + break; + } + case WM_PAINT: + { + // Paint the logo + // TODO: We need to auto-scale the image to fit + // TODO: Paint using GDI+ with transparency support + if (g_hbmLogo != NULL) { + BITMAP bm; + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hDlg, &ps); + HDC hdcMem = CreateCompatibleDC(hdc); + HBITMAP hbmOld = SelectObject(hdcMem, g_hbmLogo); + GetObject(g_hbmLogo, sizeof(bm), &bm); + BitBlt(hdc, 326, 14, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY); + SelectObject(hdcMem, hbmOld); + DeleteDC(hdcMem); + EndPaint(hDlg, &ps); + } + break; + } + case WM_INITDIALOG: + { + char selfexe[_MAX_PATH]; + char *lang = NULL; - WCHAR *agentstatus = NULL; - WCHAR *agentversion = NULL; - WCHAR *serverlocation = NULL; - WCHAR *meshname = NULL; - WCHAR *meshidentitifer = NULL; - WCHAR *serveridentifier = NULL; - WCHAR *dialogdescription = NULL; - WCHAR *install_buttontext = NULL; - WCHAR *update_buttontext = NULL; - WCHAR *uninstall_buttontext = NULL; - WCHAR *connect_buttontext = NULL; - WCHAR *cancel_buttontext = NULL; - WCHAR *disconnect_buttontext = NULL; - WCHAR *state_notinstalled = NULL; - WCHAR *state_running = NULL; - WCHAR *state_notrunning = NULL; + WCHAR *agentstatus = NULL; + WCHAR *agentversion = NULL; + WCHAR *serverlocation = NULL; + WCHAR *meshname = NULL; + WCHAR *meshidentitifer = NULL; + WCHAR *serveridentifier = NULL; + WCHAR *dialogdescription = NULL; + WCHAR *install_buttontext = NULL; + WCHAR *update_buttontext = NULL; + WCHAR *uninstall_buttontext = NULL; + WCHAR *connect_buttontext = NULL; + WCHAR *close_buttontext = NULL; + WCHAR *disconnect_buttontext = NULL; + WCHAR *state_notinstalled = NULL; + WCHAR *state_running = NULL; + WCHAR *state_notrunning = NULL; - // Get current executable path - WCHAR wselfexe[MAX_PATH]; - GetModuleFileNameW(NULL, wselfexe, sizeof(wselfexe) / 2); - ILibWideToUTF8Ex(wselfexe, -1, selfexe, (int)sizeof(selfexe)); + // Load the bitmap + // TODO: We need to load a PNG from the .MSH file if present + g_hbmLogo = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP_MC)); - void *dialogchain = ILibCreateChain(); - ILibChain_PartialStart(dialogchain); - duk_context *ctx = ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx(0, 0, dialogchain, NULL, NULL, selfexe, NULL, NULL, dialogchain); - if (duk_peval_string(ctx, "require('util-language').current.toLowerCase().split('_').join('-');") == 0) { lang = (char*)duk_safe_to_string(ctx, -1); } - if (duk_peval_string(ctx, "(function foo(){return(JSON.parse(_MSH().translation));})()") != 0 || !duk_has_prop_string(ctx, -1, "en")) - { - duk_push_object(ctx); // [translation][en] - duk_push_string(ctx, "Install"); duk_put_prop_string(ctx, -2, "install"); - duk_push_string(ctx, "Uninstall"); duk_put_prop_string(ctx, -2, "uninstall"); - duk_push_string(ctx, "Connect"); duk_put_prop_string(ctx, -2, "connect"); - duk_push_string(ctx, "Disconnect"); duk_put_prop_string(ctx, -2, "disconnect"); - duk_push_string(ctx, "Update"); duk_put_prop_string(ctx, -2, "update"); - duk_push_array(ctx); - duk_push_string(ctx, "NOT INSTALLED"); duk_array_push(ctx, -2); - duk_push_string(ctx, "RUNNING"); duk_array_push(ctx, -2); - duk_push_string(ctx, "NOT RUNNING"); duk_array_push(ctx, -2); - duk_put_prop_string(ctx, -2, "status"); - duk_put_prop_string(ctx, -2, "en"); // [translation] - } - - if (DIALOG_LANG != NULL) { lang = DIALOG_LANG; } - if (!duk_has_prop_string(ctx, -1, lang)) - { - duk_push_string(ctx, lang); // [obj][string] - duk_string_split(ctx, -1, "-"); // [obj][string][array] - duk_array_shift(ctx, -1); // [obj][string][array][string] - lang = (char*)duk_safe_to_string(ctx, -1); - duk_dup(ctx, -4); // [obj][string][array][string][obj] - } - if (!duk_has_prop_string(ctx, -1, lang)) - { - lang = "en"; - } + // Get current executable path + WCHAR wselfexe[MAX_PATH]; + GetModuleFileNameW(NULL, wselfexe, sizeof(wselfexe) / 2); + ILibWideToUTF8Ex(wselfexe, -1, selfexe, (int)sizeof(selfexe)); - if (strcmp("en", lang) != 0) + void *dialogchain = ILibCreateChain(); + ILibChain_PartialStart(dialogchain); + duk_context *ctx = ILibDuktape_ScriptContainer_InitializeJavaScriptEngineEx(0, 0, dialogchain, NULL, NULL, selfexe, NULL, NULL, dialogchain); + if (duk_peval_string(ctx, "require('util-language').current.toLowerCase().split('_').join('-');") == 0) { lang = (char*)duk_safe_to_string(ctx, -1); } + if (duk_peval_string(ctx, "(function foo(){return(JSON.parse(_MSH().translation));})()") != 0 || !duk_has_prop_string(ctx, -1, "en")) + { + duk_push_object(ctx); // [translation][en] + duk_push_string(ctx, "Install"); duk_put_prop_string(ctx, -2, "install"); + duk_push_string(ctx, "Uninstall"); duk_put_prop_string(ctx, -2, "uninstall"); + duk_push_string(ctx, "Connect"); duk_put_prop_string(ctx, -2, "connect"); + duk_push_string(ctx, "Disconnect"); duk_put_prop_string(ctx, -2, "disconnect"); + duk_push_string(ctx, "Update"); duk_put_prop_string(ctx, -2, "update"); + duk_push_array(ctx); + duk_push_string(ctx, "NOT INSTALLED"); duk_array_push(ctx, -2); + duk_push_string(ctx, "RUNNING"); duk_array_push(ctx, -2); + duk_push_string(ctx, "NOT RUNNING"); duk_array_push(ctx, -2); + duk_put_prop_string(ctx, -2, "status"); + duk_put_prop_string(ctx, -2, "en"); // [translation] + } + + if (DIALOG_LANG != NULL) { lang = DIALOG_LANG; } + if (!duk_has_prop_string(ctx, -1, lang)) + { + duk_push_string(ctx, lang); // [obj][string] + duk_string_split(ctx, -1, "-"); // [obj][string][array] + duk_array_shift(ctx, -1); // [obj][string][array][string] + lang = (char*)duk_safe_to_string(ctx, -1); + duk_dup(ctx, -4); // [obj][string][array][string][obj] + } + if (!duk_has_prop_string(ctx, -1, lang)) + { + lang = "en"; + } + + if (strcmp("en", lang) != 0) + { + // Not English, so check the minimum set is present + duk_get_prop_string(ctx, -1, "en"); // [en] + duk_get_prop_string(ctx, -2, lang); // [en][lang] + duk_enum(ctx, -2, DUK_ENUM_OWN_PROPERTIES_ONLY);// [en][lang][enum] + while (duk_next(ctx, -1, 1)) // [en][lang][enum][key][val] { - // Not English, so check the minimum set is present - duk_get_prop_string(ctx, -1, "en"); // [en] - duk_get_prop_string(ctx, -2, lang); // [en][lang] - duk_enum(ctx, -2, DUK_ENUM_OWN_PROPERTIES_ONLY);// [en][lang][enum] - while (duk_next(ctx, -1, 1)) // [en][lang][enum][key][val] + if (!duk_has_prop_string(ctx, -4, duk_get_string(ctx, -2))) { - if (!duk_has_prop_string(ctx, -4, duk_get_string(ctx, -2))) - { - duk_put_prop(ctx, -4); // [en][lang][enum] - } - else - { - duk_pop_2(ctx); // [en][lang][enum] - } + duk_put_prop(ctx, -4); // [en][lang][enum] } - duk_pop_3(ctx); // ... - } - - if (duk_has_prop_string(ctx, -1, lang)) - { - duk_get_prop_string(ctx, -1, lang); - - agentstatus = Dialog_GetTranslation(ctx, "statusDescription"); - if (agentstatus != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENTSTATUS_TEXT), agentstatus); } - - agentversion = Dialog_GetTranslation(ctx, "agentVersion"); - if (agentversion != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENT_VERSION), agentversion); } - - serverlocation = Dialog_GetTranslation(ctx, "url"); - if (serverlocation != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_LOCATION), serverlocation); } - - meshname = Dialog_GetTranslation(ctx, "meshName"); - if (meshname != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_NAME), meshname); } - - meshidentitifer = Dialog_GetTranslation(ctx, "meshId"); - if (meshidentitifer != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_IDENTIFIER), meshidentitifer); } - - serveridentifier = Dialog_GetTranslation(ctx, "serverId"); - if (serveridentifier != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_IDENTIFIER), serveridentifier); } - - dialogdescription = Dialog_GetTranslation(ctx, "description"); - if (dialogdescription != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_DESCRIPTION), dialogdescription); } - - install_buttontext = Dialog_GetTranslation(ctx, "install"); - update_buttontext = Dialog_GetTranslation(ctx, "update"); - uninstall_buttontext = Dialog_GetTranslation(ctx, "uninstall"); - cancel_buttontext = Dialog_GetTranslation(ctx, "cancel"); - disconnect_buttontext = Dialog_GetTranslation(ctx, "disconnect"); - if (disconnect_buttontext != NULL) + else { - wcscpy_s(closeButtonText, sizeof(closeButtonText) / 2, disconnect_buttontext); - closeButtonTextSet = 1; + duk_pop_2(ctx); // [en][lang][enum] } - - if (uninstall_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), uninstall_buttontext); } - connect_buttontext = Dialog_GetTranslation(ctx, "connect"); - if (connect_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_CONNECTBUTTON), connect_buttontext); } - if (cancel_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDCANCEL), cancel_buttontext); } - - duk_get_prop_string(ctx, -1, "status"); // [Array] - state_notinstalled = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 0, NULL)); - state_running = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 1, NULL)); - state_notrunning = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 2, NULL)); } - + duk_pop_3(ctx); // ... + } - fileName = MeshAgent_MakeAbsolutePath(selfexe, ".msh"); + if (duk_has_prop_string(ctx, -1, lang)) + { + duk_get_prop_string(ctx, -1, lang); + + agentstatus = Dialog_GetTranslation(ctx, "statusDescription"); + if (agentstatus != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENTSTATUS_TEXT), agentstatus); } + + agentversion = Dialog_GetTranslation(ctx, "agentVersion"); + if (agentversion != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_AGENT_VERSION), agentversion); } + + serverlocation = Dialog_GetTranslation(ctx, "url"); + if (serverlocation != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_LOCATION), serverlocation); } + + meshname = Dialog_GetTranslation(ctx, "meshName"); + if (meshname != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_NAME), meshname); } + + meshidentitifer = Dialog_GetTranslation(ctx, "meshId"); + if (meshidentitifer != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_MESH_IDENTIFIER), meshidentitifer); } + + serveridentifier = Dialog_GetTranslation(ctx, "serverId"); + if (serveridentifier != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_SERVER_IDENTIFIER), serveridentifier); } + + dialogdescription = Dialog_GetTranslation(ctx, "description"); + if (dialogdescription != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_STATIC_LEFTTEXT), dialogdescription); } + + install_buttontext = Dialog_GetTranslation(ctx, "install"); + update_buttontext = Dialog_GetTranslation(ctx, "update"); + uninstall_buttontext = Dialog_GetTranslation(ctx, "uninstall"); + close_buttontext = Dialog_GetTranslation(ctx, "close"); + disconnect_buttontext = Dialog_GetTranslation(ctx, "disconnect"); + if (disconnect_buttontext != NULL) { - DWORD dwSize = 0; - BYTE *pVersionInfo = NULL; - VS_FIXEDFILEINFO *pFileInfo = NULL; - UINT pLenFileInfo = 0; - int major, minor, hotfix, other; + wcscpy_s(closeButtonText, sizeof(closeButtonText) / 2, disconnect_buttontext); + closeButtonTextSet = 1; + } - if ((dwSize = GetFileVersionInfoSizeW(wselfexe, NULL))) - { - if ((pVersionInfo = malloc(dwSize)) == NULL) { ILIBCRITICALEXIT(254); } - if (GetFileVersionInfoW(wselfexe, 0, dwSize, pVersionInfo)) + if (uninstall_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), uninstall_buttontext); } + connect_buttontext = Dialog_GetTranslation(ctx, "connect"); + if (connect_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDC_CONNECTBUTTON), connect_buttontext); } + if (close_buttontext != NULL) { SetWindowTextW(GetDlgItem(hDlg, IDCLOSE), close_buttontext); } + + duk_get_prop_string(ctx, -1, "status"); // [Array] + state_notinstalled = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 0, NULL)); + state_running = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 1, NULL)); + state_notrunning = Dialog_GetTranslationEx(ctx, Duktape_GetStringPropertyIndexValue(ctx, -1, 2, NULL)); + } + + + fileName = MeshAgent_MakeAbsolutePath(selfexe, ".msh"); + { + DWORD dwSize = 0; + BYTE *pVersionInfo = NULL; + VS_FIXEDFILEINFO *pFileInfo = NULL; + UINT pLenFileInfo = 0; + int major, minor, hotfix, other; + + if ((dwSize = GetFileVersionInfoSizeW(wselfexe, NULL))) + { + if ((pVersionInfo = malloc(dwSize)) == NULL) { ILIBCRITICALEXIT(254); } + if (GetFileVersionInfoW(wselfexe, 0, dwSize, pVersionInfo)) + { + if (VerQueryValue(pVersionInfo, TEXT("\\"), (LPVOID*)&pFileInfo, &pLenFileInfo)) { - if (VerQueryValue(pVersionInfo, TEXT("\\"), (LPVOID*)&pFileInfo, &pLenFileInfo)) - { - // Display the version of this software - major = (pFileInfo->dwFileVersionMS >> 16) & 0xffff; - minor = (pFileInfo->dwFileVersionMS) & 0xffff; - hotfix = (pFileInfo->dwFileVersionLS >> 16) & 0xffff; - other = (pFileInfo->dwFileVersionLS) & 0xffff; + // Display the version of this software + major = (pFileInfo->dwFileVersionMS >> 16) & 0xffff; + minor = (pFileInfo->dwFileVersionMS) & 0xffff; + hotfix = (pFileInfo->dwFileVersionLS >> 16) & 0xffff; + other = (pFileInfo->dwFileVersionLS) & 0xffff; #ifdef _WIN64 - if (SOURCE_COMMIT_DATE != NULL) - { - sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s, 64bit", SOURCE_COMMIT_DATE); - } - else - { - sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d, 64bit", major, minor, hotfix); - } -#else - if (SOURCE_COMMIT_DATE != NULL) - { - sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s", SOURCE_COMMIT_DATE); - } - else - { - sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d", major, minor, hotfix); - } -#endif - SetWindowTextA(GetDlgItem(hDlg, IDC_VERSIONTEXT), ILibScratchPad); + if (SOURCE_COMMIT_DATE != NULL) + { + sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s, 64bit", SOURCE_COMMIT_DATE); } + else + { + sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d, 64bit", major, minor, hotfix); + } +#else + if (SOURCE_COMMIT_DATE != NULL) + { + sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "%s", SOURCE_COMMIT_DATE); + } + else + { + sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "v%d.%d.%d", major, minor, hotfix); + } +#endif + SetWindowTextA(GetDlgItem(hDlg, IDC_VERSIONTEXT), ILibScratchPad); } - free(pVersionInfo); } + free(pVersionInfo); } + } - if (duk_peval_string(ctx, "_MSH();") == 0) - { - int installFlagsInt = 0; - WINDOWPLACEMENT lpwndpl; + if (duk_peval_string(ctx, "_MSH();") == 0) + { + int installFlagsInt = 0; + WINDOWPLACEMENT lpwndpl; - installFlags = Duktape_GetStringPropertyValue(ctx, -1, "InstallFlags", NULL); - meshname = (WCHAR*)Duktape_GetStringPropertyValue(ctx, -1, "MeshName", NULL); - meshid = Duktape_GetStringPropertyValue(ctx, -1, "MeshID", NULL); - serverid = Duktape_GetStringPropertyValue(ctx, -1, "ServerID", NULL); - serverurl = Duktape_GetStringPropertyValue(ctx, -1, "MeshServer", NULL); - displayName = Duktape_GetStringPropertyValue(ctx, -1, "displayName", NULL); - meshServiceName = Duktape_GetStringPropertyValue(ctx, -1, "meshServiceName", NULL); + installFlags = Duktape_GetStringPropertyValue(ctx, -1, "InstallFlags", NULL); + meshname = (WCHAR*)Duktape_GetStringPropertyValue(ctx, -1, "MeshName", NULL); + meshid = Duktape_GetStringPropertyValue(ctx, -1, "MeshID", NULL); + serverid = Duktape_GetStringPropertyValue(ctx, -1, "ServerID", NULL); + serverurl = Duktape_GetStringPropertyValue(ctx, -1, "MeshServer", NULL); + displayName = Duktape_GetStringPropertyValue(ctx, -1, "displayName", NULL); + meshServiceName = Duktape_GetStringPropertyValue(ctx, -1, "meshServiceName", NULL); - // Set text in the dialog box - if (installFlags != NULL) { installFlagsInt = ILib_atoi2_int32(installFlags, 255); } - if (strnlen_s(meshid, 255) > 50) { meshid += 2; meshid[42] = 0; } - if (strnlen_s(serverid, 255) > 50) { serverid[42] = 0; } - if (displayName != NULL) { SetWindowTextW(hDlg, ILibUTF8ToWide(displayName, -1)); } - SetWindowTextW(GetDlgItem(hDlg, IDC_POLICYTEXT), ILibUTF8ToWide((meshname != NULL) ? (char*)meshname : "(None)", -1)); - SetWindowTextA(GetDlgItem(hDlg, IDC_HASHTEXT), (meshid != NULL) ? meshid : "(None)"); - SetWindowTextW(GetDlgItem(hDlg, IDC_SERVERLOCATION), ILibUTF8ToWide((serverurl != NULL) ? serverurl : "(None)", -1)); - SetWindowTextA(GetDlgItem(hDlg, IDC_SERVERID), (serverid != NULL) ? serverid : "(None)"); - if (meshid == NULL) { EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE); } - if ((installFlagsInt & 3) == 1) { - // Temporary Agent Only - hiddenButtons |= 6; // Both install and uninstall buttons are hidden - ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE); - ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE); - GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl); - SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl); - } else if ((installFlagsInt & 3) == 2) { - // Background Only - hiddenButtons |= 1; // Connect button is hidden hidden - ShowWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), SW_HIDE); - } else if ((installFlagsInt & 3) == 3) { - // Uninstall only - GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl); - SetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl); - hiddenButtons |= 5; // Both install and connect buttons are hidden - ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE); - ShowWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), SW_HIDE); - } - } - else - { - EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE); - } - - // Get the current service running state - int r = GetServiceState(meshServiceName != NULL ? meshServiceName : serviceFile); - SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), update_buttontext); - - switch (r) - { - case SERVICE_RUNNING: - SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_running); - break; - case 0: - case 100: // Not installed - SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notinstalled); - SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), install_buttontext); - hiddenButtons |= 2; // Uninstall buttons is hidden - ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE); - break; - default: // Not running - SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notrunning); - break; - } - - // Correct the placement of buttons, push them to the left side if some of them are hidden. - if (hiddenButtons == 2) { // Uninstall button is the only one hidden. Place connect button at uninstall position - WINDOWPLACEMENT lpwndpl; - GetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl); - SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl); - } else if (hiddenButtons == 6) { // Only connect button is showing, place it in the install button location - WINDOWPLACEMENT lpwndpl; + // Set text in the dialog box + if (installFlags != NULL) { installFlagsInt = ILib_atoi2_int32(installFlags, 255); } + if (strnlen_s(meshid, 255) > 50) { meshid += 2; meshid[42] = 0; } + if (strnlen_s(serverid, 255) > 50) { serverid[42] = 0; } + if (displayName != NULL) { SetWindowTextW(hDlg, ILibUTF8ToWide(displayName, -1)); } + SetWindowTextW(GetDlgItem(hDlg, IDC_POLICYTEXT), ILibUTF8ToWide((meshname != NULL) ? (char*)meshname : "(None)", -1)); + SetWindowTextA(GetDlgItem(hDlg, IDC_HASHTEXT), (meshid != NULL) ? meshid : "(None)"); + SetWindowTextW(GetDlgItem(hDlg, IDC_SERVERLOCATION), ILibUTF8ToWide((serverurl != NULL) ? serverurl : "(None)", -1)); + SetWindowTextA(GetDlgItem(hDlg, IDC_SERVERID), (serverid != NULL) ? serverid : "(None)"); + if (meshid == NULL) { EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE); } + if ((installFlagsInt & 3) == 1) { + // Temporary Agent Only + hiddenButtons |= 6; // Both install and uninstall buttons are hidden + ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE); + ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE); GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl); SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl); } - - if (mshfile != NULL) { free(mshfile); } - Duktape_SafeDestroyHeap(ctx); - ILibStopChain(dialogchain); - ILibStartChain(dialogchain); - return (INT_PTR)TRUE; + else if ((installFlagsInt & 3) == 2) { + // Background Only + hiddenButtons |= 1; // Connect button is hidden hidden + ShowWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), SW_HIDE); + } + else if ((installFlagsInt & 3) == 3) { + // Uninstall only + GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl); + SetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl); + hiddenButtons |= 5; // Both install and connect buttons are hidden + ShowWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), SW_HIDE); + ShowWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), SW_HIDE); + } } + else + { + EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE); + } + + // Get the current service running state + int r = GetServiceState(meshServiceName != NULL ? meshServiceName : serviceFile); + SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), update_buttontext); + + switch (r) + { + case SERVICE_RUNNING: + SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_running); + break; + case 0: + case 100: // Not installed + SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notinstalled); + SetWindowTextW(GetDlgItem(hDlg, IDC_INSTALLBUTTON), install_buttontext); + hiddenButtons |= 2; // Uninstall buttons is hidden + ShowWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), SW_HIDE); + break; + default: // Not running + SetWindowTextW(GetDlgItem(hDlg, IDC_STATUSTEXT), state_notrunning); + break; + } + + // Correct the placement of buttons, push them to the left side if some of them are hidden. + if (hiddenButtons == 2) { // Uninstall button is the only one hidden. Place connect button at uninstall position + WINDOWPLACEMENT lpwndpl; + GetWindowPlacement(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), &lpwndpl); + SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl); + } + else if (hiddenButtons == 6) { // Only connect button is showing, place it in the install button location + WINDOWPLACEMENT lpwndpl; + GetWindowPlacement(GetDlgItem(hDlg, IDC_INSTALLBUTTON), &lpwndpl); + SetWindowPlacement(GetDlgItem(hDlg, IDC_CONNECTBUTTON), &lpwndpl); + } + + if (mshfile != NULL) { free(mshfile); } + Duktape_SafeDestroyHeap(ctx); + ILibStopChain(dialogchain); + ILibStartChain(dialogchain); + return (INT_PTR)TRUE; + } case WM_COMMAND: - if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCLOSE || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); @@ -1165,13 +1215,17 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP return (INT_PTR)TRUE; } + else if (LOWORD(wParam) == IDC_DETAILSBUTTON) { + DialogBoxW(NULL, MAKEINTRESOURCEW(IDD_DETAILSDIALOG), hDlg, DialogHandler2); + return (INT_PTR)TRUE; + } else if (LOWORD(wParam) == IDC_INSTALLBUTTON || LOWORD(wParam) == IDC_UNINSTALLBUTTON) { BOOL result = FALSE; - EnableWindow( GetDlgItem( hDlg, IDC_INSTALLBUTTON ), FALSE ); - EnableWindow( GetDlgItem( hDlg, IDC_UNINSTALLBUTTON ), FALSE ); - EnableWindow( GetDlgItem( hDlg, IDCANCEL ), FALSE ); + EnableWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), FALSE); + EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), FALSE); + EnableWindow(GetDlgItem(hDlg, IDCLOSE), FALSE); if (LOWORD(wParam) == IDC_INSTALLBUTTON) { @@ -1190,7 +1244,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP { EnableWindow(GetDlgItem(hDlg, IDC_INSTALLBUTTON), TRUE); EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), TRUE); - EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE); + EnableWindow(GetDlgItem(hDlg, IDCLOSE), TRUE); } #ifdef _DEBUG @@ -1200,7 +1254,7 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP return (INT_PTR)TRUE; } - else if (LOWORD(wParam) == IDC_CONNECTBUTTON) + else if (LOWORD(wParam) == IDC_CONNECTBUTTON) { // // Temporary Agent @@ -1209,12 +1263,12 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP EnableWindow(GetDlgItem(hDlg, IDC_UNINSTALLBUTTON), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_CONNECTBUTTON), FALSE); SetWindowTextA(GetDlgItem(hDlg, IDC_STATUSTEXT), "Running as temporary agent"); - + DWORD pid = GetCurrentProcessId(); sprintf_s(ILibScratchPad, sizeof(ILibScratchPad), "connect --disableUpdate=1 --hideConsole=1 --exitPID=%u", pid); if (RunAsAdmin(ILibScratchPad, IsAdmin() == TRUE) == 0) { RunAsAdmin(ILibScratchPad, 1); } - if (closeButtonTextSet != 0) { SetWindowTextW(GetDlgItem(hDlg, IDCANCEL), closeButtonText); } + if (closeButtonTextSet != 0) { SetWindowTextW(GetDlgItem(hDlg, IDCLOSE), closeButtonText); } return (INT_PTR)TRUE; } break; @@ -1224,6 +1278,49 @@ INT_PTR CALLBACK DialogHandler(HWND hDlg, UINT message, WPARAM wParam, LPARAM lP #endif + +// Message handler for details dialog box. +INT_PTR CALLBACK DialogHandler2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + char *fileName = NULL, *meshname = NULL, *meshid = NULL, *serverid = NULL, *serverurl = NULL, *installFlags = NULL, *mshfile = NULL; + char *displayName = NULL, *meshServiceName = NULL; + int hiddenButtons = 0; // Flags: 1 if "Connect" is hidden, 2 if "Uninstall" is hidden, 4 is "Install is hidden" + + UNREFERENCED_PARAMETER(lParam); + switch (message) + { + case WM_CTLCOLORDLG: { + // Set the background of the dialog box to blue + if (DialogBackgroundBrush == NULL) { + DialogBackgroundBrush = CreateSolidBrush(RGB(0, 54, 105)); + } + return (INT_PTR)DialogBackgroundBrush; + } + case WM_CTLCOLORSTATIC: { + // Set the left text to white over transparent + SetBkMode((HDC)wParam, TRANSPARENT); + SetTextColor((HDC)wParam, RGB(255, 255, 255)); + return (INT_PTR)GetStockObject(NULL_BRUSH); + break; + } + case WM_INITDIALOG: + { + + break; + } + case WM_COMMAND: + { + if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCLOSE || LOWORD(wParam) == IDCANCEL) + { + EndDialog(hDlg, LOWORD(wParam)); + return (INT_PTR)TRUE; + } + } + } + return (INT_PTR)FALSE; +} + + #ifdef _MINCORE BOOL WINAPI AreFileApisANSI(void) { return FALSE; } VOID WINAPI FatalAppExitA(_In_ UINT uAction, _In_ LPCSTR lpMessageText) {} diff --git a/meshservice/mc.bmp b/meshservice/mc.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4428b8e641096318da78729a567ed79308d90c23 GIT binary patch literal 120054 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 LQw{w8ss{c)Zg2jK literal 0 HcmV?d00001 diff --git a/meshservice/resource.h b/meshservice/resource.h index e8a7944..0e0659e 100644 --- a/meshservice/resource.h +++ b/meshservice/resource.h @@ -2,8 +2,9 @@ // Microsoft Visual C++ generated include file. // Used by MeshService.rc // -#define IDI_ICON1 101 #define IDD_INSTALLDIALOG 103 +#define IDB_BITMAP_MC 108 +#define IDD_DETAILSDIALOG 111 #define IDC_BUTTON2 1002 #define IDC_INSTALLBUTTON 1002 #define IDC_BUTTON3 1004 @@ -25,14 +26,19 @@ #define IDC_MESH_IDENTIFIER 1016 #define IDC_SERVER_IDENTIFIER 1017 #define IDC_DESCRIPTION 1018 +#define IDC_TAB2 1021 +#define IDC_TABS 1021 +#define IDC_STATIC_LEFTTEXT 1022 +#define IDC_STATIC_LINE 1024 +#define IDC_DETAILSBUTTON 1031 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 106 +#define _APS_NEXT_RESOURCE_VALUE 113 #define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1019 +#define _APS_NEXT_CONTROL_VALUE 1032 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/meshservice/stdafx.h b/meshservice/stdafx.h new file mode 100644 index 0000000..77c3409 --- /dev/null +++ b/meshservice/stdafx.h @@ -0,0 +1,2 @@ +#pragma once +#include diff --git a/microscript/ILibDuktape_Commit.h b/microscript/ILibDuktape_Commit.h index 6d7f426..de3c947 100644 --- a/microscript/ILibDuktape_Commit.h +++ b/microscript/ILibDuktape_Commit.h @@ -1,3 +1,3 @@ // This file is auto-generated, any edits may be overwritten -#define SOURCE_COMMIT_DATE "2021-Jul-11 11:42:24-0700" -#define SOURCE_COMMIT_HASH "5618516cb96f22a24ae06fc910a61cfeb2d9eaa9" +#define SOURCE_COMMIT_DATE "2022-Jan-17 15:14:56-0800" +#define SOURCE_COMMIT_HASH "44edd37fdbf2650de46cd04653525add37a15c6b"