From ed7ebaec176a4e2d6b84e80690685eb04423b90c Mon Sep 17 00:00:00 2001 From: henrypp Date: Fri, 20 Oct 2017 02:22:47 +0600 Subject: [PATCH] 2.0.18 --- .gitignore | 2 + CHANGELOG.md | 14 +- bin/History.txt | 12 + bin/i18n/!example.txt | Bin 13664 -> 13430 bytes bin/i18n/Chinese (Simplified).ini | Bin 9914 -> 9678 bytes bin/i18n/Finnish.ini | Bin 14780 -> 14498 bytes bin/i18n/French.ini | Bin 14458 -> 14222 bytes bin/i18n/German.ini | Bin 14318 -> 14066 bytes bin/i18n/Hungarian.ini | Bin 15622 -> 15292 bytes bin/i18n/Korean.ini | Bin 10722 -> 10604 bytes bin/i18n/Persian.ini | Bin 13856 -> 13650 bytes bin/i18n/Polish.ini | Bin 14346 -> 14110 bytes bin/i18n/Portuguese (Brazilian).ini | Bin 15332 -> 15024 bytes bin/i18n/Russian.ini | Bin 15376 -> 15172 bytes bin/i18n/Spanish.ini | Bin 15374 -> 15066 bytes build.bat | 2 +- simplewall.vcxproj | 10 +- src/app.hpp | 4 +- src/main.cpp | 496 ++++++++++++++++------------ src/main.hpp | 49 +-- src/res/102.ico | Bin 3606 -> 5342 bytes src/res/103.ico | Bin 3606 -> 5342 bytes src/res/104.ico | Bin 3606 -> 5342 bytes src/resource.hpp | 93 +++--- src/resource.rc | 5 +- 25 files changed, 366 insertions(+), 321 deletions(-) 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 271a33f2520b11fca2683775e852ac276c542036..76720a71deff6816804e3f0cebc7f464d6f7eb3a 100644 GIT binary patch delta 68 zcmaEm^(|w=6lKu>h9Cxih6sj8hG2$Jh5#V+X9$|iFE1@wz)-}H&rrco$)Lbc%uvcu U0EGEKv69J&O4^%0spJU&0B{}=tN;K2 delta 311 zcmaivJqp4=6ojX;_6Up7!p0j|h<}klu!vYnjH|20A54}A79JuVMDRkM!p6qQODoF4 zyk#Ey&FsrOH}{*9`>HaXV2mC*2+&6tuBe9*d<-!Y$3vU@1&=}v4J1^B6bDfQ&6&Yq zO;01{OpxZgdb8kPfAd{Q3ce<2oXLw|$qg|lxky@)U*7&SC_4@~LOzIDHxsKYY;oj= bLaD46Qn(SegzvGE7%f|i6F05L+qqOf(y=CKl?IB%7;=EDbcW5ZSbbTdfE*CF z94wp(lrCXNWyk~al7XUmK$r?-l`v$2c_7VcKvofuP6X>zV9)^aKx*MdI-r<^eV~ z1c!0&gVU3II@(je`5_F}DDCq*kl~&CC2d2hCWGGQT4_d(5J#{#6&Nak9xVmBqZmkn zJdO}42l_G(=uZV8&Igj9V8{VtP=G1`eUJhqGr_!EV4xKMLj*%4Loh=qLjVx^14Tj@;u)M7JQ%zgY#Ce`@)!~sk{EIr zQW+E&3K)tQ@);@^DuL``hEgEE0LU+5C;{>{fGR40{8TW%m_ZjPlLypS$)Gv;BZu_l NRT>(bbu=aj0sxf-8)g6i delta 352 zcmZ2fxTknShFX0nLokCYLnuQ4gA0QrLkN)V%-{hgy%{_i{21IB;=v-`47LnD44DkY z3{QYifkBBu706ZsvWgiJ8FGLylc59%OBu2lQW^4q;vkV?pa?`Z6)2(sNdZ1MHd*?5>#1$SjvFJpCK10ng{e7$d9E!m;#bx(3|{`LwfTowH<;0ubN0} diff --git a/bin/i18n/French.ini b/bin/i18n/French.ini index 39a00939fcec39abac137f413b5e6a50ab714764..b152e0ada2fe13c2da97122542e88aa6b5bd1ee4 100644 GIT binary patch delta 76 zcmexW(3ig2A($bQApi*d8GFX7B)$-VB}$ehlsm@n8{e23w$f3J@wV zC^4uq6az^Gh7yK+Fqy%S3Z%;!G8i&}VyO%{K)M*nQkXoIPjj+^B3nIv8$7^vg0}an(NC#V!3YINpC<4mpO@7HCz4?RcJV5|{-#jz` diff --git a/bin/i18n/German.ini b/bin/i18n/German.ini index 2d0544a9c5bb0042c5827ffe599e5ba8bdb22b10..7a3a8db693df5e99bbe85482f33a6d28dbfe5e8a 100644 GIT binary patch delta 76 zcmaEt|0#DvlB#F`LlA>MLj*%4Loh=qLjVx^GXzcEs30w0z)-}H&rrco$)Lbc%uvcu a0EGEKu@WF(gCTYDLK$&J&CN&EGz9?#2olEt delta 310 zcma)%I|{;J5QM+d#=^=rh!JeOfrS`f1RtQmQWA|Q_#%mojfcoZ1W#Zo-o?V&!uf*- zNV7Za4&Us4_V42@u*V)#I(STQXfcy+)6c5QfDt_w*~Fzu1)Esa;=-9oea?n02_ZZ6 zm?V7^%4xS&z2@QevxJ$*E%9R3e8r0h@Kr2A($bQApi*dfg&Lc@eIxk9t_?LwhXQec?^jRNenp* zsSFAX1q?+D`3w~dl|XheLn)A70OS`jlmPh}Kou20ekzz>%%BUD$ph-EWYA>bW#D4) YWN-o65)ULjfwUuo6NArYYpv5l02b#PnE(I) delta 332 zcmdl}-d44tNMrIjWwyXjh5!Z^21kYv23H1W1`jal&EU!4$KcKo4;Jxeum#F%FjO&U zGAJ-8F{m;W14#vjG=@}$9ELK6mkcFfRw_^|k)dj`Bfm6vCXk)OkO@>-GFenW6J%38 zew#eNc7_1$3Im#!&QJ*?VRnGb#b$pg(B=}LTnR%4nEVXZ@sJ@4Xm<(3H9#_zArEL? z>SS+zK}{rgF+5}_0_p;p4YH>Q?Al_6w?LgQ8Hy**XB8I&sZL`k1?tacNCwJ(2KkNi RCD681U})%VzNzt82mlk^L^A*Y diff --git a/bin/i18n/Korean.ini b/bin/i18n/Korean.ini index 4645ca5ea7dc14548848f39402d50ddd3c993feb..b25eec3192d2ef34d1a0281573ae537122c9db45 100644 GIT binary patch delta 119 zcmaD9{3d9_4Vkn6h9Cxih6sj8hG2$Jh5#V+2a1F+#4|WEcrbV~*fO{>45dJR0gzwBPy*y@098}~`Ke%jF@r8pCJ(5ul40^WHkr*A HWQBMDQ^y)O delta 235 zcmaD8^eA}44Vn5-hF}I)hERq81{VfLh7cgznZW~0dNX)3_%XOM#Dhh=8EhFsu9Y0$ zaY=z;&CVrL6xBxNGdQ)Im@s{fkA_zXYJDCnhd-QTtM9}K(ph4X5+CT z4r+x5*s>4;mOMGsd6nmK&2g9G5DO!&z5zPo=+T1B5QjCaS#v;v!C>9eO$rPruC6?$ Kx7l7+mj?i*&q*!- diff --git a/bin/i18n/Persian.ini b/bin/i18n/Persian.ini index 4e6938d4b12791b5c7902fbb06e0986052b94d52..0dec991a79e83aa6e5a1fe24cfa4d0ae67251811 100644 GIT binary patch delta 130 zcmZ3Gb17>>oJvLjLlA>MLj*%4Loh=qLjVx^14Tj@;u)M7JQ%zgY#Ce`@)!~sk{EIr zQW+E&3K)tQ@);@^DuL``hEgEE0LU+5C;{>{fGR40{8TW%m_ZjPlLypS$)L%wxlgr> Sb26KL-sCd2A($bQApi*d8G#yJ6|?{V delta 317 zcmbQ2*Hy3~OEo@}A(+9HA(SD2!G*z*Aq2>FX7B)$-VB}$ehlsm@n8{e23w$f3J@wV zC^4uq6az^Gh7yK+Fqy%S3Z%;!G8i&}VyO%{K)M*nQkcAzPqUsFJ3PR)g!5(8NTBB%tXa+tPq`Kv)D^;RAPQB2YsP(8=XUjxJ>=0D3AB>}&;~B_OXPGh_n| Y&tpgjTayZwEoCSI%IIyrsOl>S08z;~*#H0l diff --git a/bin/i18n/Portuguese (Brazilian).ini b/bin/i18n/Portuguese (Brazilian).ini index 6637ab74ffbf174f145905d73f27924a0e6a5aac..653c75f8bc814c55a675287505c3f4614aa1237d 100644 GIT binary patch delta 120 zcmaD-zM*u3m3n#rLlA>MLj*%4Loh=qLjVx^14Tj@;u)M7JQ%zgY#Ce`@)!~sk{EIr zQW+E&3K)tQ@);@^DuL``hEgEE0LU+5C;{>{fGR40{8TW%m_ZjPlLypS$)Gv;B&YP| I4;o*D05b|2>;M1& delta 326 zcmdl``lNh=m3nq4LokCYLnuQ4gA0QrLkN)V%-{hgy%{_i{21IB;=v-`47Nb|6oyQO zWFXFG$YV%kC}L0mvJ@DU7*rXGfusV%10c=;$`><~0Ob`Jl7MOwfohXMyvd3hn)bxl z=K;1k1dELdlXr7Td!yP{%uoups{m-%X9f_N3FhN;2T%>j?I8DMOunxuuAc@pA&=oX k!(*^-QW#Q!GG#y#WKtRsgItd!J6TXsno)1_LUn#&03n$_x&QzG diff --git a/bin/i18n/Russian.ini b/bin/i18n/Russian.ini index d26805f9639ebbcf3cd84115fa546916490afca1..c1d8f63a71b4f51761f5fcf2a940cae68b9e61c9 100644 GIT binary patch delta 74 zcmbPGaina+0uAv1h9Cxih6sj8hG2$Jh5#V+2a1GDcGQ)XwP&$oF#$qT76%qH7AqEK X76k@-AlnYecAT86uD|(>riu^%fhZ5z delta 240 zcmX?7Hlbp}0u9YjhF}I)hERq81{VfLh7cgznZW~0dNX)3_%XOM#Dhh=CpU74swpw3 zG88i?F(@z?u_!PYvY4`1vv{*u0@;o%_AC}Gjx2U8RxFeIG+s zU@!q%=?}Ef2xyf#iw%%8W3dI2jx0_<2PiPuvp4{GMnI=I0G(nnajEKN1x*zp02JpX A%>V!Z diff --git a/bin/i18n/Spanish.ini b/bin/i18n/Spanish.ini index f799d5f1e45e9f9d1a4a2368624ff16abcbb25c9..a528459ccb05401ea3adaa76c17543d4a4abdc9f 100644 GIT binary patch delta 140 zcmeCHxK+9#M!i0OA&9}BA%Y>2A($bQApi*dfg&Lc@eIxk9t_?LwhXQec?^jRNenp* zsSFAX1q?+D`3w~dl|XheLn)A70OS`jlmPh}Kou20ekzz>%%BUD$ph-EWYA>bW#D4) YWN-o65)ULjfwUuo6NArYe$D?v036^Os{jB1 delta 254 zcmcar+E=k5M%_P@A(+9HA(SD2!G*z*Aq2>FX7B)$-VB}$ehlsm@n8{e23w%~M}|a( z6oyQOA_fHpB?eW7Vj!si6jNZxfsm6o@=8y>pr~R>jJY0Q8$u8!Prhy`tDVY_#gNL7 z%uvcu0yHxTXmTnZ+axFdGnSHu*`Ef~l?T+D$?zFSD*)Y^I+@c{nib5N*sD147~kd# H>RiGA%_%ej 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 b890141a95a3ed4c471f0071ef80960b41166335..3cabee2aaafcb542c3623e505acafe5f88745b3a 100644 GIT binary patch literal 5342 zcmeHLO=#3W6n@g;Din6Xf<3uC_E-?=MM#r0iHJuJ9((jyp%xW!t3A|PMMV#?ndrrX z2SM=XM~U8}uTtqeUmhk}!2JYdphA-X>v5Zf++iyw0_TM><_YV=x%$l6 zVi>zD5qDsH@&a3V!v0>Q4L2}PyTX1IaWg;Q1omf)Wwz@xei0A7S&_A4!eh%?I1LxW(>P^`$7?8VJ_tH7o5vnVa*M~ zX+O13AYb4An-_h13!Jz5;q3J*sxyTBK=bDHGtR}|Df`4cc{!~o)=AWCk616MCPCj7 z$2Zr3He_z@HTI}h0~e1``xV#8^D8X7*6$-$k7)n$TsfwkuQ|u&(fb#&oxOu-9eW5$ fWLm8eEgD24Riaa6qDBdO%M#E8T7U#X0J4lfbPrv( literal 3606 zcmeHJOKTHR6h3Mp3WWp&&B}BoF8u+*?cAH03Ef#=_&~dK;lh8AN;ZOvg7{c*za&K1`wW0MFxR3H|?{Y%(CKVkR(3S60gxvSIAAFn6fc%g`tb zyPKtks;iTsk&nCF%-_RX-^h#o2-3a%5jS{!?Y-vsvsg!xoAbkcoSR8C{5AhnpygAS z6W-TQi#eACKT>zX$osLb|*8FA|x6@3k!F%aAhS@Y4!#I=U6(et9&7U~8*#CDGEw3c! zOxngC-^8AO>}qJWU0Iv5hEdz0DPNs5?xcTES2u#l`_TP%BX4Ia8c|;ZXK^Qp)U{+B zleV!J*L|bj_s)}SVqKYQ#J}AjlJ_Q!d5}MAOpAMv-oM;uttE%Os-=#w)Gk?S|TlN&piBcKn-XBEuam22l|{`hoLm3tAKtHN$~%;2*t&v;WmM-Uik^?_w5O z6cEFTi-X&4EN)Rh+(%v2WZif_zmFORxQ{1&U3*jxH-C^FbuEK@UEg2B5v!5826FL@ xV>zeT^XGvUd`u7Z!Ign~gJ>7{25bV$RifDv(HUSPkMSDN09rsB=m40<_ysUgkmmpZ diff --git a/src/res/103.ico b/src/res/103.ico index 261b395b4030a13ec820fad28deb4e4bf18b9449..267b2462ab80ad7a2ad41d10a57dfd8ce76753d7 100644 GIT binary patch literal 5342 zcmbtYO^94Y5UyoHHp0S;vWGpaZjL#42q+S9aTP>7hy?NA!Jh?x$ic%P5+V`z$s9H! z{@@-wM94uw#6u1_Bp{j{Ruoi>&g(ZL2H6eqU)0eJI+AtA@2h@2)ARPdnfGQJYP(-| z)mPP3)zv*KG9e|InGy8+<-|22w}{B}wEaG}SL8#?RVw!T$R3fS7#{!+MC2fda%_v> zE7rc66$u{~iOzsppg%yHpo<{PnWsd^Q?xa17HPZ!jGsW=5%e3@S45h(=F?*C0Y7bw zal>CRK4te2-V2+tZWci&F@L$wM;Y_La2?!lbTyV?zbtYd9?xoAGsip`*c4XNxueIx z$Gwv0Kap0D&X+c8?t?$iT3PcKbUr!A#TYrCn5~%aZ|JylkZ;(RnSx!Rl~rFcz2e6B zsK0-Q?q@OnaZDZ9hxsnX0w!B)KfYt1o0oJ-8aM4i2jjuq04DvSG3EE>U@XVg!I-k00)1CPzheG!Dm@IRD`f zcFZ$5tQFDGyx(FfHtQCA#dA2S<<+4zk^U!k9N+NtD0I7?M+fVb`XAUmU7Oeg&S0K4 zOb7E*Ya;9?w$=t$(^m4JTb?W(tcm{lBDdCh`s)gGKC%lPLErZ1`!w51v6%h+4vWwSy1$XP)NncZ2iY(?eZpRPcWH z^)q*O_deN{CF#hVw52Q?&reFdTa%z$mtg6V>|1Ed)LdI`D1&1XR0GvP8=&?vDR&M^ zd8;DJ+Y?gjPN*y~hy@NI_5qm7WMuE&VXy7=_b_a%cL{1GV-c>$@nF0#*7#s8Z)?DW z@RLLgmyZ9#nd+^Z9Iv18f#zkZii<3BA9%mbI*Jy znqSc4E&2`4XtL$S{1&;u_aNUO4lleuiDtj^U}{WbJhxx|9>{8=FvHut{lbUbd-Lfm zG&?^G(>!4@%$w+4zFZi5m!_d-Ve%|%%>~v#J_l(igL6qto=rcW$?eV?@1N$OLHV>V zA5+h$citSos|WfUB0$_{+{(`0TnC$ugMg#^Owq5qMek z%2|{| z1JywFK*}4Sw#ag)qB5&eRSaUGAPNxlKL_sKx?@k4-TplH8a@X)4PRVFkM|DW$jzF~ z7oRsdrq4B&SJ5L*TH{tQ{tP&%>q@wL=%-|J@9^lo^!K0E;8VbYSHkxPF?zKcYtidT z*8{zlUL%H>|9A2YdMhx6g|#%!%+bL^>hFvGrrT{+2l^k{J>4$3)bm5&xkX<6I+c z5>fj7;Q9>7RS{r_rA;kuu0zE0ia2M%aS!9eMyRWqForg1Zd--scY)`(V~73l_mwwb zENa}r{{$W!QB8FN_sw9vzrfuUncE(P43EvnU~?Y$xxg0d@J@s=e6s8HHUiuV`eUWI zawFUuh4^`1+$;AyyfbE;bN(&Ja)7JT2iIZq!9Q1sMB)7OIQE-V|JeXjL65` zmZf^H`e0-4ZI`E52QRUWHhq7i2KAlAyB(r+j#YR!8-F>;$*LqID{)!86qBi3Gh|wZ zhn8fxXGK~PS=kc@A_f_OOhXnS*^3fi?Udwtn~- zzr%X*2CLp?VWv)D4L8s;?;u*o80RWAuNQcmM?a896GjwteWsZ6PDV4N9|ahkoxLAi zq|P~>8P754&KNwuUGyC8$a0OfW#2J24sS2)5vO{AxuDMdo8=gQK^}Y0(7%Bl>!#26 z<=WZQ74uw?qtjrx&+0M+b^UIKv9E>W{T9S954-D-$B@?rTdP%z!+Q?9m*wrN#gVsX z{9i>r?6jW4eN-I!+mUt7_=EjZ$HR8+Q!$7BzF{6PPg~IA8`N7cx@+g^mV@t5{hf|n zwE3+0)?hzYnZv&dU%@?M&)fP?1DFE``AKTiPU|Z&cg`W_k$flb6F*<9#HL#9QTPp_IzXbNO=zWqEgLCM#DT!6o(qix(%)H(G zRaD#Y{PW?zL(soohE_+r+HP989a*W}u&H+4>g_3Ov`ZFUDO+>2YOTtct=Ls9P=D8B zs7@ba_}~i%E*fZ|i8k+HdR6O`?mcWq?`$cC>!MIe84K-#`&nRpF9r66ccUVjaNweW zCi8n1w?C>pA%xlyIg)R*C~0GRgy#bNAB2!S&e9USV|(@aLO}Dqa9qf;wX_^>pDHe& z?^HkL2D~y<%TY#DnG=}jTj8kSEU%X1@xJ{@K-2AeC9eB@>I$}`rh6uwez1_|cu@7% z0&@cXGofZ~ecl3I*o`-M3HP0mr)*<5X2qWxndYPoa7c~9OUd9<7`XVaZ`?xmCQKoPAp%>{Li z35x=`;CWyV^P0c!XmOvCiy~SsHe57@tL$Xfl8 zt(3Z;P9J0V;0p&X8fY=O0bxjR-&?2j+d_&>s*gFOkERe}UpR2@3FI|YgE;s)PFeN4 zaeG$fkdS436+aT-J{EQh*f!ygK!29TPK`Z?eIBaZCHTf(+!E3>cBub;Jcb7I$g*TU zlIso0v#;UjDum0t_@!uCU@c%q*e-+`ciI!d@n=;Z5<)DwUVklX%|FR?{vjIvoSD0S zFK<@+roejA*0LH`l#XrDXWH`-!i^<5cg1Zr{CPZ$+w8Mjuk+6;T|VHB3zVT;r^#Bz ot4-Y*k?x&_?wz_>eab8Czli%pZrmX88zHT)#C1Y( zfp|}><8hOGYpa!47#BJCK;(GbBJX?2RV%Nm$nm&Mp&x{vE2V9}OYD3s>zm%k9oGFU zYvrMJw28|s`b4Dm>MrMZ${KlS9jn9@7JnwHJVI@GXdOA>vmuWILf^K(?=Y96ZBFbV zpRTm+agCiXrLOnuo+mqKbq-_wb72V(?JC;l=`Lw=U*%}qLw928ZeK^+9(8wn7uxoy`W^K5 z?B8S8=C)OOJ~z3VG4H?Lo8k}p#U6Ua43lDtX)(d9=wa_kAM>pd7Q-?A;wdi#{yi(f zzH*vVjcUaaR~piirnF@=AT|j9A9jxaqgBL^xyKdxrj$75>fU_$(VQ=7AK2ancDI3js?SGDEXK=LxhYpanF77pk|XXvZjuPx 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)"