diff --git a/.gitignore b/.gitignore index b5661f8e..4de24967 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ $RECYCLE.BIN/ +.vs/ debug/ release/ x64/ @@ -29,5 +30,6 @@ Desktop.ini *.exp *.user *.iobj +*.ipch *.ipdb *.ilk diff --git a/CHANGELOG.md b/CHANGELOG.md index ccf1a7d8..13513956 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +v2.0.18 (20 October 2017) ++ added setting to disable proxy support (win8 and above only) ++ prevent notifications duplicate +- fixed windows firewall disabling on win10 +- fixed notifications sound configuration does not saved +- fixed notifications sound does not played on some systems +- cosmetic fixes about notifications cross button +- updated localization +- updated blocklist +- fixed dpi support +- fixed ui bugs + v2.0.17 (12 October 2017) + clear notifications cache on apply filters and configuration + show more address information on notification window tooltip @@ -5,7 +17,7 @@ v2.0.17 (12 October 2017) - fixed ui hangouts for a long time sometimes - fixed race conditions - fixed ui bugs -- fixed bugs +- fixed bugs v2.0.16 (6 October 2017) - fixed internal rules configuration saving diff --git a/bin/History.txt b/bin/History.txt index 1ce632ce..13513956 100644 --- a/bin/History.txt +++ b/bin/History.txt @@ -1,3 +1,15 @@ +v2.0.18 (20 October 2017) ++ added setting to disable proxy support (win8 and above only) ++ prevent notifications duplicate +- fixed windows firewall disabling on win10 +- fixed notifications sound configuration does not saved +- fixed notifications sound does not played on some systems +- cosmetic fixes about notifications cross button +- updated localization +- updated blocklist +- fixed dpi support +- fixed ui bugs + v2.0.17 (12 October 2017) + clear notifications cache on apply filters and configuration + show more address information on notification window tooltip diff --git a/bin/i18n/!example.txt b/bin/i18n/!example.txt index 271a33f2..76720a71 100644 Binary files a/bin/i18n/!example.txt and b/bin/i18n/!example.txt differ diff --git a/bin/i18n/Chinese (Simplified).ini b/bin/i18n/Chinese (Simplified).ini index 1822ce14..5e00278d 100644 Binary files a/bin/i18n/Chinese (Simplified).ini and b/bin/i18n/Chinese (Simplified).ini differ diff --git a/bin/i18n/Finnish.ini b/bin/i18n/Finnish.ini index 7addeee3..14b2fc39 100644 Binary files a/bin/i18n/Finnish.ini and b/bin/i18n/Finnish.ini differ diff --git a/bin/i18n/French.ini b/bin/i18n/French.ini index 39a00939..b152e0ad 100644 Binary files a/bin/i18n/French.ini and b/bin/i18n/French.ini differ diff --git a/bin/i18n/German.ini b/bin/i18n/German.ini index 2d0544a9..7a3a8db6 100644 Binary files a/bin/i18n/German.ini and b/bin/i18n/German.ini differ diff --git a/bin/i18n/Hungarian.ini b/bin/i18n/Hungarian.ini index 4596a6a3..6b3f3d30 100644 Binary files a/bin/i18n/Hungarian.ini and b/bin/i18n/Hungarian.ini differ diff --git a/bin/i18n/Korean.ini b/bin/i18n/Korean.ini index 4645ca5e..b25eec31 100644 Binary files a/bin/i18n/Korean.ini and b/bin/i18n/Korean.ini differ diff --git a/bin/i18n/Persian.ini b/bin/i18n/Persian.ini index 4e6938d4..0dec991a 100644 Binary files a/bin/i18n/Persian.ini and b/bin/i18n/Persian.ini differ diff --git a/bin/i18n/Polish.ini b/bin/i18n/Polish.ini index 1173a6ea..62531412 100644 Binary files a/bin/i18n/Polish.ini and b/bin/i18n/Polish.ini differ diff --git a/bin/i18n/Portuguese (Brazilian).ini b/bin/i18n/Portuguese (Brazilian).ini index 6637ab74..653c75f8 100644 Binary files a/bin/i18n/Portuguese (Brazilian).ini and b/bin/i18n/Portuguese (Brazilian).ini differ diff --git a/bin/i18n/Russian.ini b/bin/i18n/Russian.ini index d26805f9..c1d8f63a 100644 Binary files a/bin/i18n/Russian.ini and b/bin/i18n/Russian.ini differ diff --git a/bin/i18n/Spanish.ini b/bin/i18n/Spanish.ini index f799d5f1..a528459c 100644 Binary files a/bin/i18n/Spanish.ini and b/bin/i18n/Spanish.ini differ diff --git a/build.bat b/build.bat index 8f83c9f8..cb3077b7 100644 --- a/build.bat +++ b/build.bat @@ -1,4 +1,4 @@ @echo off cd ..\builder -build simplewall simplewall 2.0.13 +build simplewall simplewall 2.0.18 diff --git a/simplewall.vcxproj b/simplewall.vcxproj index dc396a29..c27a6dd1 100644 --- a/simplewall.vcxproj +++ b/simplewall.vcxproj @@ -21,7 +21,7 @@ {7FB76828-A353-4113-82D7-CD728EED81DF} simplewall - 8.1 + 10.0.16299.0 simplewall v4.5 @@ -29,28 +29,28 @@ Application true - v140 + v141 Unicode true Application false - v140 + v141 true Unicode Application true - v140 + v141 Unicode true Application false - v140 + v141 true Unicode diff --git a/src/app.hpp b/src/app.hpp index 064b0fe0..75935173 100644 --- a/src/app.hpp +++ b/src/app.hpp @@ -6,8 +6,8 @@ #define APP_NAME L"simplewall" #define APP_NAME_SHORT L"simplewall" -#define APP_VERSION L"2.0.17" -#define APP_VERSION_RES 2,0,17 +#define APP_VERSION L"2.0.18" +#define APP_VERSION_RES 2,0,18 #define APP_COPYRIGHT L"(c) 2016, 2017 " _APP_AUTHOR L". All Rights Reserved." #endif // __APP_H__ diff --git a/src/main.cpp b/src/main.cpp index 3acdd450..a50800b9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -86,7 +86,7 @@ void _app_logerror (LPCWSTR fn, DWORD result, LPCWSTR desc, bool is_nopopups = f } } -DWORD _mps_changeconfig (bool is_stop) +void _mps_changeconfig (bool is_stop) { DWORD result = 0; bool is_started = false; @@ -99,7 +99,10 @@ DWORD _mps_changeconfig (bool is_stop) } else { - LPCWSTR arr[] = {L"mpssvc", L"mpsdrv"}; + LPCWSTR arr[] = { + L"mpssvc", + L"mpsdrv", + }; for (INT i = 0; i < _countof (arr); i++) { @@ -107,7 +110,10 @@ DWORD _mps_changeconfig (bool is_stop) if (!sc) { - _app_logerror (L"OpenService", GetLastError (), arr[i]); + result = GetLastError (); + + if (result != ERROR_ACCESS_DENIED) + _app_logerror (L"OpenService", GetLastError (), arr[i]); } else { @@ -133,8 +139,7 @@ DWORD _mps_changeconfig (bool is_stop) // start services if (is_stop) { - if (is_started) - _r_run (nullptr, L"netsh advfirewall set allprofiles state off", nullptr, SW_HIDE); + _r_run (nullptr, L"netsh advfirewall set allprofiles state off", nullptr, SW_HIDE); } else { @@ -177,8 +182,6 @@ DWORD _mps_changeconfig (bool is_stop) CloseServiceHandle (scm); } - - return result; } void _app_listviewresize (HWND hwnd) @@ -362,16 +365,16 @@ void _app_refreshstatus (HWND hwnd, bool first_part, bool second_part) { case ModeWhitelist: { - _r_listview_setgroup (hwnd, IDC_LISTVIEW, 0, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_ALLOWED, 0), group1_count), nullptr); - _r_listview_setgroup (hwnd, IDC_LISTVIEW, 1, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_BLOCKED, 0), group2_count), nullptr); + _r_listview_setgroup (hwnd, IDC_LISTVIEW, 0, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_ALLOWED, 0), group1_count)); + _r_listview_setgroup (hwnd, IDC_LISTVIEW, 1, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_BLOCKED, 0), group2_count)); break; } case ModeBlacklist: { - _r_listview_setgroup (hwnd, IDC_LISTVIEW, 0, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_BLOCKED, 0), group1_count), nullptr); - _r_listview_setgroup (hwnd, IDC_LISTVIEW, 1, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_ALLOWED, 0), group2_count), nullptr); + _r_listview_setgroup (hwnd, IDC_LISTVIEW, 0, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_BLOCKED, 0), group1_count)); + _r_listview_setgroup (hwnd, IDC_LISTVIEW, 1, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_ALLOWED, 0), group2_count)); break; } @@ -729,8 +732,8 @@ size_t _app_addapplication (HWND hwnd, rstring path, __time64_t timestamp, bool config.is_nocheckboxnotify = true; - _r_listview_additem (hwnd, IDC_LISTVIEW, app.ConfigGet (L"ShowFilenames", true).AsBool () ? ptr_app->file_name : path, item, 0, ptr_app->icon_id, ptr_app->is_enabled ? 0 : 1, hash); - _r_listview_setitem (hwnd, IDC_LISTVIEW, _r_fmt_date (ptr_app->timestamp, FDTF_SHORTDATE | FDTF_SHORTTIME), item, 1); + _r_listview_additem (hwnd, IDC_LISTVIEW, item, 0, app.ConfigGet (L"ShowFilenames", true).AsBool () ? ptr_app->file_name : path, ptr_app->icon_id, ptr_app->is_enabled ? 0 : 1, hash); + _r_listview_setitem (hwnd, IDC_LISTVIEW, item, 1, _r_fmt_date (ptr_app->timestamp, FDTF_SHORTDATE | FDTF_SHORTTIME)); _r_listview_setitemcheck (hwnd, IDC_LISTVIEW, item, is_checked); @@ -959,47 +962,55 @@ rstring _app_gettooltip (size_t hash) if (ptr_app->description) StringCchCopy (ptr_app->description, buffer.GetLength () + 1, buffer); } + else + { + // prevent retrieving information in future + ptr_app->description = (LPWSTR)malloc (sizeof (WCHAR)); // 1 char + + if (ptr_app->description) + ptr_app->description[0] = 0; // null + } } if (!buffer.IsEmpty ()) { - buffer.Insert (L"\r\n" + I18N (&app, IDS_FILEPATH, 0) + L":\r\n" TAB_SPACE, 0); + buffer.InsertFormat (0, L"\r\n%s:\r\n" TAB_SPACE, I18N (&app, IDS_FILE, 0)); result.Append (buffer); } } // signature if (ptr_app->is_signed && ptr_app->signer) - result.Append (_r_fmt (L"\r\n%s:\r\n" TAB_SPACE L"%s", I18N (&app, IDS_SIGNATURE, 0), ptr_app->signer)); + result.AppendFormat (L"\r\n%s:\r\n" TAB_SPACE L"%s", I18N (&app, IDS_SIGNATURE, 0), ptr_app->signer); // notes { rstring buffer; if ((ptr_app->is_enabled && ptr_app->error_count) || ((!ptr_app->is_picoapp && !ptr_app->is_network && ptr_app->real_path[0] != L'\\' && !_r_fs_exists (ptr_app->real_path)))) - buffer.Append (TAB_SPACE + I18N (&app, IDS_HIGHLIGHT_INVALID, 0) + L"\r\n"); + buffer.AppendFormat (TAB_SPACE L"%s\r\n", I18N (&app, IDS_HIGHLIGHT_INVALID, 0)); if (ptr_app->is_network) - buffer.Append (TAB_SPACE + I18N (&app, IDS_HIGHLIGHT_NETWORK, 0) + L"\r\n"); + buffer.AppendFormat (TAB_SPACE L"%s\r\n", I18N (&app, IDS_HIGHLIGHT_NETWORK, 0)); if (ptr_app->is_picoapp) - buffer.Append (TAB_SPACE + I18N (&app, IDS_HIGHLIGHT_PICO, 0) + L"\r\n"); + buffer.AppendFormat (TAB_SPACE L"%s\r\n", I18N (&app, IDS_HIGHLIGHT_PICO, 0)); if (ptr_app->is_signed) - buffer.Append (TAB_SPACE + I18N (&app, IDS_HIGHLIGHT_SIGNED, 0) + L"\r\n"); + buffer.AppendFormat (TAB_SPACE L"%s\r\n", I18N (&app, IDS_HIGHLIGHT_SIGNED, 0)); if (ptr_app->is_silent) - buffer.Append (TAB_SPACE + I18N (&app, IDS_HIGHLIGHT_SILENT, 0) + L"\r\n"); + buffer.AppendFormat (TAB_SPACE L"%s\r\n", I18N (&app, IDS_HIGHLIGHT_SILENT, 0)); if (!ptr_app->rules.empty ()) - buffer.Append (TAB_SPACE + I18N (&app, IDS_HIGHLIGHT_SPECIAL, 0) + L"\r\n"); + buffer.AppendFormat (TAB_SPACE L"%s\r\n", I18N (&app, IDS_HIGHLIGHT_SPECIAL, 0)); if (ptr_app->is_system) - buffer.Append (TAB_SPACE + I18N (&app, IDS_HIGHLIGHT_SYSTEM, 0) + L"\r\n"); + buffer.AppendFormat (TAB_SPACE L"%s\r\n", I18N (&app, IDS_HIGHLIGHT_SYSTEM, 0)); if (!buffer.IsEmpty ()) { - buffer.Insert (L"\r\n" + I18N (&app, IDS_NOTES, 0) + L":\r\n", 0); + buffer.InsertFormat (0, L"\r\n%s:\r\n", I18N (&app, IDS_NOTES, 0)); result.Append (buffer); } } @@ -1993,9 +2004,9 @@ bool _wfp_createrulefilter (LPCWSTR name, LPCWSTR rule, LPCWSTR path, EnumRuleDi } // allow proxy connection (win8 and above) - if (_r_sys_validversion (6, 2)) + if (_r_sys_validversion (6, 2) && app.ConfigGet (L"EnableProxySupport", false).AsBool ()) { - if (!is_block && path && !rule) + if (path && dir == DirBoth && !rule) { fwfc[count].fieldKey = FWPM_CONDITION_FLAGS; fwfc[count].matchType = FWP_MATCH_FLAGS_ANY_SET; @@ -2065,7 +2076,7 @@ void _app_loadrules (HWND hwnd, LPCWSTR path, UINT rc, bool is_internal, std::ve { // show only syntax, memory and i/o errors... if (result.status != pugi::status_file_not_found) - _app_logerror (L"pugi::load_file", 0, _r_fmt (L"status: %d, offset: %d, text: %s, file: %s", result.status, result.offset, rstring (result.description ()), path)); + _app_logerror (L"pugi::load_file", 0, _r_fmt (L"status: %d, offset: %d, text: %s, file: %s", result.status, result.offset, rstring (result.description ()).GetString (), path)); // if file not found or parsing error, get internal rules (from resources) if (rc) @@ -2210,7 +2221,7 @@ void _app_profileload (HWND hwnd, LPCWSTR path_apps = nullptr, LPCWSTR path_rule { // show only syntax, memory and i/o errors... if (result.status != pugi::status_file_not_found) - _app_logerror (L"pugi::load_file", 0, _r_fmt (L"status: %d, offset: %d, text: %s, file: %s", result.status, result.offset, rstring (result.description ()), config.apps_path)); + _app_logerror (L"pugi::load_file", 0, _r_fmt (L"status: %d, offset: %d, text: %s, file: %s", result.status, result.offset, rstring (result.description ()).GetString (), config.apps_path)); } else { @@ -2816,7 +2827,7 @@ UINT _wfp_installfilters () error_count += ERROR_SUCCESS != _wfp_createfilter (L"Block all outbound connections", nullptr, 0, FILTER_WEIGHT_LOWEST, FWPM_LAYER_ALE_AUTH_CONNECT_V6, nullptr, TRUE, FALSE); // block proxy connections (win8 and above) - if (_r_sys_validversion (6, 2)) + if (_r_sys_validversion (6, 2) && app.ConfigGet (L"EnableProxySupport", false).AsBool ()) { fwfc[0].fieldKey = FWPM_CONDITION_FLAGS; fwfc[0].matchType = FWP_MATCH_FLAGS_ANY_SET; @@ -2879,7 +2890,11 @@ bool _app_installfilters (bool is_forced) SetEvent (config.stop_evt); WaitForSingleObjectEx (config.finish_evt, 8000, FALSE); - config.hthread = nullptr; + if (config.hthread) + { + CloseHandle (config.hthread); + config.hthread = nullptr; + } } config.hthread = (HANDLE)_beginthreadex (nullptr, 0, &ApplyThread, (LPVOID)true, 0, nullptr); @@ -3022,7 +3037,7 @@ void _app_logwrite (ITEM_LOG const *ptr_log) addr.Append (_r_fmt (L":%d", ptr_log->local_port)); if ((ptr_log->flags & FWPM_NET_EVENT_FLAG_REMOTE_ADDR_SET) != 0) - addr.Append (_r_fmt (L" (from %s)", ptr_log->remote_port ? _r_fmt (L"%s:%d", ptr_log->remote_addr, ptr_log->remote_port) : ptr_log->remote_addr)); + addr.Append (_r_fmt (L" (from %s)", ptr_log->remote_port ? _r_fmt (L"%s:%d", ptr_log->remote_addr, ptr_log->remote_port).GetString () : ptr_log->remote_addr)); } else if (ptr_log->direction == FWP_DIRECTION_OUT) { @@ -3030,7 +3045,7 @@ void _app_logwrite (ITEM_LOG const *ptr_log) addr.Append (_r_fmt (L":%d", ptr_log->remote_port)); if ((ptr_log->flags & FWPM_NET_EVENT_FLAG_LOCAL_ADDR_SET) != 0) - addr.Append (_r_fmt (L" (from %s)", ptr_log->local_port ? _r_fmt (L"%s:%d", ptr_log->local_addr, ptr_log->local_port) : ptr_log->local_addr)); + addr.Append (_r_fmt (L" (from %s)", ptr_log->local_port ? _r_fmt (L"%s:%d", ptr_log->local_addr, ptr_log->local_port).GetString () : ptr_log->local_addr)); } rstring filter; @@ -3041,7 +3056,7 @@ void _app_logwrite (ITEM_LOG const *ptr_log) filter = ptr_log->filter_name; rstring buffer; - buffer.Format (L"[%s] %s (%s) [%s] %s [%s]\r\n", ptr_log->date, ptr_log->full_path, ptr_log->username, addr, filter, ((ptr_log->direction == FWP_DIRECTION_IN) ? L"In" : L"Out")); + buffer.Format (L"[%s] %s (%s) [%s] %s [%s]\r\n", ptr_log->date, ptr_log->full_path, ptr_log->username, addr.GetString (), filter.GetString (), ((ptr_log->direction == FWP_DIRECTION_IN) ? L"In" : L"Out")); DWORD written = 0; WriteFile (config.hlog, buffer.GetString (), DWORD (buffer.GetLength () * sizeof (WCHAR)), &written, nullptr); @@ -3421,7 +3436,7 @@ bool _app_notifyshow (size_t idx) { SendDlgItemMessage (config.hnotification, IDC_ICON_ID, STM_SETIMAGE, IMAGE_ICON, (WPARAM)(ptr_log->hicon ? ptr_log->hicon : config.def_hicon)); - _r_ctrl_settext (config.hnotification, IDC_FILE_ID, L"%s: %s [%s]", I18N (&app, IDS_FILEPATH, 0), _r_path_extractfile (ptr_log->full_path), ptr_app->is_signed ? I18N (&app, IDS_SIGN_SIGNED, 0) : I18N (&app, IDS_SIGN_UNSIGNED, 0)); + _r_ctrl_settext (config.hnotification, IDC_FILE_ID, L"%s: %s [%s]", I18N (&app, IDS_FILEPATH, 0), _r_path_extractfile (ptr_log->full_path).GetString (), ptr_app->is_signed ? I18N (&app, IDS_SIGN_SIGNED, 0) : I18N (&app, IDS_SIGN_UNSIGNED, 0)); if (ptr_log->remote_port) _r_ctrl_settext (config.hnotification, IDC_ADDRESS_ID, L"%s: %s:%d (%s) [%s]", I18N (&app, IDS_ADDRESS, 0), ptr_log->remote_addr, ptr_log->remote_port, ptr_log->protocol, I18N (&app, IDS_DIRECTION_1 + ((ptr_log->direction == FWP_DIRECTION_IN) ? 1 : 0), _r_fmt (L"IDS_DIRECTION_%d", (ptr_log->direction == FWP_DIRECTION_IN) ? 2 : 1))); @@ -3434,7 +3449,7 @@ bool _app_notifyshow (size_t idx) _r_ctrl_settext (config.hnotification, IDC_CREATERULE_ADDR_ID, I18N (&app, IDS_NOTIFY_CREATERULE_ADDRESS, 0), ptr_log->remote_addr); _r_ctrl_settext (config.hnotification, IDC_CREATERULE_PORT_ID, I18N (&app, IDS_NOTIFY_CREATERULE_PORT, 0), ptr_log->remote_port); - _r_ctrl_settext (config.hnotification, IDC_DISABLENOTIFY_ID, I18N (&app, IDS_NOTIFY_DISABLENOTIFICATIONS, 0), _r_path_extractfile (ptr_log->full_path)); + _r_ctrl_settext (config.hnotification, IDC_DISABLENOTIFY_ID, I18N (&app, IDS_NOTIFY_DISABLENOTIFICATIONS, 0), _r_path_extractfile (ptr_log->full_path).GetString ()); _r_ctrl_settext (config.hnotification, IDC_IDX_ID, L"%d/%d", idx + 1, total_size); @@ -3515,7 +3530,10 @@ void _app_notifysound () DWORD size = _countof (config.notify_snd_path) * sizeof (WCHAR); if (RegQueryValueEx (key, nullptr, nullptr, nullptr, (LPBYTE)config.notify_snd_path, &size) == ERROR_SUCCESS) + { + StringCchCopy (config.notify_snd_path, _countof (config.notify_snd_path), _r_path_expand (config.notify_snd_path)); result = true; + } RegCloseKey (key); } @@ -3550,12 +3568,14 @@ void _app_notifyadd (ITEM_LOG const *ptr_log) return; } - // notifications limit + // clear same apps log items + _app_freenotify (LAST_VALUE, ptr_log->hash); + + // check limit if (notifications.size () >= NOTIFY_LIMIT_SIZE) - { _app_freenotify (0, 0); - _app_notifyrefresh (); - } + + _app_notifyrefresh (); ITEM_LOG* ptr_log2 = (ITEM_LOG*)malloc (sizeof (ITEM_LOG)); @@ -3851,22 +3871,22 @@ void CALLBACK _app_logcallback2 (LPVOID, const FWPM_NET_EVENT3 *pEvent) } } -void _app_freednscache () -{ - HINSTANCE h = LoadLibrary (L"dnsapi.dll"); - - if (h) - { - static BOOL (WINAPI *DoDnsFlushResolverCache)(); - - *(FARPROC *)&DoDnsFlushResolverCache = GetProcAddress (h, "DnsFlushResolverCache"); - - if (DoDnsFlushResolverCache) - DoDnsFlushResolverCache (); - - FreeLibrary (h); - } -} +//void _app_freednscache () +//{ +// HINSTANCE h = LoadLibrary (L"dnsapi.dll"); +// +// if (h) +// { +// static BOOL (WINAPI *DoDnsFlushResolverCache)(); +// +// *(FARPROC *)&DoDnsFlushResolverCache = GetProcAddress (h, "DnsFlushResolverCache"); +// +// if (DoDnsFlushResolverCache) +// DoDnsFlushResolverCache (); +// +// FreeLibrary (h); +// } +//} UINT WINAPI ApplyThread (LPVOID lparam) { @@ -3907,7 +3927,7 @@ UINT WINAPI ApplyThread (LPVOID lparam) _wfp_uninitialize (true); } - _app_freednscache (); + //_app_freednscache (); _r_fastlock_releaseexclusive (&lock_apply); @@ -4189,7 +4209,7 @@ bool _app_installmessage (HWND hwnd, bool is_install) tdr[1].nButtonID = IDM_TRAY_MODEBLACKLIST; tdr[1].pszButtonText = mode2; - StringCchCopy (mode, _countof (mode), I18N (&app, IDS_TRAY_MODE, 0) + L":"); + StringCchPrintf (mode, _countof (mode), L"%s:", I18N (&app, IDS_TRAY_MODE, 0)); StringCchCopy (mode1, _countof (mode1), I18N (&app, IDS_MODE_WHITELIST, 0)); StringCchCopy (mode2, _countof (mode2), I18N (&app, IDS_MODE_BLACKLIST, 0)); @@ -4207,7 +4227,7 @@ bool _app_installmessage (HWND hwnd, bool is_install) tdc.dwFlags |= TDF_VERIFICATION_FLAG_CHECKED; } - if (_r_msg2 (&tdc, &result, &radio_checked, &is_flagchecked)) + if (_r_msg_taskdialog (&tdc, &result, &radio_checked, &is_flagchecked)) { if (result == IDYES) { @@ -4287,6 +4307,7 @@ BOOL initializer_callback (HWND hwnd, DWORD msg, LPVOID, LPVOID) CheckMenuItem (GetMenu (hwnd), IDM_USEBLOCKLIST_CHK, MF_BYCOMMAND | (app.ConfigGet (L"UseBlocklist2", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (GetMenu (hwnd), IDM_STEALTHMODE_CHK, MF_BYCOMMAND | (app.ConfigGet (L"UseStealthMode", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (GetMenu (hwnd), IDM_INSTALLBOOTTIMEFILTERS_CHK, MF_BYCOMMAND | (app.ConfigGet (L"InstallBoottimeFilters", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); + CheckMenuItem (GetMenu (hwnd), IDM_PROXYSUPPORT_CHK, MF_BYCOMMAND | (app.ConfigGet (L"EnableProxySupport", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (GetMenu (hwnd), IDM_RULE_ALLOWINBOUND, MF_BYCOMMAND | (app.ConfigGet (L"AllowInboundConnections", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (GetMenu (hwnd), IDM_RULE_ALLOWLISTEN, MF_BYCOMMAND | (app.ConfigGet (L"AllowListenConnections2", true).AsBool () ? MF_CHECKED : MF_UNCHECKED)); @@ -4391,66 +4412,71 @@ BOOL initializer_callback (HWND hwnd, DWORD msg, LPVOID, LPVOID) { HMENU menu = GetMenu (hwnd); - app.LocaleMenu (menu, I18N (&app, IDS_FILE, 0), 0, true); - app.LocaleMenu (menu, I18N (&app, IDS_ADD_FILE, 0), IDM_ADD_FILE, false); - app.LocaleMenu (GetSubMenu (menu, 0), I18N (&app, IDS_EXPORT, 0), 2, true); - app.LocaleMenu (GetSubMenu (menu, 0), I18N (&app, IDS_IMPORT, 0), 3, true); - app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_EXPORT_APPS, 0), XML_APPS), IDM_EXPORT_APPS, false); - app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_EXPORT_RULES, 0), XML_RULES_CUSTOM), IDM_EXPORT_RULES, false); - app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_IMPORT_APPS, 0), XML_APPS), IDM_IMPORT_APPS, false); - app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_IMPORT_RULES, 0), XML_RULES_CUSTOM), IDM_IMPORT_RULES, false); - app.LocaleMenu (menu, I18N (&app, IDS_EXIT, 0), IDM_EXIT, false); + app.LocaleMenu (menu, I18N (&app, IDS_FILE, 0), 0, true, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_ADD_FILE, 0), IDM_ADD_FILE, false, nullptr); + app.LocaleMenu (GetSubMenu (menu, 0), I18N (&app, IDS_EXPORT, 0), 2, true, nullptr); + app.LocaleMenu (GetSubMenu (menu, 0), I18N (&app, IDS_IMPORT, 0), 3, true, nullptr); + app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_EXPORT_APPS, 0), XML_APPS), IDM_EXPORT_APPS, false, nullptr); + app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_EXPORT_RULES, 0), XML_RULES_CUSTOM), IDM_EXPORT_RULES, false, nullptr); + app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_IMPORT_APPS, 0), XML_APPS), IDM_IMPORT_APPS, false, nullptr); + app.LocaleMenu (menu, _r_fmt (I18N (&app, IDS_IMPORT_RULES, 0), XML_RULES_CUSTOM), IDM_IMPORT_RULES, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_EXIT, 0), IDM_EXIT, false, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_EDIT, 0), 1, true); + app.LocaleMenu (menu, I18N (&app, IDS_EDIT, 0), 1, true, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_PURGEN, 0) + L"\tCtrl+Del", IDM_PURGEN, false); + app.LocaleMenu (menu, I18N (&app, IDS_PURGEN, 0), IDM_PURGEN, false, L"\tCtrl+Del"); - app.LocaleMenu (menu, I18N (&app, IDS_FIND, 0) + L"\tCtrl+F", IDM_FIND, false); - app.LocaleMenu (menu, I18N (&app, IDS_FINDNEXT, 0) + L"\tF3", IDM_FINDNEXT, false); + app.LocaleMenu (menu, I18N (&app, IDS_FIND, 0), IDM_FIND, false, L"\tCtrl+F"); + app.LocaleMenu (menu, I18N (&app, IDS_FINDNEXT, 0), IDM_FINDNEXT, false, L"\tF3"); - app.LocaleMenu (menu, I18N (&app, IDS_REFRESH, 0) + L"\tF5", IDM_REFRESH, false); + app.LocaleMenu (menu, I18N (&app, IDS_REFRESH, 0), IDM_REFRESH, false, L"\tF5"); - app.LocaleMenu (menu, I18N (&app, IDS_VIEW, 0), 2, true); + app.LocaleMenu (menu, I18N (&app, IDS_VIEW, 0), 2, true, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_ALWAYSONTOP_CHK, 0), IDM_ALWAYSONTOP_CHK, false); - app.LocaleMenu (menu, I18N (&app, IDS_SHOWFILENAMESONLY_CHK, 0), IDM_SHOWFILENAMESONLY_CHK, false); - app.LocaleMenu (menu, I18N (&app, IDS_AUTOSIZECOLUMNS_CHK, 0), IDM_AUTOSIZECOLUMNS_CHK, false); + app.LocaleMenu (menu, I18N (&app, IDS_ALWAYSONTOP_CHK, 0), IDM_ALWAYSONTOP_CHK, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_SHOWFILENAMESONLY_CHK, 0), IDM_SHOWFILENAMESONLY_CHK, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_AUTOSIZECOLUMNS_CHK, 0), IDM_AUTOSIZECOLUMNS_CHK, false, nullptr); - app.LocaleMenu (GetSubMenu (menu, 2), I18N (&app, IDS_ICONS, 0), 4, true); - app.LocaleMenu (menu, I18N (&app, IDS_ICONSSMALL, 0), IDM_ICONSSMALL, false); - app.LocaleMenu (menu, I18N (&app, IDS_ICONSLARGE, 0), IDM_ICONSLARGE, false); - app.LocaleMenu (menu, I18N (&app, IDS_ICONSISHIDDEN, 0), IDM_ICONSISHIDDEN, false); + app.LocaleMenu (GetSubMenu (menu, 2), I18N (&app, IDS_ICONS, 0), 4, true, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_ICONSSMALL, 0), IDM_ICONSSMALL, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_ICONSLARGE, 0), IDM_ICONSLARGE, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_ICONSISHIDDEN, 0), IDM_ICONSISHIDDEN, false, nullptr); - app.LocaleMenu (GetSubMenu (menu, 2), I18N (&app, IDS_LANGUAGE, 0), LANG_MENU, true); + app.LocaleMenu (GetSubMenu (menu, 2), I18N (&app, IDS_LANGUAGE, 0), LANG_MENU, true, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_FONT, 0), IDM_FONT, false); + app.LocaleMenu (menu, I18N (&app, IDS_FONT, 0), IDM_FONT, false, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_SETTINGS, 0), 3, true); + app.LocaleMenu (menu, I18N (&app, IDS_SETTINGS, 0), 3, true, nullptr); - app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_MODE, 0), 0, true); + app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_MODE, 0), 0, true, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_MODE_WHITELIST, 0), IDM_TRAY_MODEWHITELIST, false); - app.LocaleMenu (menu, I18N (&app, IDS_MODE_BLACKLIST, 0), IDM_TRAY_MODEBLACKLIST, false); + app.LocaleMenu (menu, I18N (&app, IDS_MODE_WHITELIST, 0), IDM_TRAY_MODEWHITELIST, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_MODE_BLACKLIST, 0), IDM_TRAY_MODEBLACKLIST, false, nullptr); - app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_FILTERS, 0), 2, true); + app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_FILTERS, 0), 2, true, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_USEBLOCKLIST_CHK, 0), IDM_USEBLOCKLIST_CHK, false); - app.LocaleMenu (menu, I18N (&app, IDS_USESTEALTHMODE_CHK, 0), IDM_STEALTHMODE_CHK, false); - app.LocaleMenu (menu, I18N (&app, IDS_INSTALLBOOTTIMEFILTERS_CHK, 0), IDM_INSTALLBOOTTIMEFILTERS_CHK, false); + app.LocaleMenu (menu, I18N (&app, IDS_USEBLOCKLIST_CHK, 0), IDM_USEBLOCKLIST_CHK, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_USESTEALTHMODE_CHK, 0), IDM_STEALTHMODE_CHK, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_INSTALLBOOTTIMEFILTERS_CHK, 0), IDM_INSTALLBOOTTIMEFILTERS_CHK, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_PROXYSUPPORT_CHK, 0), IDM_PROXYSUPPORT_CHK, false, L" [BETA]"); - app.LocaleMenu (menu, I18N (&app, IDS_RULE_ALLOWINBOUND, 0), IDM_RULE_ALLOWINBOUND, false); - app.LocaleMenu (menu, I18N (&app, IDS_RULE_ALLOWLISTEN, 0), IDM_RULE_ALLOWLISTEN, false); + app.LocaleMenu (menu, I18N (&app, IDS_RULE_ALLOWINBOUND, 0), IDM_RULE_ALLOWINBOUND, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_RULE_ALLOWLISTEN, 0), IDM_RULE_ALLOWLISTEN, false, nullptr); - app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_SYSTEM_RULES, 0), 3, true); - app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_CUSTOM_RULES, 0), 4, true); - app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_LOG, 0), 5, true); + app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_SYSTEM_RULES, 0), 3, true, nullptr); + app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_CUSTOM_RULES, 0), 4, true, nullptr); + app.LocaleMenu (GetSubMenu (menu, 3), I18N (&app, IDS_TRAY_LOG, 0), 5, true, nullptr); - app.LocaleMenu (menu, I18N (&app, IDS_ENABLELOG_CHK, 0), IDM_ENABLELOG_CHK, false); - app.LocaleMenu (menu, I18N (&app, IDS_ENABLENOTIFICATIONS_CHK, 0), IDM_ENABLENOTIFICATIONS_CHK, false); - app.LocaleMenu (menu, I18N (&app, IDS_LOGSHOW, 0) + L"\tCtrl+I", IDM_LOGSHOW, false); - app.LocaleMenu (menu, I18N (&app, IDS_LOGCLEAR, 0) + L"\tCtrl+X", IDM_LOGCLEAR, false); + app.LocaleMenu (menu, I18N (&app, IDS_ENABLELOG_CHK, 0), IDM_ENABLELOG_CHK, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_ENABLENOTIFICATIONS_CHK, 0), IDM_ENABLENOTIFICATIONS_CHK, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_LOGSHOW, 0), IDM_LOGSHOW, false, L"\tCtrl+I"); + app.LocaleMenu (menu, I18N (&app, IDS_LOGCLEAR, 0), IDM_LOGCLEAR, false, L"\tCtrl+X"); - app.LocaleMenu (menu, I18N (&app, IDS_SETTINGS, 0) + L"\tCtrl+P", IDM_SETTINGS, false); + app.LocaleMenu (menu, I18N (&app, IDS_SETTINGS, 0), IDM_SETTINGS, false, L"\tCtrl+P"); + + // proxy connections (win8 and above) + if (!_r_sys_validversion (6, 2)) + EnableMenuItem (menu, IDM_PROXYSUPPORT_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); // append system rules { @@ -4529,11 +4555,11 @@ BOOL initializer_callback (HWND hwnd, DWORD msg, LPVOID, LPVOID) AppendMenu (submenu, MF_STRING, IDM_OPENRULESEDITOR, I18N (&app, IDS_OPENRULESEDITOR, 0)); } - app.LocaleMenu (menu, I18N (&app, IDS_HELP, 0), 4, true); - app.LocaleMenu (menu, I18N (&app, IDS_WEBSITE, 0), IDM_WEBSITE, false); - app.LocaleMenu (menu, I18N (&app, IDS_DONATE, 0), IDM_DONATE, false); - app.LocaleMenu (menu, I18N (&app, IDS_CHECKUPDATES, 0), IDM_CHECKUPDATES, false); - app.LocaleMenu (menu, I18N (&app, IDS_ABOUT, 0), IDM_ABOUT, false); + app.LocaleMenu (menu, I18N (&app, IDS_HELP, 0), 4, true, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_WEBSITE, 0), IDM_WEBSITE, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_DONATE, 0), IDM_DONATE, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_CHECKUPDATES, 0), IDM_CHECKUPDATES, false, nullptr); + app.LocaleMenu (menu, I18N (&app, IDS_ABOUT, 0), IDM_ABOUT, false, nullptr); app.LocaleEnum ((HWND)GetSubMenu (menu, 2), LANG_MENU, true, IDM_LANGUAGE); // enum localizations @@ -4592,12 +4618,12 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) // localize window SetWindowText (hwnd, I18N (&app, IDS_EDITOR, 0)); - SetDlgItemText (hwnd, IDC_NAME, I18N (&app, IDS_NAME, 0) + L":"); - SetDlgItemText (hwnd, IDC_RULES, I18N (&app, IDS_RULE, 0) + L":"); - SetDlgItemText (hwnd, IDC_DIRECTION, I18N (&app, IDS_DIRECTION, 0) + L":"); - SetDlgItemText (hwnd, IDC_PROTOCOL, I18N (&app, IDS_PROTOCOL, 0) + L":"); - SetDlgItemText (hwnd, IDC_IPVERSION, I18N (&app, IDS_IPVERSION, 0) + L":"); - SetDlgItemText (hwnd, IDC_ACTION, I18N (&app, IDS_ACTION, 0) + L":"); + _r_ctrl_settext (hwnd, IDC_NAME, L"%s:", I18N (&app, IDS_NAME, 0)); + _r_ctrl_settext (hwnd, IDC_RULES, L"%s:", I18N (&app, IDS_RULE, 0)); + _r_ctrl_settext (hwnd, IDC_DIRECTION, L"%s:", I18N (&app, IDS_DIRECTION, 0)); + _r_ctrl_settext (hwnd, IDC_PROTOCOL, L"%s:", I18N (&app, IDS_PROTOCOL, 0)); + _r_ctrl_settext (hwnd, IDC_IPVERSION, L"%s:", I18N (&app, IDS_IPVERSION, 0)); + _r_ctrl_settext (hwnd, IDC_ACTION, L"%s:", I18N (&app, IDS_ACTION, 0)); SetDlgItemText (hwnd, IDC_RULES_HELP, I18N (&app, IDS_RULES_HELP, 0)); SetDlgItemText (hwnd, IDC_ENABLED_CHK, I18N (&app, IDS_ENABLED_CHK, 0)); @@ -4616,16 +4642,18 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) SetDlgItemText (hwnd, IDC_RULES_EDIT, ptr_rule->rule); // direction - SendDlgItemMessage (hwnd, IDC_DIRECTION_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_DIRECTION_1, 0).GetString ()); - SendDlgItemMessage (hwnd, IDC_DIRECTION_EDIT, CB_INSERTSTRING, 1, (LPARAM)I18N (&app, IDS_DIRECTION_2, 0).GetString ()); - SendDlgItemMessage (hwnd, IDC_DIRECTION_EDIT, CB_INSERTSTRING, 2, (LPARAM)I18N (&app, IDS_DIRECTION_3, 0).GetString ()); + SendDlgItemMessage (hwnd, IDC_DIRECTION_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_DIRECTION_1, 0)); + SendDlgItemMessage (hwnd, IDC_DIRECTION_EDIT, CB_INSERTSTRING, 1, (LPARAM)I18N (&app, IDS_DIRECTION_2, 0)); + SendDlgItemMessage (hwnd, IDC_DIRECTION_EDIT, CB_INSERTSTRING, 2, (LPARAM)I18N (&app, IDS_DIRECTION_3, 0)); SendDlgItemMessage (hwnd, IDC_DIRECTION_EDIT, CB_SETCURSEL, (WPARAM)ptr_rule->dir, 0); // protocol - SendDlgItemMessage (hwnd, IDC_PROTOCOL_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_ALL, 0).GetString ()); + SendDlgItemMessage (hwnd, IDC_PROTOCOL_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_ALL, 0)); SendDlgItemMessage (hwnd, IDC_PROTOCOL_EDIT, CB_SETCURSEL, 0, 0); + SendDlgItemMessage (hwnd, IDC_PROTOCOL_EDIT, CB_SETEXTENDEDUI, 1, 0); + for (size_t i = 0; i < protocols.size (); i++) { SendDlgItemMessage (hwnd, IDC_PROTOCOL_EDIT, CB_INSERTSTRING, i + 1, (LPARAM)protocols.at (i).name); @@ -4636,7 +4664,7 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) } // address family - SendDlgItemMessage (hwnd, IDC_IPVERSION_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_ALL, 0).GetString ()); + SendDlgItemMessage (hwnd, IDC_IPVERSION_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_ALL, 0)); SendDlgItemMessage (hwnd, IDC_IPVERSION_EDIT, CB_SETITEMDATA, 0, (LPARAM)AF_UNSPEC); SendDlgItemMessage (hwnd, IDC_IPVERSION_EDIT, CB_INSERTSTRING, 1, (LPARAM)L"IPv4"); @@ -4653,8 +4681,8 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) SendDlgItemMessage (hwnd, IDC_IPVERSION_EDIT, CB_SETCURSEL, (WPARAM)2, 0); // action - SendDlgItemMessage (hwnd, IDC_ACTION_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_ACTION_1, 0).GetString ()); - SendDlgItemMessage (hwnd, IDC_ACTION_EDIT, CB_INSERTSTRING, 1, (LPARAM)I18N (&app, IDS_ACTION_2, 0).GetString ()); + SendDlgItemMessage (hwnd, IDC_ACTION_EDIT, CB_INSERTSTRING, 0, (LPARAM)I18N (&app, IDS_ACTION_1, 0)); + SendDlgItemMessage (hwnd, IDC_ACTION_EDIT, CB_INSERTSTRING, 1, (LPARAM)I18N (&app, IDS_ACTION_2, 0)); SendDlgItemMessage (hwnd, IDC_ACTION_EDIT, CB_SETCURSEL, (WPARAM)ptr_rule->is_block, 0); @@ -4742,7 +4770,7 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) if (!_app_parserulestring (rule_single, nullptr, nullptr)) { - _r_ctrl_showtip (hwnd, IDC_RULES_EDIT, APP_NAME, _r_fmt (I18N (&app, IDS_STATUS_SYNTAX_ERROR, 0), rule_single), TTI_ERROR); + _r_ctrl_showtip (hwnd, IDC_RULES_EDIT, TTI_ERROR, APP_NAME, _r_fmt (I18N (&app, IDS_STATUS_SYNTAX_ERROR, 0), rule_single.GetString ())); _r_ctrl_enable (hwnd, IDC_SAVE, false); _r_fastlock_releaseexclusive (&lock_access); @@ -4891,7 +4919,7 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) _r_listview_deleteallitems (hwnd, IDC_COLORS); _r_listview_deleteallcolumns (hwnd, IDC_COLORS); - _r_listview_addcolumn (hwnd, IDC_COLORS, nullptr, 95, 0, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_COLORS, 0, nullptr, 95, LVCFMT_LEFT); { size_t idx = 0; @@ -4902,7 +4930,7 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) config.is_nocheckboxnotify = true; - _r_listview_additem (hwnd, IDC_COLORS, I18N (&app, p.second.locale_id, p.second.locale_sid), idx, 0, LAST_VALUE, LAST_VALUE, p.first); + _r_listview_additem (hwnd, IDC_COLORS, idx, 0, I18N (&app, p.second.locale_id, p.second.locale_sid), LAST_VALUE, LAST_VALUE, p.first); _r_listview_setitemcheck (hwnd, IDC_COLORS, idx, app.ConfigGet (p.second.config_name, p.second.is_enabled).AsBool ()); config.is_nocheckboxnotify = false; @@ -4928,14 +4956,14 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) _r_listview_deleteallgroups (hwnd, IDC_EDITOR); _r_listview_deleteallcolumns (hwnd, IDC_EDITOR); - _r_listview_addcolumn (hwnd, IDC_EDITOR, I18N (&app, IDS_NAME, 0), 40, 0, LVCFMT_LEFT); - _r_listview_addcolumn (hwnd, IDC_EDITOR, I18N (&app, IDS_DIRECTION, 0), 22, 1, LVCFMT_LEFT); - _r_listview_addcolumn (hwnd, IDC_EDITOR, I18N (&app, IDS_PROTOCOL, 0), 20, 2, LVCFMT_LEFT); - _r_listview_addcolumn (hwnd, IDC_EDITOR, I18N (&app, IDS_IPVERSION, 0), 14, 3, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_EDITOR, 0, I18N (&app, IDS_NAME, 0), 40, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_EDITOR, 1, I18N (&app, IDS_DIRECTION, 0), 22, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_EDITOR, 2, I18N (&app, IDS_PROTOCOL, 0), 20, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_EDITOR, 3, I18N (&app, IDS_IPVERSION, 0), 14, LVCFMT_LEFT); - _r_listview_addgroup (hwnd, IDC_EDITOR, nullptr, 0, 0, LVGS_COLLAPSIBLE); - _r_listview_addgroup (hwnd, IDC_EDITOR, nullptr, 1, 0, LVGS_COLLAPSIBLE); - _r_listview_addgroup (hwnd, IDC_EDITOR, nullptr, 2, 0, LVGS_COLLAPSIBLE); + _r_listview_addgroup (hwnd, IDC_EDITOR, 0, nullptr, 0, LVGS_COLLAPSIBLE); + _r_listview_addgroup (hwnd, IDC_EDITOR, 1, nullptr, 0, LVGS_COLLAPSIBLE); + _r_listview_addgroup (hwnd, IDC_EDITOR, 2, nullptr, 0, LVGS_COLLAPSIBLE); std::vector const* ptr_rules = nullptr; @@ -4967,7 +4995,7 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) config.is_nocheckboxnotify = true; - _r_listview_additem (hwnd, IDC_EDITOR, ptr_rule->name, i, 0, ptr_rule->is_block ? 1 : 0, group_id, i); + _r_listview_additem (hwnd, IDC_EDITOR, i, 0, ptr_rule->name, ptr_rule->is_block ? 1 : 0, group_id, i); _r_listview_setitemcheck (hwnd, IDC_EDITOR, i, ptr_rule->is_enabled); config.is_nocheckboxnotify = false; @@ -5057,7 +5085,7 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) if (ptr_clr) { - _r_listview_setitem (hwnd, IDC_COLORS, I18N (&app, ptr_clr->locale_id, ptr_clr->locale_sid), i, 0); + _r_listview_setitem (hwnd, IDC_COLORS, i, 0, I18N (&app, ptr_clr->locale_id, ptr_clr->locale_sid)); } } @@ -5162,19 +5190,19 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) config.is_nocheckboxnotify = true; - _r_listview_setitem (hwnd, IDC_EDITOR, ptr_rule->name, i, 0, ptr_rule->is_block ? 1 : 0, group_id); - _r_listview_setitem (hwnd, IDC_EDITOR, dir, i, 1); - _r_listview_setitem (hwnd, IDC_EDITOR, protocol, i, 2); - _r_listview_setitem (hwnd, IDC_EDITOR, af, i, 3); + _r_listview_setitem (hwnd, IDC_EDITOR, i, 0, ptr_rule->name, ptr_rule->is_block ? 1 : 0, group_id); + _r_listview_setitem (hwnd, IDC_EDITOR, i, 1, dir); + _r_listview_setitem (hwnd, IDC_EDITOR, i, 2, protocol); + _r_listview_setitem (hwnd, IDC_EDITOR, i, 3, af); _r_listview_setitemcheck (hwnd, IDC_EDITOR, i, ptr_rule->is_enabled); config.is_nocheckboxnotify = false; } - _r_listview_setgroup (hwnd, IDC_EDITOR, 0, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_ENABLED, 0), group1_count), nullptr); - _r_listview_setgroup (hwnd, IDC_EDITOR, 1, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_SPECIAL, 0), group2_count), nullptr); - _r_listview_setgroup (hwnd, IDC_EDITOR, 2, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_DISABLED, 0), group3_count), nullptr); + _r_listview_setgroup (hwnd, IDC_EDITOR, 0, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_ENABLED, 0), group1_count)); + _r_listview_setgroup (hwnd, IDC_EDITOR, 1, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_SPECIAL, 0), group2_count)); + _r_listview_setgroup (hwnd, IDC_EDITOR, 2, _r_fmt (L"%s (%d)", I18N (&app, IDS_GROUP_DISABLED, 0), group3_count)); } _app_listviewsetfont (hwnd, IDC_EDITOR); @@ -5331,10 +5359,10 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) else rule.Replace (RULE_DELIMETER, L"\r\n" TAB_SPACE); - StringCchPrintf (lpnmlv->pszText, lpnmlv->cchTextMax, L"%s\r\n%s:\r\n%s%s", ptr_rule->name, I18N (&app, IDS_RULE, 0), TAB_SPACE, rule); + StringCchPrintf (lpnmlv->pszText, lpnmlv->cchTextMax, L"%s\r\n%s:\r\n%s%s", ptr_rule->name, I18N (&app, IDS_RULE, 0), TAB_SPACE, rule.GetString ()); if (ptr_rule->apps) - StringCchCat (lpnmlv->pszText, lpnmlv->cchTextMax, _r_fmt (L"\r\n%s:\r\n%s%s", I18N (&app, IDS_FILEPATH, 0), TAB_SPACE, rstring (ptr_rule->apps).Replaced (RULE_DELIMETER, L"\r\n" TAB_SPACE))); + StringCchCat (lpnmlv->pszText, lpnmlv->cchTextMax, _r_fmt (L"\r\n%s:\r\n%s%s", I18N (&app, IDS_FILEPATH, 0), TAB_SPACE, rstring (ptr_rule->apps).Replaced (RULE_DELIMETER, L"\r\n" TAB_SPACE).GetString ())); } break; @@ -5472,18 +5500,19 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) case WM_CONTEXTMENU: { - UINT ctrl_id = GetDlgCtrlID ((HWND)pmsg->wParam); + const UINT ctrl_id = GetDlgCtrlID ((HWND)pmsg->wParam); if (ctrl_id != IDC_EDITOR) break; - HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_EDITOR)), submenu = GetSubMenu (menu, 0); + const HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_EDITOR)); + const HMENU submenu = GetSubMenu (menu, 0); // localize - app.LocaleMenu (submenu, I18N (&app, IDS_CHECKALL, 0), IDM_CHECKALL, false); - app.LocaleMenu (submenu, I18N (&app, IDS_UNCHECKALL, 0), IDM_UNCHECKALL, false); - app.LocaleMenu (submenu, I18N (&app, IDS_CHECK, 0), IDM_CHECK, false); - app.LocaleMenu (submenu, I18N (&app, IDS_UNCHECK, 0), IDM_UNCHECK, false); + app.LocaleMenu (submenu, I18N (&app, IDS_CHECKALL, 0), IDM_CHECKALL, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_UNCHECKALL, 0), IDM_UNCHECKALL, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_CHECK, 0), IDM_CHECK, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_UNCHECK, 0), IDM_UNCHECK, false, nullptr); if (!SendDlgItemMessage (hwnd, ctrl_id, LVM_GETITEMCOUNT, 0, 0)) { @@ -5501,9 +5530,9 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) if (page->dlg_id == IDD_SETTINGS_RULES_CUSTOM) { - app.LocaleMenu (submenu, I18N (&app, IDS_ADD, 0), IDM_ADD, false); - app.LocaleMenu (submenu, I18N (&app, IDS_EDIT2, 0), IDM_EDIT, false); - app.LocaleMenu (submenu, I18N (&app, IDS_DELETE, 0), IDM_DELETE, false); + app.LocaleMenu (submenu, I18N (&app, IDS_ADD, 0), IDM_ADD, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_EDIT2, 0), IDM_EDIT, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_DELETE, 0), IDM_DELETE, false, nullptr); } else { @@ -5519,7 +5548,6 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) TrackPopupMenuEx (submenu, TPM_RIGHTBUTTON | TPM_LEFTBUTTON, pt.x, pt.y, hwnd, nullptr); DestroyMenu (menu); - DestroyMenu (submenu); break; } @@ -5544,9 +5572,10 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) case IDC_ENABLELOG_CHK: case IDC_LOGPATH: case IDC_LOGPATH_BTN: + case IDC_LOGSIZELIMIT_CTRL: case IDC_LOGBACKUP_CHK: case IDC_ENABLENOTIFICATIONS_CHK: - case IDC_LOGSIZELIMIT_CTRL: + case IDC_NOTIFICATIONSILENT_CHK: case IDC_NOTIFICATIONDISPLAYTIMEOUT_CTRL: case IDC_NOTIFICATIONTIMEOUT_CTRL: { @@ -5648,6 +5677,10 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) app.ConfigSet (L"LogPath", path); } } + else if (ctrl_id == IDC_LOGSIZELIMIT_CTRL && notify_code == EN_KILLFOCUS) + { + app.ConfigSet (L"LogSizeLimit", (DWORD)SendDlgItemMessage (hwnd, IDC_LOGSIZELIMIT, UDM_GETPOS32, 0, 0)); + } else if (ctrl_id == IDC_LOGBACKUP_CHK) { app.ConfigSet (L"IsLogBackup", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED)); @@ -5663,9 +5696,9 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) EnableWindow ((HWND)SendDlgItemMessage (hwnd, IDC_NOTIFICATIONTIMEOUT, UDM_GETBUDDY, 0, 0), is_enabled); EnableWindow ((HWND)SendDlgItemMessage (hwnd, IDC_NOTIFICATIONDISPLAYTIMEOUT, UDM_GETBUDDY, 0, 0), is_enabled); } - else if (ctrl_id == IDC_LOGSIZELIMIT_CTRL && notify_code == EN_KILLFOCUS) + else if (ctrl_id == IDC_NOTIFICATIONSILENT_CHK) { - app.ConfigSet (L"LogSizeLimit", (DWORD)SendDlgItemMessage (hwnd, IDC_LOGSIZELIMIT, UDM_GETPOS32, 0, 0)); + app.ConfigSet (L"IsNotificationsSilent", (IsDlgButtonChecked (hwnd, ctrl_id) == BST_CHECKED)); } else if (ctrl_id == IDC_NOTIFICATIONDISPLAYTIMEOUT_CTRL && notify_code == EN_KILLFOCUS) { @@ -5700,7 +5733,7 @@ BOOL settings_callback (HWND hwnd, DWORD msg, LPVOID lpdata1, LPVOID lpdata2) config.is_nocheckboxnotify = true; - _r_listview_additem (hwnd, IDC_EDITOR, ptr_rule->name, LAST_VALUE, 0, LAST_VALUE, 0, rules_custom.size () - 1); + _r_listview_additem (hwnd, IDC_EDITOR, LAST_VALUE, 0, ptr_rule->name, LAST_VALUE, 0, rules_custom.size () - 1); _r_listview_setitemcheck (hwnd, IDC_EDITOR, LAST_VALUE, ptr_rule->is_enabled); config.is_nocheckboxnotify = false; @@ -6453,7 +6486,9 @@ LRESULT CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp case WM_SETCURSOR: { - if (GetDlgCtrlID ((HWND)wparam) == IDC_ICON_ID) + const UINT ctrl_id = GetDlgCtrlID ((HWND)wparam); + + if (ctrl_id == IDC_ICON_ID || ctrl_id == IDC_CLOSE_BTN) { SetCursor (LoadCursor (nullptr, IDC_HAND)); @@ -6716,10 +6751,16 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) config.ntoskrnl_hash = _r_str_hash (PROC_SYSTEM_NAME); // set privileges - _r_sys_setprivilege (SE_BACKUP_NAME, true); - _r_sys_setprivilege (SE_DEBUG_NAME, true); - _r_sys_setprivilege (SE_SECURITY_NAME, true); - _r_sys_setprivilege (SE_TAKE_OWNERSHIP_NAME, true); + { + LPCWSTR privileges[] = { + SE_BACKUP_NAME, + SE_DEBUG_NAME, + SE_SECURITY_NAME, + SE_TAKE_OWNERSHIP_NAME, + }; + + _r_sys_setprivilege (privileges, _countof (privileges), true); + } // get current user security identifier if (!config.psid) @@ -6776,11 +6817,11 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) // configure listview _r_listview_setstyle (hwnd, IDC_LISTVIEW, LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP | LVS_EX_CHECKBOXES); - _r_listview_addcolumn (hwnd, IDC_LISTVIEW, I18N (&app, IDS_FILEPATH, 0), 70, 0, LVCFMT_LEFT); - _r_listview_addcolumn (hwnd, IDC_LISTVIEW, I18N (&app, IDS_ADDED, 0), 26, 1, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_LISTVIEW, 0, I18N (&app, IDS_FILEPATH, 0), 70, LVCFMT_LEFT); + _r_listview_addcolumn (hwnd, IDC_LISTVIEW, 1, I18N (&app, IDS_ADDED, 0), 26, LVCFMT_LEFT); - _r_listview_addgroup (hwnd, IDC_LISTVIEW, I18N (&app, IDS_GROUP_ALLOWED, 0), 0, 0, LVGS_COLLAPSIBLE | (app.ConfigGet (L"Group1IsCollaped", false).AsBool () ? LVGS_COLLAPSED : 0)); - _r_listview_addgroup (hwnd, IDC_LISTVIEW, I18N (&app, IDS_GROUP_BLOCKED, 0), 1, 0, LVGS_COLLAPSIBLE | (app.ConfigGet (L"Group2IsCollaped", false).AsBool () ? LVGS_COLLAPSED : 0)); + _r_listview_addgroup (hwnd, IDC_LISTVIEW, 0, I18N (&app, IDS_GROUP_ALLOWED, 0), 0, LVGS_COLLAPSIBLE | (app.ConfigGet (L"Group1IsCollaped", false).AsBool () ? LVGS_COLLAPSED : 0)); + _r_listview_addgroup (hwnd, IDC_LISTVIEW, 1, I18N (&app, IDS_GROUP_BLOCKED, 0), 0, LVGS_COLLAPSIBLE | (app.ConfigGet (L"Group2IsCollaped", false).AsBool () ? LVGS_COLLAPSED : 0)); _app_listviewsetimagelist (hwnd); _app_listviewsetfont (hwnd, IDC_LISTVIEW); @@ -6927,7 +6968,7 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) StringCchCopy (main, _countof (main), I18N (&app, IDS_QUESTION_EXIT, 0)); StringCchCopy (flag, _countof (flag), I18N (&app, IDS_ALWAYSPERFORMTHISCHECK_CHK, 0)); - if (_r_msg2 (&tdc, &result, nullptr, &is_flagchecked)) + if (_r_msg_taskdialog (&tdc, &result, nullptr, &is_flagchecked)) { if (result != IDYES) return true; @@ -7071,7 +7112,7 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) ptr_app->is_enabled = (lpnmlv->uNewState == 8192) ? true : false; - _r_listview_setitemgroup (hwnd, IDC_LISTVIEW, lpnmlv->iItem, ptr_app->is_enabled ? 0 : 1); + _r_listview_setitem (hwnd, IDC_LISTVIEW, lpnmlv->iItem, 0, nullptr, LAST_VALUE, ptr_app->is_enabled ? 0 : 1); if (lpnmlv->uNewState == 8192) _app_freenotify (LAST_VALUE, hash); @@ -7116,23 +7157,24 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { if (GetDlgCtrlID ((HWND)wparam) == IDC_LISTVIEW) { - const HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_LISTVIEW)), submenu = GetSubMenu (menu, 0); + const HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_LISTVIEW)); + const HMENU submenu = GetSubMenu (menu, 0); const HMENU submenu1 = GetSubMenu (submenu, 1); const HMENU submenu3 = GetSubMenu (submenu, 3); // localize - app.LocaleMenu (submenu, I18N (&app, IDS_ADD, 0), 0, true); - app.LocaleMenu (submenu, I18N (&app, IDS_ADD_FILE, 0), IDM_ADD_FILE, false); - app.LocaleMenu (submenu, I18N (&app, IDS_ADD_PROCESS, 0), 1, true); - app.LocaleMenu (submenu, I18N (&app, IDS_SETTINGS, 0), 3, true); - app.LocaleMenu (submenu, I18N (&app, IDS_DISABLENOTIFICATIONS, 0), IDM_DISABLENOTIFICATIONS, false); - app.LocaleMenu (submenu, I18N (&app, IDS_ALL, 0), IDM_ALL, false); - app.LocaleMenu (submenu, I18N (&app, IDS_REFRESH, 0) + L"\tF5", IDM_REFRESH2, false); - app.LocaleMenu (submenu, I18N (&app, IDS_EXPLORE, 0), IDM_EXPLORE, false); - app.LocaleMenu (submenu, I18N (&app, IDS_COPY, 0) + L"\tCtrl+C", IDM_COPY, false); - app.LocaleMenu (submenu, I18N (&app, IDS_DELETE, 0) + L"\tDel", IDM_DELETE, false); - app.LocaleMenu (submenu, I18N (&app, IDS_CHECK, 0), IDM_CHECK, false); - app.LocaleMenu (submenu, I18N (&app, IDS_UNCHECK, 0), IDM_UNCHECK, false); + app.LocaleMenu (submenu, I18N (&app, IDS_ADD, 0), 0, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_ADD_FILE, 0), IDM_ADD_FILE, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_ADD_PROCESS, 0), 1, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_SETTINGS, 0), 3, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_DISABLENOTIFICATIONS, 0), IDM_DISABLENOTIFICATIONS, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_ALL, 0), IDM_ALL, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_REFRESH, 0), IDM_REFRESH2, false, L"\tF5"); + app.LocaleMenu (submenu, I18N (&app, IDS_EXPLORE, 0), IDM_EXPLORE, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_COPY, 0), IDM_COPY, false, L"\tCtrl+C"); + app.LocaleMenu (submenu, I18N (&app, IDS_DELETE, 0), IDM_DELETE, false, L"\tDel"); + app.LocaleMenu (submenu, I18N (&app, IDS_CHECK, 0), IDM_CHECK, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_UNCHECK, 0), IDM_UNCHECK, false, nullptr); if (!SendDlgItemMessage (hwnd, IDC_LISTVIEW, LVM_GETSELECTEDCOUNT, 0, 0)) { @@ -7257,7 +7299,6 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) TrackPopupMenuEx (submenu, TPM_RIGHTBUTTON | TPM_LEFTBUTTON, pt.x, pt.y, hwnd, nullptr); DestroyMenu (menu); - DestroyMenu (submenu); } break; @@ -7331,58 +7372,61 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { SetForegroundWindow (hwnd); // don't touch - HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_TRAY)), submenu = GetSubMenu (menu, 0); + const HMENU menu = LoadMenu (nullptr, MAKEINTRESOURCE (IDM_TRAY)); + const HMENU submenu = GetSubMenu (menu, 0); // localize - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_SHOW, 0), IDM_TRAY_SHOW, false); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_SHOW, 0), IDM_TRAY_SHOW, false, nullptr); { const bool state = _wfp_isfiltersinstalled (); - app.LocaleMenu (submenu, I18N (&app, (state ? IDS_TRAY_STOP : IDS_TRAY_START), state ? L"IDS_TRAY_STOP" : L"IDS_TRAY_START"), IDM_TRAY_START, false); + app.LocaleMenu (submenu, I18N (&app, (state ? IDS_TRAY_STOP : IDS_TRAY_START), state ? L"IDS_TRAY_STOP" : L"IDS_TRAY_START"), IDM_TRAY_START, false, nullptr); } - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_MODE, 0), 3, true); - app.LocaleMenu (submenu, I18N (&app, IDS_MODE_WHITELIST, 0), IDM_TRAY_MODEWHITELIST, false); - app.LocaleMenu (submenu, I18N (&app, IDS_MODE_BLACKLIST, 0), IDM_TRAY_MODEBLACKLIST, false); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_MODE, 0), 3, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_MODE_WHITELIST, 0), IDM_TRAY_MODEWHITELIST, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_MODE_BLACKLIST, 0), IDM_TRAY_MODEBLACKLIST, false, nullptr); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_FILTERS, 0), 5, true); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_FILTERS, 0), 5, true, nullptr); - app.LocaleMenu (submenu, I18N (&app, IDS_USEBLOCKLIST_CHK, 0), IDM_TRAY_USEBLOCKLIST_CHK, false); - app.LocaleMenu (submenu, I18N (&app, IDS_USESTEALTHMODE_CHK, 0), IDM_TRAY_STEALTHMODE_CHK, false); - app.LocaleMenu (submenu, I18N (&app, IDS_INSTALLBOOTTIMEFILTERS_CHK, 0), IDM_TRAY_INSTALLBOOTTIMEFILTERS_CHK, false); + app.LocaleMenu (submenu, I18N (&app, IDS_USEBLOCKLIST_CHK, 0), IDM_TRAY_USEBLOCKLIST_CHK, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_USESTEALTHMODE_CHK, 0), IDM_TRAY_STEALTHMODE_CHK, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_INSTALLBOOTTIMEFILTERS_CHK, 0), IDM_TRAY_INSTALLBOOTTIMEFILTERS_CHK, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_PROXYSUPPORT_CHK, 0), IDM_TRAY_PROXYSUPPORT_CHK, false, L" [BETA]"); - app.LocaleMenu (submenu, I18N (&app, IDS_RULE_ALLOWINBOUND, 0), IDM_TRAY_RULE_ALLOWINBOUND, false); - app.LocaleMenu (submenu, I18N (&app, IDS_RULE_ALLOWLISTEN, 0), IDM_TRAY_RULE_ALLOWLISTEN, false); + app.LocaleMenu (submenu, I18N (&app, IDS_RULE_ALLOWINBOUND, 0), IDM_TRAY_RULE_ALLOWINBOUND, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_RULE_ALLOWLISTEN, 0), IDM_TRAY_RULE_ALLOWLISTEN, false, nullptr); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_SYSTEM_RULES, 0), 6, true); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_CUSTOM_RULES, 0), 7, true); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_SYSTEM_RULES, 0), 6, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_CUSTOM_RULES, 0), 7, true, nullptr); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_LOG, 0), 8, true); - app.LocaleMenu (submenu, I18N (&app, IDS_ENABLELOG_CHK, 0), IDM_TRAY_ENABLELOG_CHK, false); - app.LocaleMenu (submenu, I18N (&app, IDS_ENABLENOTIFICATIONS_CHK, 0), IDM_TRAY_ENABLENOTIFICATIONS_CHK, false); - app.LocaleMenu (submenu, I18N (&app, IDS_LOGSHOW, 0), IDM_TRAY_LOGSHOW, false); - app.LocaleMenu (submenu, I18N (&app, IDS_LOGCLEAR, 0), IDM_TRAY_LOGCLEAR, false); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_LOG, 0), 8, true, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_ENABLELOG_CHK, 0), IDM_TRAY_ENABLELOG_CHK, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_ENABLENOTIFICATIONS_CHK, 0), IDM_TRAY_ENABLENOTIFICATIONS_CHK, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_LOGSHOW, 0), IDM_TRAY_LOGSHOW, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_LOGCLEAR, 0), IDM_TRAY_LOGCLEAR, false, nullptr); - app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_LOGERR, 0), 9, true); + app.LocaleMenu (submenu, I18N (&app, IDS_TRAY_LOGERR, 0), 9, true, nullptr); if (_r_fs_exists (_r_dbg_getpath (APP_NAME_SHORT))) { - app.LocaleMenu (submenu, I18N (&app, IDS_LOGSHOW, 0), IDM_TRAY_LOGSHOW_ERR, false); - app.LocaleMenu (submenu, I18N (&app, IDS_LOGCLEAR, 0), IDM_TRAY_LOGCLEAR_ERR, false); + app.LocaleMenu (submenu, I18N (&app, IDS_LOGSHOW, 0), IDM_TRAY_LOGSHOW_ERR, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_LOGCLEAR, 0), IDM_TRAY_LOGCLEAR_ERR, false, nullptr); } else { EnableMenuItem (submenu, 9, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); } - app.LocaleMenu (submenu, I18N (&app, IDS_SETTINGS, 0), IDM_TRAY_SETTINGS, false); - app.LocaleMenu (submenu, I18N (&app, IDS_WEBSITE, 0), IDM_TRAY_WEBSITE, false); - app.LocaleMenu (submenu, I18N (&app, IDS_ABOUT, 0), IDM_TRAY_ABOUT, false); - app.LocaleMenu (submenu, I18N (&app, IDS_EXIT, 0), IDM_TRAY_EXIT, false); + app.LocaleMenu (submenu, I18N (&app, IDS_SETTINGS, 0), IDM_TRAY_SETTINGS, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_WEBSITE, 0), IDM_TRAY_WEBSITE, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_ABOUT, 0), IDM_TRAY_ABOUT, false, nullptr); + app.LocaleMenu (submenu, I18N (&app, IDS_EXIT, 0), IDM_TRAY_EXIT, false, nullptr); CheckMenuItem (submenu, IDM_TRAY_USEBLOCKLIST_CHK, MF_BYCOMMAND | (app.ConfigGet (L"UseBlocklist2", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (submenu, IDM_TRAY_STEALTHMODE_CHK, MF_BYCOMMAND | (app.ConfigGet (L"UseStealthMode", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (submenu, IDM_TRAY_INSTALLBOOTTIMEFILTERS_CHK, MF_BYCOMMAND | (app.ConfigGet (L"InstallBoottimeFilters", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); + CheckMenuItem (submenu, IDM_TRAY_PROXYSUPPORT_CHK, MF_BYCOMMAND | (app.ConfigGet (L"EnableProxySupport", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (submenu, IDM_TRAY_RULE_ALLOWINBOUND, MF_BYCOMMAND | (app.ConfigGet (L"AllowInboundConnections", false).AsBool () ? MF_CHECKED : MF_UNCHECKED)); CheckMenuItem (submenu, IDM_TRAY_RULE_ALLOWLISTEN, MF_BYCOMMAND | (app.ConfigGet (L"AllowListenConnections2", true).AsBool () ? MF_CHECKED : MF_UNCHECKED)); @@ -7396,6 +7440,10 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) if (rules_blocklist.empty ()) EnableMenuItem (submenu, IDM_TRAY_USEBLOCKLIST_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + // proxy connections (win8 and above) + if (!_r_sys_validversion (6, 2)) + EnableMenuItem (submenu, IDM_TRAY_PROXYSUPPORT_CHK, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + // win7 and above if (!_r_sys_validversion (6, 1)) { @@ -7479,7 +7527,6 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) TrackPopupMenuEx (submenu, TPM_RIGHTBUTTON | TPM_LEFTBUTTON, pt.x, pt.y, hwnd, nullptr); - DestroyMenu (submenu); DestroyMenu (menu); break; @@ -7959,6 +8006,19 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) break; } + case IDM_STEALTHMODE_CHK: + case IDM_TRAY_STEALTHMODE_CHK: + { + const bool new_val = !app.ConfigGet (L"UseStealthMode", false).AsBool (); + + CheckMenuItem (GetMenu (hwnd), IDM_STEALTHMODE_CHK, MF_BYCOMMAND | (new_val ? MF_CHECKED : MF_UNCHECKED)); + app.ConfigSet (L"UseStealthMode", new_val); + + _app_installfilters (false); + + break; + } + case IDM_INSTALLBOOTTIMEFILTERS_CHK: case IDM_TRAY_INSTALLBOOTTIMEFILTERS_CHK: { @@ -7972,13 +8032,13 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) break; } - case IDM_STEALTHMODE_CHK: - case IDM_TRAY_STEALTHMODE_CHK: + case IDM_PROXYSUPPORT_CHK: + case IDM_TRAY_PROXYSUPPORT_CHK: { - const bool new_val = !app.ConfigGet (L"UseStealthMode", false).AsBool (); + const bool new_val = !app.ConfigGet (L"EnableProxySupport", false).AsBool (); - CheckMenuItem (GetMenu (hwnd), IDM_STEALTHMODE_CHK, MF_BYCOMMAND | (new_val ? MF_CHECKED : MF_UNCHECKED)); - app.ConfigSet (L"UseStealthMode", new_val); + CheckMenuItem (GetMenu (hwnd), IDM_PROXYSUPPORT_CHK, MF_BYCOMMAND | (new_val ? MF_CHECKED : MF_UNCHECKED)); + app.ConfigSet (L"EnableProxySupport", new_val); _app_installfilters (false); @@ -8038,12 +8098,12 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) case IDM_LOGSHOW: case IDM_TRAY_LOGSHOW: { - rstring path = _r_path_expand (app.ConfigGet (L"LogPath", PATH_LOG)); + LPCWSTR path = _r_path_expand (app.ConfigGet (L"LogPath", PATH_LOG)); if (!_r_fs_exists (path)) return FALSE; - _r_run (nullptr, _r_fmt (L"%s \"%s\"", app.ConfigGet (L"LogViewer", L"notepad.exe"), path)); + _r_run (nullptr, _r_fmt (L"%s \"%s\"", app.ConfigGet (L"LogViewer", L"notepad.exe").GetString (), path)); break; } @@ -8051,7 +8111,7 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) case IDM_LOGCLEAR: case IDM_TRAY_LOGCLEAR: { - rstring path = _r_path_expand (app.ConfigGet (L"LogPath", PATH_LOG)); + LPCWSTR path = _r_path_expand (app.ConfigGet (L"LogPath", PATH_LOG)); if ((config.hlog != nullptr && config.hlog != INVALID_HANDLE_VALUE) || _r_fs_exists (path)) { @@ -8072,7 +8132,7 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) _r_fs_delete (path); } - _r_fs_delete (path + L".bak"); + _r_fs_delete (_r_fmt (L"%s.bak", path)); } break; @@ -8080,19 +8140,19 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) case IDM_TRAY_LOGSHOW_ERR: { - rstring path = _r_dbg_getpath (APP_NAME_SHORT); + LPCWSTR path = _r_dbg_getpath (APP_NAME_SHORT); if (!_r_fs_exists (path)) return FALSE; - _r_run (nullptr, _r_fmt (L"%s \"%s\"", app.ConfigGet (L"LogViewer", L"notepad.exe"), path)); + _r_run (nullptr, _r_fmt (L"%s \"%s\"", app.ConfigGet (L"LogViewer", L"notepad.exe").GetString (), path)); break; } case IDM_TRAY_LOGCLEAR_ERR: { - rstring path = _r_dbg_getpath (APP_NAME_SHORT); + LPCWSTR path = _r_dbg_getpath (APP_NAME_SHORT); if (!_r_fs_exists (path) || (app.ConfigGet (L"ConfirmLogClear", true).AsBool () && _r_msg (hwnd, MB_YESNO | MB_ICONQUESTION, APP_NAME, nullptr, I18N (&app, IDS_QUESTION, 0)) != IDYES)) break; @@ -8229,7 +8289,7 @@ INT_PTR CALLBACK DlgProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) ptr_app->is_enabled = (LOWORD (wparam) == IDM_CHECK) ? true : false; - _r_listview_setitemgroup (hwnd, IDC_LISTVIEW, item, ptr_app->is_enabled ? 0 : 1); + _r_listview_setitem (hwnd, IDC_LISTVIEW, item, 0, nullptr, LAST_VALUE, ptr_app->is_enabled ? 0 : 1); _r_listview_setitemcheck (hwnd, IDC_LISTVIEW, item, ptr_app->is_enabled); config.is_nocheckboxnotify = false; @@ -8412,7 +8472,7 @@ INT APIENTRY wWinMain (HINSTANCE, HINSTANCE, LPWSTR, INT) { MSG msg = {0}; - HACCEL haccel = LoadAccelerators (app.GetHINSTANCE (), MAKEINTRESOURCE (IDA_MAIN)); + const HACCEL haccel = LoadAccelerators (app.GetHINSTANCE (), MAKEINTRESOURCE (IDA_MAIN)); while (GetMessage (&msg, nullptr, 0, 0) > 0) { diff --git a/src/main.hpp b/src/main.hpp index afaacc31..a9777358 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -320,56 +320,9 @@ struct ITEM_ADDRESS #define FWP_DIRECTION_OUT 0x00003901L #endif -typedef struct FWPM_NET_EVENT_HEADER3_ -{ - FILETIME timeStamp; - UINT32 flags; - FWP_IP_VERSION ipVersion; - UINT8 ipProtocol; - union - { - UINT32 localAddrV4; - FWP_BYTE_ARRAY16 localAddrV6; - }; - union - { - UINT32 remoteAddrV4; - FWP_BYTE_ARRAY16 remoteAddrV6; - }; - UINT16 localPort; - UINT16 remotePort; - UINT32 scopeId; - FWP_BYTE_BLOB appId; - SID *userId; - FWP_AF addressFamily; - SID *packageSid; - wchar_t *enterpriseId; - UINT64 policyFlags; - FWP_BYTE_BLOB effectiveName; -} FWPM_NET_EVENT_HEADER3; - -typedef struct FWPM_NET_EVENT3_ -{ - FWPM_NET_EVENT_HEADER3 header; - FWPM_NET_EVENT_TYPE type; - union - { - FWPM_NET_EVENT_IKEEXT_MM_FAILURE1 *ikeMmFailure; - FWPM_NET_EVENT_IKEEXT_QM_FAILURE0 *ikeQmFailure; - FWPM_NET_EVENT_IKEEXT_EM_FAILURE1 *ikeEmFailure; - FWPM_NET_EVENT_CLASSIFY_DROP2 *classifyDrop; - FWPM_NET_EVENT_IPSEC_KERNEL_DROP0 *ipsecDrop; - FWPM_NET_EVENT_IPSEC_DOSP_DROP0 *idpDrop; - FWPM_NET_EVENT_CLASSIFY_ALLOW0 *classifyAllow; - FWPM_NET_EVENT_CAPABILITY_DROP0 *capabilityDrop; - FWPM_NET_EVENT_CAPABILITY_ALLOW0 *capabilityAllow; - FWPM_NET_EVENT_CLASSIFY_DROP_MAC0 *classifyDropMac; - }; -} FWPM_NET_EVENT3; - typedef void (CALLBACK *FWPM_NET_EVENT_CALLBACK2)(_Inout_ void* context, _In_ const FWPM_NET_EVENT3* event); -typedef DWORD (WINAPI *FWPMNES0) (HANDLE, const FWPM_NET_EVENT_SUBSCRIPTION0*, FWPM_NET_EVENT_CALLBACK0, LPVOID, HANDLE*); // subscribe( win7) +typedef DWORD (WINAPI *FWPMNES0) (HANDLE, const FWPM_NET_EVENT_SUBSCRIPTION0*, FWPM_NET_EVENT_CALLBACK0, LPVOID, HANDLE*); // subscribe (win7) typedef DWORD (WINAPI *FWPMNES1) (HANDLE, const FWPM_NET_EVENT_SUBSCRIPTION0*, FWPM_NET_EVENT_CALLBACK1, LPVOID, HANDLE*); // subscribe (win8) typedef DWORD (WINAPI *FWPMNES2) (HANDLE, const FWPM_NET_EVENT_SUBSCRIPTION0*, FWPM_NET_EVENT_CALLBACK2, LPVOID, HANDLE*); // subscribe (win10) diff --git a/src/res/102.ico b/src/res/102.ico index b890141a..3cabee2a 100644 Binary files a/src/res/102.ico and b/src/res/102.ico differ diff --git a/src/res/103.ico b/src/res/103.ico index 261b395b..267b2462 100644 Binary files a/src/res/103.ico and b/src/res/103.ico differ diff --git a/src/res/104.ico b/src/res/104.ico index 18989846..7bc942a3 100644 Binary files a/src/res/104.ico and b/src/res/104.ico differ diff --git a/src/resource.hpp b/src/resource.hpp index 98351259..c3c4bd63 100644 --- a/src/resource.hpp +++ b/src/resource.hpp @@ -148,16 +148,17 @@ #define IDM_USEBLOCKLIST_CHK 2013 #define IDM_STEALTHMODE_CHK 2014 #define IDM_INSTALLBOOTTIMEFILTERS_CHK 2015 -#define IDM_RULE_ALLOWINBOUND 2016 -#define IDM_RULE_ALLOWLISTEN 2017 -#define IDM_ENABLELOG_CHK 2018 -#define IDM_ENABLENOTIFICATIONS_CHK 2019 -#define IDM_LOGSHOW 2020 -#define IDM_LOGCLEAR 2021 -#define IDM_WEBSITE 2022 -#define IDM_DONATE 2023 -#define IDM_CHECKUPDATES 2024 -#define IDM_ABOUT 2025 +#define IDM_PROXYSUPPORT_CHK 2016 +#define IDM_RULE_ALLOWINBOUND 2017 +#define IDM_RULE_ALLOWLISTEN 2018 +#define IDM_ENABLELOG_CHK 2019 +#define IDM_ENABLENOTIFICATIONS_CHK 2020 +#define IDM_LOGSHOW 2021 +#define IDM_LOGCLEAR 2022 +#define IDM_WEBSITE 2023 +#define IDM_DONATE 2024 +#define IDM_CHECKUPDATES 2025 +#define IDM_ABOUT 2026 // Tray Menu #define IDM_TRAY_SHOW 3000 @@ -167,18 +168,19 @@ #define IDM_TRAY_USEBLOCKLIST_CHK 3004 #define IDM_TRAY_STEALTHMODE_CHK 3005 #define IDM_TRAY_INSTALLBOOTTIMEFILTERS_CHK 3006 -#define IDM_TRAY_RULE_ALLOWINBOUND 3007 -#define IDM_TRAY_RULE_ALLOWLISTEN 3008 -#define IDM_TRAY_ENABLELOG_CHK 3009 -#define IDM_TRAY_ENABLENOTIFICATIONS_CHK 3010 -#define IDM_TRAY_LOGSHOW 3011 -#define IDM_TRAY_LOGCLEAR 3012 -#define IDM_TRAY_LOGSHOW_ERR 3013 -#define IDM_TRAY_LOGCLEAR_ERR 3014 -#define IDM_TRAY_SETTINGS 3015 -#define IDM_TRAY_WEBSITE 3016 -#define IDM_TRAY_ABOUT 3017 -#define IDM_TRAY_EXIT 3018 +#define IDM_TRAY_PROXYSUPPORT_CHK 3007 +#define IDM_TRAY_RULE_ALLOWINBOUND 3008 +#define IDM_TRAY_RULE_ALLOWLISTEN 3009 +#define IDM_TRAY_ENABLELOG_CHK 3010 +#define IDM_TRAY_ENABLENOTIFICATIONS_CHK 3011 +#define IDM_TRAY_LOGSHOW 3012 +#define IDM_TRAY_LOGCLEAR 3013 +#define IDM_TRAY_LOGSHOW_ERR 3014 +#define IDM_TRAY_LOGCLEAR_ERR 3015 +#define IDM_TRAY_SETTINGS 3016 +#define IDM_TRAY_WEBSITE 3017 +#define IDM_TRAY_ABOUT 3018 +#define IDM_TRAY_EXIT 3019 // Listview Menu #define IDM_ADD_FILE 4000 @@ -358,38 +360,39 @@ #define IDS_USESTEALTHMODE_HINT 9010 #define IDS_INSTALLBOOTTIMEFILTERS_CHK 9011 #define IDS_INSTALLBOOTTIMEFILTERS_HINT 9012 +#define IDS_PROXYSUPPORT_CHK 9013 -#define IDS_DISABLEWINDOWSFIREWALL_CHK 9013 -#define IDS_ENABLEWINDOWSFIREWALL_CHK 9014 +#define IDS_DISABLEWINDOWSFIREWALL_CHK 9014 +#define IDS_ENABLEWINDOWSFIREWALL_CHK 9015 -#define IDS_CONFIRMEXIT_CHK 9015 -#define IDS_CONFIRMDELETE_CHK 9016 -#define IDS_CONFIRMLOGCLEAR_CHK 9017 +#define IDS_CONFIRMEXIT_CHK 9016 +#define IDS_CONFIRMDELETE_CHK 9017 +#define IDS_CONFIRMLOGCLEAR_CHK 9018 -#define IDS_COLORS_HINT 9018 +#define IDS_COLORS_HINT 9019 -#define IDS_ENABLELOG_CHK 9019 -#define IDS_LOGSHOW 9020 -#define IDS_LOGCLEAR 9021 +#define IDS_ENABLELOG_CHK 9020 +#define IDS_LOGSHOW 9021 +#define IDS_LOGCLEAR 9022 -#define IDS_LOGSIZELIMIT_HINT 9022 -#define IDS_LOGBACKUP_CHK 9023 +#define IDS_LOGSIZELIMIT_HINT 9023 +#define IDS_LOGBACKUP_CHK 9024 -#define IDS_ENABLENOTIFICATIONS_CHK 9024 -#define IDS_NOTIFICATIONSILENT_CHK 9025 -#define IDS_NOTIFICATIONDISPLAYTIMEOUT_HINT 9026 -#define IDS_NOTIFICATIONTIMEOUT_HINT 9027 +#define IDS_ENABLENOTIFICATIONS_CHK 9025 +#define IDS_NOTIFICATIONSILENT_CHK 9026 +#define IDS_NOTIFICATIONDISPLAYTIMEOUT_HINT 9027 +#define IDS_NOTIFICATIONTIMEOUT_HINT 9028 -#define IDS_RULES_BLOCKLIST_HINT 9028 -#define IDS_RULES_SYSTEM_HINT 9029 -#define IDS_RULES_CUSTOM_HINT 9030 +#define IDS_RULES_BLOCKLIST_HINT 9029 +#define IDS_RULES_SYSTEM_HINT 9030 +#define IDS_RULES_CUSTOM_HINT 9031 -#define IDS_NOTIFY_CREATERULE_ADDRESS 9031 -#define IDS_NOTIFY_CREATERULE_PORT 9032 -#define IDS_NOTIFY_DISABLENOTIFICATIONS 9033 -#define IDS_NOTIFY_TOOLTIP 9034 +#define IDS_NOTIFY_CREATERULE_ADDRESS 9032 +#define IDS_NOTIFY_CREATERULE_PORT 9033 +#define IDS_NOTIFY_DISABLENOTIFICATIONS 9034 +#define IDS_NOTIFY_TOOLTIP 9035 -#define IDS_ALWAYSPERFORMTHISCHECK_CHK 9035 +#define IDS_ALWAYSPERFORMTHISCHECK_CHK 9036 #define IDS_QUESTION 10000 #define IDS_QUESTION_DELETE 10001 diff --git a/src/resource.rc b/src/resource.rc index ed2e8de3..cc49f079 100644 --- a/src/resource.rc +++ b/src/resource.rc @@ -91,6 +91,7 @@ IDM_MAIN MENU MENUITEM " ", IDM_USEBLOCKLIST_CHK MENUITEM " ", IDM_STEALTHMODE_CHK MENUITEM " ", IDM_INSTALLBOOTTIMEFILTERS_CHK + MENUITEM " ", IDM_PROXYSUPPORT_CHK MENUITEM SEPARATOR MENUITEM " ", IDM_RULE_ALLOWINBOUND MENUITEM " ", IDM_RULE_ALLOWLISTEN @@ -141,6 +142,7 @@ IDM_TRAY MENU MENUITEM " ", IDM_TRAY_USEBLOCKLIST_CHK MENUITEM " ", IDM_TRAY_STEALTHMODE_CHK MENUITEM " ", IDM_TRAY_INSTALLBOOTTIMEFILTERS_CHK + MENUITEM " ", IDM_TRAY_PROXYSUPPORT_CHK MENUITEM SEPARATOR MENUITEM " ", IDM_TRAY_RULE_ALLOWINBOUND MENUITEM " ", IDM_TRAY_RULE_ALLOWLISTEN @@ -545,7 +547,8 @@ STRINGTABLE IDS_USESTEALTHMODE_HINT "Prevent port scanning using silent drop inbound TCP RST and outbound ICMP ""Destination Unreachable"" to prevent UDP port scanning." IDS_INSTALLBOOTTIMEFILTERS_CHK "Install boot-time filters (experts-only)" IDS_INSTALLBOOTTIMEFILTERS_HINT "Prevent data leak during system startup, even before ""Base Filtering Engine"" (BFE) service starts." - + IDS_PROXYSUPPORT_CHK "Enable proxy support (experts-only)" + IDS_DISABLEWINDOWSFIREWALL_CHK "Disable Windows Firewall (recommended)" IDS_ENABLEWINDOWSFIREWALL_CHK "Enable Windows Firewall (recommended)"