diff --git a/src/editor.cpp b/src/editor.cpp
index cab974bd..875a689c 100644
--- a/src/editor.cpp
+++ b/src/editor.cpp
@@ -20,15 +20,23 @@ INT_PTR CALLBACK AddRuleProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
_r_wnd_center (hwnd, GetParent (hwnd));
// localize window
- SetWindowText (hwnd, app.LocaleString (IDS_RULE, NULL).GetString ());
+ SetWindowText (hwnd, app.LocaleString (IDS_RULE));
if (pcontext->item_id != INVALID_INT)
- SetDlgItemText (hwnd, IDC_RULE_ID, _r_listview_getitemtext (pcontext->hwnd, pcontext->listview_id, pcontext->item_id, 0).GetString ());
+ {
+ PR_STRING itemText = _r_listview_getitemtext (pcontext->hwnd, pcontext->listview_id, pcontext->item_id, 0);
- SetDlgItemText (hwnd, IDC_RULE_HINT, L"eg. 192.168.0.1\r\neg. [fe80::]\r\neg. 192.168.0.1:443\r\neg. [fe80::]:443\r\neg. 192.168.0.1-192.168.0.255\r\neg. 192.168.0.1-192.168.0.255:443\r\neg. 192.168.0.0/16\r\neg. fe80::/10\r\neg. 80\r\neg. 443\r\neg. 20-21\r\neg. 49152-65534");
+ if (itemText)
+ {
+ _r_ctrl_settext (hwnd, IDC_RULE_ID, itemText->Buffer);
+ _r_obj_dereference (itemText);
+ }
+ }
- SetDlgItemText (hwnd, IDC_SAVE, app.LocaleString (pcontext->item_id != INVALID_INT ? IDS_SAVE : IDS_ADD, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_CLOSE, app.LocaleString (IDS_CLOSE, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_RULE_HINT, L"eg. 192.168.0.1\r\neg. [fe80::]\r\neg. 192.168.0.1:443\r\neg. [fe80::]:443\r\neg. 192.168.0.1-192.168.0.255\r\neg. 192.168.0.1-192.168.0.255:443\r\neg. 192.168.0.0/16\r\neg. fe80::/10\r\neg. 80\r\neg. 443\r\neg. 20-21\r\neg. 49152-65534");
+
+ _r_ctrl_settext (hwnd, IDC_SAVE, app.LocaleString (pcontext->item_id != INVALID_INT ? IDS_SAVE : IDS_ADD));
+ _r_ctrl_settext (hwnd, IDC_CLOSE, app.LocaleString (IDS_CLOSE));
_r_wnd_addstyle (hwnd, IDC_SAVE, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE);
_r_wnd_addstyle (hwnd, IDC_CLOSE, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE);
@@ -75,29 +83,37 @@ INT_PTR CALLBACK AddRuleProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
if (!_r_ctrl_isenabled (hwnd, IDC_SAVE))
return FALSE;
- rstring rule_single = _r_ctrl_gettext (hwnd, IDC_RULE_ID);
- _r_str_trim (rule_single, DIVIDER_TRIM DIVIDER_RULE);
+ PR_STRING ruleString = _r_ctrl_gettext (hwnd, IDC_RULE_ID);
- if (rule_single.IsEmpty ())
- return FALSE;
-
- if (!_app_parserulestring (rule_single, NULL))
+ if (_r_str_isempty (ruleString))
{
- _r_ctrl_showtip (hwnd, IDC_RULE_ID, 0, NULL, app.LocaleString (IDS_STATUS_SYNTAX_ERROR, NULL).GetString ());
+ if (ruleString)
+ _r_obj_dereference (ruleString);
+
+ return FALSE;
+ }
+
+ if (!_app_parserulestring (ruleString, NULL))
+ {
+ _r_ctrl_showballoontip (hwnd, IDC_RULE_ID, 0, NULL, app.LocaleString (IDS_STATUS_SYNTAX_ERROR));
_r_ctrl_enable (hwnd, IDC_SAVE, FALSE);
+ _r_obj_dereference (ruleString);
+
return FALSE;
}
if (pcontext->item_id == INVALID_INT)
{
- _r_listview_additem (pcontext->hwnd, pcontext->listview_id, INVALID_INT, 0, rule_single.GetString ());
+ _r_listview_additem (pcontext->hwnd, pcontext->listview_id, INVALID_INT, 0, ruleString->Buffer);
}
else
{
- _r_listview_setitem (pcontext->hwnd, pcontext->listview_id, pcontext->item_id, 0, rule_single.GetString ());
+ _r_listview_setitem (pcontext->hwnd, pcontext->listview_id, pcontext->item_id, 0, ruleString->Buffer);
}
+ _r_obj_dereference (ruleString);
+
[[fallthrough]];
}
@@ -137,25 +153,23 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
// name
if (GetDlgItem (hwnd, IDC_RULE_NAME_ID))
{
- SetDlgItemText (hwnd, IDC_RULE_NAME, app.LocaleString (IDS_NAME, L":").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_NAME, L"%s:", app.LocaleString (IDS_NAME));
- if (!_r_str_isempty (ptr_rule->pname))
- SetDlgItemText (hwnd, IDC_RULE_NAME_ID, ptr_rule->pname);
+ if (!_r_str_isempty (ptr_rule->name))
+ _r_ctrl_settext (hwnd, IDC_RULE_NAME_ID, ptr_rule->name->Buffer);
SendDlgItemMessage (hwnd, IDC_RULE_NAME_ID, EM_LIMITTEXT, RULE_NAME_CCH_MAX - 1, 0);
SendDlgItemMessage (hwnd, IDC_RULE_NAME_ID, EM_SETREADONLY, ptr_rule->is_readonly, 0);
}
- rstring text_any = app.LocaleString (IDS_ANY, NULL);
-
// direction
if (GetDlgItem (hwnd, IDC_RULE_DIRECTION))
{
- SetDlgItemText (hwnd, IDC_RULE_DIRECTION, app.LocaleString (IDS_DIRECTION, L":").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_DIRECTION, L"%s:", app.LocaleString (IDS_DIRECTION));
- SetDlgItemText (hwnd, IDC_RULE_DIRECTION_OUTBOUND, app.LocaleString (IDS_DIRECTION_1, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_RULE_DIRECTION_INBOUND, app.LocaleString (IDS_DIRECTION_2, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_RULE_DIRECTION_ANY, text_any.GetString ());
+ _r_ctrl_settext (hwnd, IDC_RULE_DIRECTION_OUTBOUND, app.LocaleString (IDS_DIRECTION_1));
+ _r_ctrl_settext (hwnd, IDC_RULE_DIRECTION_INBOUND, app.LocaleString (IDS_DIRECTION_2));
+ _r_ctrl_settext (hwnd, IDC_RULE_DIRECTION_ANY, app.LocaleString (IDS_ANY));
if (ptr_rule->direction == FWP_DIRECTION_OUTBOUND)
CheckRadioButton (hwnd, IDC_RULE_DIRECTION_OUTBOUND, IDC_RULE_DIRECTION_ANY, IDC_RULE_DIRECTION_OUTBOUND);
@@ -174,10 +188,10 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
// action
if (GetDlgItem (hwnd, IDC_RULE_ACTION))
{
- SetDlgItemText (hwnd, IDC_RULE_ACTION, app.LocaleString (IDS_ACTION, L":").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_ACTION, L"%s:", app.LocaleString (IDS_ACTION));
- SetDlgItemText (hwnd, IDC_RULE_ACTION_BLOCK, app.LocaleString (IDS_ACTION_BLOCK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_RULE_ACTION_ALLOW, app.LocaleString (IDS_ACTION_ALLOW, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_RULE_ACTION_BLOCK, app.LocaleString (IDS_ACTION_BLOCK));
+ _r_ctrl_settext (hwnd, IDC_RULE_ACTION_ALLOW, app.LocaleString (IDS_ACTION_ALLOW));
CheckRadioButton (hwnd, IDC_RULE_ACTION_BLOCK, IDC_RULE_ACTION_ALLOW, ptr_rule->is_block ? IDC_RULE_ACTION_BLOCK : IDC_RULE_ACTION_ALLOW);
@@ -188,7 +202,7 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
// protocols
if (GetDlgItem (hwnd, IDC_RULE_PROTOCOL_ID))
{
- SetDlgItemText (hwnd, IDC_RULE_PROTOCOL, app.LocaleString (IDS_PROTOCOL, L":").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_PROTOCOL, L"%s:", app.LocaleString (IDS_PROTOCOL));
UINT8 protos[] = {
IPPROTO_ICMP,
@@ -204,8 +218,10 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
};
INT index = 0;
+ WCHAR format[256];
+ LPCWSTR protocolString;
- SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_INSERTSTRING, (WPARAM)index, (LPARAM)text_any.GetString ());
+ SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_INSERTSTRING, (WPARAM)index, (LPARAM)app.LocaleString (IDS_ANY));
SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_SETITEMDATA, (WPARAM)index, 0);
if (ptr_rule->protocol == 0)
@@ -213,12 +229,16 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
index += 1;
- for (auto &proto : protos)
+ for (auto protocolId : protos)
{
- SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_INSERTSTRING, (WPARAM)index, (LPARAM)_r_fmt (L"%s (%" TEXT (PRIu8) L")", _app_getprotoname (proto, AF_UNSPEC, SZ_UNKNOWN).GetString (), proto).GetString ());
- SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_SETITEMDATA, (WPARAM)index, (LPARAM)proto);
+ protocolString = _app_getprotoname (protocolId, AF_UNSPEC, SZ_UNKNOWN);
- if (ptr_rule->protocol == proto)
+ _r_str_printf (format, RTL_NUMBER_OF (format), L"%s (%" TEXT (PRIu8) L")", protocolString, protocolId);
+
+ SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_INSERTSTRING, (WPARAM)index, (LPARAM)format);
+ SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_SETITEMDATA, (WPARAM)index, (LPARAM)protocolId);
+
+ if (ptr_rule->protocol == protocolId)
SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_SETCURSEL, (WPARAM)index, 0);
index += 1;
@@ -227,7 +247,11 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
// unknown protocol
if (SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_GETCURSEL, 0, 0) == CB_ERR)
{
- SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_INSERTSTRING, (WPARAM)index, (LPARAM)_r_fmt (L"%s (%" TEXT (PRIu8) L")", _app_getprotoname (ptr_rule->protocol, AF_UNSPEC, SZ_UNKNOWN).GetString (), ptr_rule->protocol).GetString ());
+ protocolString = _app_getprotoname (ptr_rule->protocol, AF_UNSPEC, SZ_UNKNOWN);
+
+ _r_str_printf (format, RTL_NUMBER_OF (format), L"%s (%" TEXT (PRIu8) L")", protocolString, ptr_rule->protocol);
+
+ SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_INSERTSTRING, (WPARAM)index, (LPARAM)format);
SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_SETITEMDATA, (WPARAM)index, (LPARAM)ptr_rule->protocol);
SendDlgItemMessage (hwnd, IDC_RULE_PROTOCOL_ID, CB_SETCURSEL, (WPARAM)index, 0);
@@ -239,35 +263,45 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
// rule (remote)
if (GetDlgItem (hwnd, IDC_RULE_REMOTE_ID))
{
- SetDlgItemText (hwnd, IDC_RULE_REMOTE, app.LocaleString (IDS_RULE, L" (" SZ_DIRECTION_REMOTE L"):").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_REMOTE, L"%s (" SZ_DIRECTION_REMOTE L"):", app.LocaleString (IDS_RULE));
_r_listview_setstyle (hwnd, IDC_RULE_REMOTE_ID, LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP, FALSE);
_r_listview_addcolumn (hwnd, IDC_RULE_REMOTE_ID, 0, NULL, -100, 0);
- if (!_r_str_isempty (ptr_rule->prule_remote))
+ if (!_r_str_isempty (ptr_rule->rule_remote))
{
- rstringvec rvc;
- _r_str_split (ptr_rule->prule_remote, INVALID_SIZE_T, DIVIDER_RULE[0], rvc);
-
INT index = 0;
- for (auto &rule_single : rvc)
+ PR_STRING rulePart;
+ R_STRINGREF remainingPart;
+
+ _r_stringref_initializeex (&remainingPart, ptr_rule->rule_remote->Buffer, ptr_rule->rule_remote->Length);
+
+ while (remainingPart.Length != 0)
{
- _r_str_trim (rule_single, DIVIDER_TRIM DIVIDER_RULE);
+ rulePart = _r_str_splitatchar (&remainingPart, &remainingPart, DIVIDER_RULE[0], TRUE);
- _r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_additem (hwnd, IDC_RULE_REMOTE_ID, index, 0, rule_single.GetString ());
- _r_fastlock_releaseshared (&lock_checkbox);
+ if (rulePart)
+ {
+ if (!_r_str_isempty (rulePart))
+ {
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _r_listview_additem (hwnd, IDC_RULE_REMOTE_ID, index, 0, rulePart->Buffer);
+ _r_fastlock_releaseshared (&lock_checkbox);
- index += 1;
+ index += 1;
+ }
+
+ _r_obj_dereference (rulePart);
+ }
}
_r_listview_setcolumn (hwnd, IDC_RULE_REMOTE_ID, 0, NULL, -100);
}
- SetDlgItemText (hwnd, IDC_RULE_REMOTE_ADD, app.LocaleString (IDS_ADD, L"...").GetString ());
- SetDlgItemText (hwnd, IDC_RULE_REMOTE_EDIT, app.LocaleString (IDS_EDIT2, L"...").GetString ());
- SetDlgItemText (hwnd, IDC_RULE_REMOTE_DELETE, app.LocaleString (IDS_DELETE, NULL).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_REMOTE_ADD, L"%s...", app.LocaleString (IDS_ADD));
+ _r_ctrl_settextformat (hwnd, IDC_RULE_REMOTE_EDIT, L"%s...", app.LocaleString (IDS_EDIT2));
+ _r_ctrl_settext (hwnd, IDC_RULE_REMOTE_DELETE, app.LocaleString (IDS_DELETE));
_r_ctrl_enable (hwnd, IDC_RULE_REMOTE_ADD, !ptr_rule->is_readonly);
_r_ctrl_enable (hwnd, IDC_RULE_REMOTE_EDIT, FALSE);
@@ -281,35 +315,45 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
// rule (local)
if (GetDlgItem (hwnd, IDC_RULE_LOCAL_ID))
{
- SetDlgItemText (hwnd, IDC_RULE_LOCAL, app.LocaleString (IDS_RULE, L" (" SZ_DIRECTION_LOCAL L"):").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_LOCAL, L"%s (" SZ_DIRECTION_LOCAL L"):", app.LocaleString (IDS_RULE));
_r_listview_setstyle (hwnd, IDC_RULE_LOCAL_ID, LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP, FALSE);
_r_listview_addcolumn (hwnd, IDC_RULE_LOCAL_ID, 0, NULL, -100, 0);
- if (!_r_str_isempty (ptr_rule->prule_local))
+ if (!_r_str_isempty (ptr_rule->rule_local))
{
- rstringvec rvc;
- _r_str_split (ptr_rule->prule_local, INVALID_SIZE_T, DIVIDER_RULE[0], rvc);
-
INT index = 0;
- for (auto &rule_single : rvc)
+ PR_STRING rulePart;
+ R_STRINGREF remainingPart;
+
+ _r_stringref_initializeex (&remainingPart, ptr_rule->rule_local->Buffer, ptr_rule->rule_local->Length);
+
+ while (remainingPart.Length != 0)
{
- _r_str_trim (rule_single, DIVIDER_TRIM DIVIDER_RULE);
+ rulePart = _r_str_splitatchar (&remainingPart, &remainingPart, DIVIDER_RULE[0], TRUE);
- _r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_additem (hwnd, IDC_RULE_LOCAL_ID, index, 0, rule_single.GetString ());
- _r_fastlock_releaseshared (&lock_checkbox);
+ if (rulePart)
+ {
+ if (!_r_str_isempty (rulePart))
+ {
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _r_listview_additem (hwnd, IDC_RULE_LOCAL_ID, index, 0, rulePart->Buffer);
+ _r_fastlock_releaseshared (&lock_checkbox);
- index += 1;
+ index += 1;
+ }
+
+ _r_obj_dereference (rulePart);
+ }
}
_r_listview_setcolumn (hwnd, IDC_RULE_LOCAL_ID, 0, NULL, -100);
}
- SetDlgItemText (hwnd, IDC_RULE_LOCAL_ADD, app.LocaleString (IDS_ADD, L"...").GetString ());
- SetDlgItemText (hwnd, IDC_RULE_LOCAL_EDIT, app.LocaleString (IDS_EDIT2, L"...").GetString ());
- SetDlgItemText (hwnd, IDC_RULE_LOCAL_DELETE, app.LocaleString (IDS_DELETE, NULL).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_LOCAL_ADD, L"%s...", app.LocaleString (IDS_ADD));
+ _r_ctrl_settextformat (hwnd, IDC_RULE_LOCAL_EDIT, L"%s...", app.LocaleString (IDS_EDIT2));
+ _r_ctrl_settext (hwnd, IDC_RULE_LOCAL_DELETE, app.LocaleString (IDS_DELETE));
_r_ctrl_enable (hwnd, IDC_RULE_LOCAL_ADD, !ptr_rule->is_readonly);
_r_ctrl_enable (hwnd, IDC_RULE_LOCAL_EDIT, FALSE);
@@ -327,25 +371,26 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
_r_listview_setstyle (hwnd, IDC_RULE_APPS_ID, LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP | LVS_EX_CHECKBOXES, TRUE);
- _r_listview_addcolumn (hwnd, IDC_RULE_APPS_ID, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0, LVCFMT_LEFT);
+ _r_listview_addcolumn (hwnd, IDC_RULE_APPS_ID, 0, app.LocaleString (IDS_NAME), 0, LVCFMT_LEFT);
_r_listview_addgroup (hwnd, IDC_RULE_APPS_ID, 0, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
_r_listview_addgroup (hwnd, IDC_RULE_APPS_ID, 1, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
_r_listview_addgroup (hwnd, IDC_RULE_APPS_ID, 2, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
// apps (apply to)
- for (auto &p : apps)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
+ PITEM_APP ptr_app;
+ SIZE_T app_hash;
+ INT group_id;
+ BOOLEAN is_enabled;
- if (!ptr_app_object)
- continue;
-
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- INT group_id;
+ if (!it->second)
+ continue;
+
+ app_hash = it->first;
+ ptr_app = (PITEM_APP)_r_obj_reference (it->second);
if (ptr_app->type == DataAppUWP)
group_id = 2;
@@ -357,17 +402,17 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
group_id = 0;
// check for services
- BOOLEAN is_enabled = (ptr_rule->apps.find (p.first) != ptr_rule->apps.end ()) || (ptr_rule->is_forservices && (p.first == config.ntoskrnl_hash || p.first == config.svchost_hash));
+ is_enabled = (ptr_rule->apps->find (app_hash) != ptr_rule->apps->end ()) || (ptr_rule->is_forservices && (app_hash == config.ntoskrnl_hash || app_hash == config.svchost_hash));
_r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_additem (hwnd, IDC_RULE_APPS_ID, 0, 0, _r_path_getfilename (ptr_app->display_name), ptr_app->icon_id, group_id, p.first);
+ _r_listview_additem (hwnd, IDC_RULE_APPS_ID, 0, 0, _r_obj_getstringordefault (ptr_app->display_name, SZ_EMPTY), ptr_app->icon_id, group_id, app_hash);
_r_listview_setitemcheck (hwnd, IDC_RULE_APPS_ID, 0, is_enabled);
_r_fastlock_releaseshared (&lock_checkbox);
- }
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
+ }
}
// resize column
@@ -382,10 +427,10 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
// hints
if (GetDlgItem (hwnd, IDC_RULE_HINT))
- SetDlgItemText (hwnd, IDC_RULE_HINT, app.LocaleString (IDS_RULE_HINT, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_RULE_HINT, app.LocaleString (IDS_RULE_HINT));
if (GetDlgItem (hwnd, IDC_RULE_APPS_HINT))
- SetDlgItemText (hwnd, IDC_RULE_APPS_HINT, app.LocaleString (IDS_RULE_APPS_HINT, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_RULE_APPS_HINT, app.LocaleString (IDS_RULE_APPS_HINT));
break;
}
@@ -453,17 +498,22 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
if (listview_id == IDC_RULE_REMOTE_ID || listview_id == IDC_RULE_LOCAL_ID)
{
+ PR_STRING localizedString = NULL;
BOOLEAN is_remote = listview_id == IDC_RULE_REMOTE_ID;
UINT id_add = is_remote ? IDC_RULE_REMOTE_ADD : IDC_RULE_LOCAL_ADD;
UINT id_edit = is_remote ? IDC_RULE_REMOTE_EDIT : IDC_RULE_LOCAL_EDIT;
UINT id_delete = is_remote ? IDC_RULE_REMOTE_DELETE : IDC_RULE_LOCAL_DELETE;
- AppendMenu (hsubmenu, MF_STRING, id_add, app.LocaleString (IDS_ADD, L"...").GetString ());
- AppendMenu (hsubmenu, MF_STRING, id_edit, app.LocaleString (IDS_EDIT2, L"...").GetString ());
- AppendMenu (hsubmenu, MF_STRING, id_delete, app.LocaleString (IDS_DELETE, NULL).GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_ADD)));
+ AppendMenu (hsubmenu, MF_STRING, id_add, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_EDIT2)));
+ AppendMenu (hsubmenu, MF_STRING, id_edit, _r_obj_getstringorempty (localizedString));
+
+ AppendMenu (hsubmenu, MF_STRING, id_delete, app.LocaleString (IDS_DELETE));
AppendMenu (hsubmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hsubmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY, NULL).GetString ());
+ AppendMenu (hsubmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY));
if (ptr_rule->is_readonly)
{
@@ -478,15 +528,17 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
_r_menu_enableitem (hsubmenu, id_delete, MF_BYCOMMAND, FALSE);
_r_menu_enableitem (hsubmenu, IDM_COPY, MF_BYCOMMAND, FALSE);
}
+
+ SAFE_DELETE_REFERENCE (localizedString);
}
else if (listview_id == IDC_RULE_APPS_ID)
{
- AppendMenu (hsubmenu, MF_STRING, IDM_CHECK, app.LocaleString (IDS_CHECK, NULL).GetString ());
- AppendMenu (hsubmenu, MF_STRING, IDM_UNCHECK, app.LocaleString (IDS_UNCHECK, NULL).GetString ());
+ AppendMenu (hsubmenu, MF_STRING, IDM_CHECK, app.LocaleString (IDS_CHECK));
+ AppendMenu (hsubmenu, MF_STRING, IDM_UNCHECK, app.LocaleString (IDS_UNCHECK));
AppendMenu (hsubmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hsubmenu, MF_STRING, IDM_PROPERTIES, app.LocaleString (IDS_SHOWINLIST, NULL).GetString ());
+ AppendMenu (hsubmenu, MF_STRING, IDM_PROPERTIES, app.LocaleString (IDS_SHOWINLIST));
AppendMenu (hsubmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hsubmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY, NULL).GetString ());
+ AppendMenu (hsubmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY));
if (ptr_rule->type != DataRuleCustom)
{
@@ -593,8 +645,13 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
case LVN_GETINFOTIP:
{
LPNMLVGETINFOTIP lpnmlv = (LPNMLVGETINFOTIP)lparam;
+ PR_STRING string = _app_gettooltip (hwnd, lpnmlv);
- _r_str_copy (lpnmlv->pszText, lpnmlv->cchTextMax, _app_gettooltip (hwnd, lpnmlv).GetString ());
+ if (string)
+ {
+ _r_str_copy (lpnmlv->pszText, lpnmlv->cchTextMax, string->Buffer);
+ _r_obj_dereference (string);
+ }
break;
}
@@ -604,7 +661,7 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
NMLVEMPTYMARKUP* lpnmlv = (NMLVEMPTYMARKUP*)lparam;
lpnmlv->dwFlags = EMF_CENTERED;
- _r_str_copy (lpnmlv->szMarkup, RTL_NUMBER_OF (lpnmlv->szMarkup), app.LocaleString (IDS_STATUS_EMPTY, NULL).GetString ());
+ _r_str_copy (lpnmlv->szMarkup, RTL_NUMBER_OF (lpnmlv->szMarkup), app.LocaleString (IDS_STATUS_EMPTY));
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
return TRUE;
@@ -664,7 +721,10 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
INT listview_id = ((ctrl_id == IDC_RULE_REMOTE_DELETE) ? IDC_RULE_REMOTE_ID : IDC_RULE_LOCAL_ID);
INT selected = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETSELECTEDCOUNT, 0, 0);
- if (!selected || app.ShowMessage (hwnd, MB_YESNO | MB_ICONEXCLAMATION, NULL, NULL, _r_fmt (app.LocaleString (IDS_QUESTION_DELETE, NULL).GetString (), selected).GetString ()) != IDYES)
+ WCHAR messageText[256];
+ _r_str_printf (messageText, RTL_NUMBER_OF (messageText), app.LocaleString (IDS_QUESTION_DELETE), selected);
+
+ if (!selected || app.ShowMessage (hwnd, MB_YESNO | MB_ICONEXCLAMATION, NULL, NULL, messageText) != IDYES)
break;
INT count = _r_listview_getitemcount (hwnd, listview_id, FALSE) - 1;
@@ -715,28 +775,45 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
case IDM_COPY:
{
- HWND hlistview = GetFocus ();
+ HWND hlistview;
+ PR_STRING buffer;
+ PR_STRING string;
+ INT listview_id;
+ INT item;
+
+ hlistview = GetFocus ();
if (!hlistview)
break;
- INT listview_id = GetDlgCtrlID (hlistview);
+ listview_id = GetDlgCtrlID (hlistview);
if (!listview_id || !_r_listview_getitemcount (hwnd, listview_id, FALSE))
break;
- INT item = INVALID_INT;
+ buffer = _r_obj_createstringbuilder (512 * sizeof (WCHAR));
- rstring buffer;
+ item = INVALID_INT;
while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
{
- buffer.AppendFormat (L"%s\r\n", _r_listview_getitemtext (hwnd, listview_id, item, 0).GetString ());
+ string = _r_listview_getitemtext (hwnd, listview_id, item, 0);
+
+ if (string)
+ {
+ if (!_r_str_isempty (string))
+ _r_string_appendformat (&buffer, L"%s\r\n", string->Buffer);
+
+ _r_obj_dereference (string);
+ }
}
_r_str_trim (buffer, DIVIDER_TRIM);
- _r_clipboard_set (hwnd, buffer.GetString (), buffer.GetLength ());
+ if (!_r_str_isempty (buffer))
+ _r_clipboard_set (hwnd, buffer->Buffer, _r_obj_getstringlength (buffer));
+
+ _r_obj_dereference (buffer);
break;
}
@@ -751,22 +828,13 @@ INT_PTR CALLBACK EditorPagesProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lpa
INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
- static PR_OBJECT ptr_rule_object = NULL;
static PITEM_RULE ptr_rule = NULL;
switch (msg)
{
case WM_INITDIALOG:
{
- ptr_rule_object = (PR_OBJECT)lparam;
-
- if (!ptr_rule_object)
- {
- EndDialog (hwnd, FALSE);
- return FALSE;
- }
-
- ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ ptr_rule = (PITEM_RULE)lparam;
if (!ptr_rule)
{
@@ -774,13 +842,13 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
return FALSE;
}
- //// configure window
+ // configure window
_r_wnd_center (hwnd, GetParent (hwnd));
- //// configure tabs
- _r_tab_additem (hwnd, IDC_TAB, 0, app.LocaleString (IDS_SETTINGS_GENERAL, NULL).GetString (), I_IMAGENONE, (LPARAM)CreateDialogParam (app.GetHINSTANCE (), MAKEINTRESOURCE (IDD_EDITOR_GENERAL), hwnd, &EditorPagesProc, (LPARAM)ptr_rule));
- _r_tab_additem (hwnd, IDC_TAB, 1, app.LocaleString (IDS_RULE, NULL).GetString (), I_IMAGENONE, (LPARAM)CreateDialogParam (app.GetHINSTANCE (), MAKEINTRESOURCE (IDD_EDITOR_RULE), hwnd, &EditorPagesProc, (LPARAM)ptr_rule));
- _r_tab_additem (hwnd, IDC_TAB, 2, app.LocaleString (IDS_TAB_APPS, NULL).GetString (), I_IMAGENONE, (LPARAM)CreateDialogParam (app.GetHINSTANCE (), MAKEINTRESOURCE (IDD_EDITOR_APPS), hwnd, &EditorPagesProc, (LPARAM)ptr_rule));
+ // configure tabs
+ _r_tab_additem (hwnd, IDC_TAB, 0, app.LocaleString (IDS_SETTINGS_GENERAL), I_IMAGENONE, (LPARAM)CreateDialogParam (app.GetHINSTANCE (), MAKEINTRESOURCE (IDD_EDITOR_GENERAL), hwnd, &EditorPagesProc, (LPARAM)ptr_rule));
+ _r_tab_additem (hwnd, IDC_TAB, 1, app.LocaleString (IDS_RULE), I_IMAGENONE, (LPARAM)CreateDialogParam (app.GetHINSTANCE (), MAKEINTRESOURCE (IDD_EDITOR_RULE), hwnd, &EditorPagesProc, (LPARAM)ptr_rule));
+ _r_tab_additem (hwnd, IDC_TAB, 2, app.LocaleString (IDS_TAB_APPS), I_IMAGENONE, (LPARAM)CreateDialogParam (app.GetHINSTANCE (), MAKEINTRESOURCE (IDD_EDITOR_APPS), hwnd, &EditorPagesProc, (LPARAM)ptr_rule));
#if !defined(_APP_NO_DARKTHEME)
_r_wnd_setdarktheme (hwnd);
@@ -788,21 +856,19 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
// localize window
{
- rstring title = app.LocaleString (IDS_EDITOR, NULL);
-
- if (!_r_str_isempty (ptr_rule->pname))
- title.AppendFormat (L" \"%s\"", !_r_str_isempty (ptr_rule->pname) ? ptr_rule->pname : SZ_RULE_NEW_TITLE);
+ WCHAR title[128];
+ _r_str_printf (title, RTL_NUMBER_OF (title), L"%s \"%s\"", app.LocaleString (IDS_EDITOR), _r_obj_getstringordefault (ptr_rule->name, SZ_RULE_NEW_TITLE));
if (ptr_rule->is_readonly)
- title.AppendFormat (L" (%s)", SZ_RULE_INTERNAL_TITLE);
+ _r_str_appendformat (title, RTL_NUMBER_OF (title), L" (%s)", SZ_RULE_INTERNAL_TITLE);
- SetWindowText (hwnd, title.GetString ());
+ SetWindowText (hwnd, title);
}
- SetDlgItemText (hwnd, IDC_ENABLE_CHK, app.LocaleString (IDS_ENABLE_CHK, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_ENABLE_CHK, app.LocaleString (IDS_ENABLE_CHK));
- SetDlgItemText (hwnd, IDC_SAVE, app.LocaleString (IDS_SAVE, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_CLOSE, app.LocaleString (IDS_CLOSE, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_SAVE, app.LocaleString (IDS_SAVE));
+ _r_ctrl_settext (hwnd, IDC_CLOSE, app.LocaleString (IDS_CLOSE));
_r_wnd_addstyle (hwnd, IDC_SAVE, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE);
_r_wnd_addstyle (hwnd, IDC_CLOSE, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE);
@@ -858,6 +924,7 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
_r_tab_adjustchild (hwnd, IDC_TAB, hpage);
ShowWindow (hpage, SW_SHOW);
+ SetFocus (hpage);
}
break;
@@ -883,6 +950,9 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
if (!SendDlgItemMessage (hpage_general, IDC_RULE_NAME_ID, WM_GETTEXTLENGTH, 0, 0))
return FALSE;
+ PR_STRING buffer;
+ PR_STRING string;
+
ptr_rule->is_haveerrors = FALSE; // reset errors
// do not change read-only rules
@@ -890,56 +960,90 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
// name
{
- rstring name = _r_ctrl_gettext (hpage_general, IDC_RULE_NAME_ID);
+ PR_STRING name = _r_ctrl_gettext (hpage_general, IDC_RULE_NAME_ID);
+
+ if (_r_str_isempty (name))
+ {
+ if (name)
+ _r_obj_dereference (name);
+
+ return FALSE;
+ }
_r_str_trim (name, DIVIDER_TRIM DIVIDER_RULE);
- _r_str_alloc (&ptr_rule->pname, min (name.GetLength (), RULE_NAME_CCH_MAX), name.GetString ());
+ _r_obj_movereference (&ptr_rule->name, name);
}
// rule (remote)
{
- rstring buffer;
+ if (ptr_rule->rule_remote)
+ _r_obj_clearreference (&ptr_rule->rule_remote);
+
+ buffer = _r_obj_createstringbuilder (RULE_RULE_CCH_MAX * sizeof (WCHAR));
for (INT i = 0; i < _r_listview_getitemcount (hpage_rule, IDC_RULE_REMOTE_ID, FALSE); i++)
{
- rstring rule = _r_listview_getitemtext (hpage_rule, IDC_RULE_REMOTE_ID, i, 0);
- _r_str_trim (rule, DIVIDER_TRIM DIVIDER_RULE);
+ string = _r_listview_getitemtext (hpage_rule, IDC_RULE_REMOTE_ID, i, 0);
- if (!rule.IsEmpty ())
+ if (string)
{
- // check maximum length of one rule
- if ((buffer.GetLength () + rule.GetLength ()) > RULE_RULE_CCH_MAX)
- break;
+ _r_str_trim (string, DIVIDER_TRIM DIVIDER_RULE);
- buffer.AppendFormat (L"%s" DIVIDER_RULE, rule.GetString ());
+ if (!_r_str_isempty (string))
+ {
+ // check maximum length of one rule
+ if ((_r_obj_getstringlength (buffer) + _r_obj_getstringlength (string)) > RULE_RULE_CCH_MAX)
+ break;
+
+ _r_string_appendformat (&buffer, L"%s" DIVIDER_RULE, _r_obj_getstring (string));
+ }
+
+ _r_obj_dereference (string);
}
}
_r_str_trim (buffer, DIVIDER_TRIM DIVIDER_RULE);
- _r_str_alloc (&ptr_rule->prule_remote, buffer.GetLength (), buffer.GetString ());
+
+ if (!_r_str_isempty (buffer))
+ _r_obj_movereference (&ptr_rule->rule_remote, buffer);
+ else
+ _r_obj_clearreference (&buffer);
}
// rule (local)
{
- rstring buffer;
+ if (ptr_rule->rule_local)
+ _r_obj_clearreference (&ptr_rule->rule_local);
+
+ buffer = _r_obj_createstringbuilder (RULE_RULE_CCH_MAX * sizeof (WCHAR));
for (INT i = 0; i < _r_listview_getitemcount (hpage_rule, IDC_RULE_LOCAL_ID, FALSE); i++)
{
- rstring rule = _r_listview_getitemtext (hpage_rule, IDC_RULE_LOCAL_ID, i, 0);
- _r_str_trim (rule, DIVIDER_TRIM DIVIDER_RULE);
+ string = _r_listview_getitemtext (hpage_rule, IDC_RULE_LOCAL_ID, i, 0);
- if (!rule.IsEmpty ())
+ if (string)
{
- // check maximum length of one rule
- if ((buffer.GetLength () + rule.GetLength ()) > RULE_RULE_CCH_MAX)
- break;
+ _r_str_trim (string, DIVIDER_TRIM DIVIDER_RULE);
- buffer.AppendFormat (L"%s" DIVIDER_RULE, rule.GetString ());
+ if (!_r_str_isempty (string))
+ {
+ // check maximum length of one rule
+ if ((_r_obj_getstringlength (buffer) + _r_obj_getstringlength (string)) > RULE_RULE_CCH_MAX)
+ break;
+
+ _r_string_appendformat (&buffer, L"%s" DIVIDER_RULE, _r_obj_getstring (string));
+ }
+
+ _r_obj_dereference (string);
}
}
_r_str_trim (buffer, DIVIDER_TRIM DIVIDER_RULE);
- _r_str_alloc (&ptr_rule->prule_local, buffer.GetLength (), buffer.GetString ());
+
+ if (!_r_str_isempty (buffer))
+ _r_obj_movereference (&ptr_rule->rule_local, buffer);
+ else
+ _r_obj_clearreference (&buffer);
}
ptr_rule->protocol = (UINT8)SendDlgItemMessage (hpage_general, IDC_RULE_PROTOCOL_ID, CB_GETITEMDATA, SendDlgItemMessage (hpage_general, IDC_RULE_PROTOCOL_ID, CB_GETCURSEL, 0, 0), 0);
@@ -954,7 +1058,7 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
// save rule apps
if (ptr_rule->type == DataRuleCustom)
{
- ptr_rule->apps.clear ();
+ ptr_rule->apps->clear ();
for (INT i = 0; i < _r_listview_getitemcount (hpage_apps, IDC_RULE_APPS_ID, FALSE); i++)
{
@@ -966,7 +1070,7 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
if (_app_isappfound (app_hash))
{
if (_r_listview_isitemchecked (hpage_apps, IDC_RULE_APPS_ID, i))
- ptr_rule->apps[app_hash] = TRUE;
+ ptr_rule->apps->emplace (app_hash, TRUE);
}
}
}
@@ -975,11 +1079,14 @@ INT_PTR CALLBACK EditorProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
_app_ruleenable (ptr_rule, (IsDlgButtonChecked (hwnd, IDC_ENABLE_CHK) == BST_CHECKED));
// apply filter
- {
- OBJECTS_VEC rules;
- rules.push_back (ptr_rule_object);
+ HANDLE hengine = _wfp_getenginehandle ();
- _wfp_create4filters (_wfp_getenginehandle (), rules, __LINE__);
+ if (hengine)
+ {
+ OBJECTS_RULE_VECTOR rules;
+ rules.emplace_back (ptr_rule);
+
+ _wfp_create4filters (hengine, &rules, __LINE__);
// note: do not needed!
//_app_dereferenceobjects (rules, &_app_dereferencerule);
diff --git a/src/main.cpp b/src/main.cpp
index 3037522d..1a278915 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -55,55 +55,67 @@ THREAD_FN NetworkMonitorThread (PVOID lparam)
if (network_timeout && network_timeout != INFINITE)
{
- HWND hwnd = (HWND)lparam;
- INT network_listview_id = IDC_NETWORK;
-
HASHER_MAP checker_map;
+ PITEM_NETWORK ptr_network;
+ PR_STRING localAddressString;
+ PR_STRING localPortString;
+ PR_STRING remoteAddressString;
+ PR_STRING remotePortString;
+ HWND hwnd;
+ INT network_listview_id;
+ INT current_listview_id;
+ INT item_id;
+ BOOLEAN is_highlighting_enabled;
+ BOOLEAN is_refresh;
+
+ hwnd = (HWND)lparam;
+ network_listview_id = IDC_NETWORK;
network_timeout = _r_calc_clamp (DWORD, network_timeout, 500, 60 * 1000); // set allowed range
while (TRUE)
{
- _app_generate_connections (network_map, checker_map);
+ _app_generate_connections (&network_map, &checker_map);
- BOOLEAN is_highlighting_enabled = app.ConfigGetBoolean (L"IsEnableHighlighting", TRUE) && app.ConfigGetBoolean (L"IsHighlightConnection", TRUE, L"colors");
- INT current_listview_id = (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT);
- BOOLEAN is_refresh = FALSE;
+ is_highlighting_enabled = app.ConfigGetBoolean (L"IsEnableHighlighting", TRUE) && app.ConfigGetBoolean (L"IsHighlightConnection", TRUE, L"colors");
+ current_listview_id = (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT);
+ is_refresh = FALSE;
// add new connections into list
- for (auto &p : network_map)
+ for (auto it = network_map.begin (); it != network_map.end (); ++it)
{
- if (checker_map.find (p.first) == checker_map.end () || !checker_map[p.first])
+ if (!it->second)
continue;
- PITEM_NETWORK ptr_network = (PITEM_NETWORK)_r_obj_reference (p.second);
-
- if (!ptr_network)
+ if (checker_map.find (it->first) == checker_map.end () || !checker_map.at (it->first))
continue;
- LPWSTR local_fmt = NULL;
- LPWSTR remote_fmt = NULL;
+ ptr_network = (PITEM_NETWORK)_r_obj_reference (it->second);
- _app_formataddress (ptr_network->af, 0, &ptr_network->local_addr, 0, &local_fmt, 0);
- _app_formataddress (ptr_network->af, 0, &ptr_network->remote_addr, 0, &remote_fmt, 0);
+ localAddressString = _app_formataddress (ptr_network->af, 0, &ptr_network->local_addr, 0, 0);
+ localPortString = _app_formatport (ptr_network->local_port, TRUE);
+ remoteAddressString = _app_formataddress (ptr_network->af, 0, &ptr_network->remote_addr, 0, 0);
+ remotePortString = _app_formatport (ptr_network->remote_port, TRUE);
- INT item_id = _r_listview_getitemcount (hwnd, network_listview_id, FALSE);
+ item_id = _r_listview_getitemcount (hwnd, network_listview_id, FALSE);
- _r_listview_additem (hwnd, network_listview_id, item_id, 0, _r_path_getfilename (ptr_network->path), ptr_network->icon_id, I_GROUPIDNONE, p.first);
+ _r_listview_additem (hwnd, network_listview_id, item_id, 0, _r_path_getbasename (_r_obj_getstring (ptr_network->path)), ptr_network->icon_id, I_GROUPIDNONE, it->first);
- _r_listview_setitem (hwnd, network_listview_id, item_id, 1, !_r_str_isempty (local_fmt) ? local_fmt : SZ_EMPTY);
- _r_listview_setitem (hwnd, network_listview_id, item_id, 3, !_r_str_isempty (remote_fmt) ? remote_fmt : SZ_EMPTY);
- _r_listview_setitem (hwnd, network_listview_id, item_id, 5, _app_getprotoname (ptr_network->protocol, ptr_network->af, NULL).GetString ());
- _r_listview_setitem (hwnd, network_listview_id, item_id, 6, _app_getconnectionstatusname (ptr_network->state, NULL).GetString ());
+ _r_listview_setitem (hwnd, network_listview_id, item_id, 1, _r_obj_getstringordefault (localAddressString, SZ_EMPTY));
+ _r_listview_setitem (hwnd, network_listview_id, item_id, 3, _r_obj_getstringordefault (remoteAddressString, SZ_EMPTY));
+ _r_listview_setitem (hwnd, network_listview_id, item_id, 5, _app_getprotoname (ptr_network->protocol, ptr_network->af, SZ_EMPTY));
+ _r_listview_setitem (hwnd, network_listview_id, item_id, 6, _app_getconnectionstatusname (ptr_network->state, NULL));
- if (ptr_network->local_port)
- _r_listview_setitem (hwnd, network_listview_id, item_id, 2, _app_formatport (ptr_network->local_port, TRUE).GetString ());
+ if (localPortString)
+ _r_listview_setitem (hwnd, network_listview_id, item_id, 2, _r_obj_getstringorempty (localPortString));
- if (ptr_network->remote_port)
- _r_listview_setitem (hwnd, network_listview_id, item_id, 4, _app_formatport (ptr_network->remote_port, TRUE).GetString ());
+ if (remotePortString)
+ _r_listview_setitem (hwnd, network_listview_id, item_id, 4, _r_obj_getstringorempty (remotePortString));
- SAFE_DELETE_MEMORY (local_fmt);
- SAFE_DELETE_MEMORY (remote_fmt);
+ SAFE_DELETE_REFERENCE (localAddressString);
+ SAFE_DELETE_REFERENCE (localPortString);
+ SAFE_DELETE_REFERENCE (remoteAddressString);
+ SAFE_DELETE_REFERENCE (remotePortString);
// redraw listview item
if (is_highlighting_enabled)
@@ -197,7 +209,7 @@ BOOLEAN _app_changefilters (HWND hwnd, BOOLEAN is_install, BOOLEAN is_forced)
{
_app_initinterfacestate (hwnd, TRUE);
- _app_freethreadpool (threads_pool);
+ _app_freethreadpool (&threads_pool);
PITEM_CONTEXT pcontext = (PITEM_CONTEXT)_r_mem_allocatezero (sizeof (ITEM_CONTEXT));
@@ -212,7 +224,7 @@ BOOLEAN _app_changefilters (HWND hwnd, BOOLEAN is_install, BOOLEAN is_forced)
return FALSE;
}
- threads_pool.push_back (hthread);
+ threads_pool.emplace_back (hthread);
_r_sys_resumethread (hthread);
return TRUE;
@@ -225,26 +237,26 @@ BOOLEAN _app_changefilters (HWND hwnd, BOOLEAN is_install, BOOLEAN is_forced)
return FALSE;
}
-VOID addcolor (UINT locale_id, LPCWSTR config_name, BOOLEAN is_enabled, LPCWSTR config_value, COLORREF default_clr)
+VOID addcolor (UINT locale_id, LPCWSTR configName, BOOLEAN is_enabled, LPCWSTR configValue, COLORREF default_clr)
{
PITEM_COLOR ptr_clr = (PITEM_COLOR)_r_mem_allocatezero (sizeof (ITEM_COLOR));
- if (!_r_str_isempty (config_name))
- _r_str_alloc (&ptr_clr->pcfg_name, _r_str_length (config_name), config_name);
+ if (!_r_str_isempty (configName))
+ ptr_clr->configName = _r_obj_createstring (configName);
- if (!_r_str_isempty (config_value))
+ if (!_r_str_isempty (configValue))
{
- _r_str_alloc (&ptr_clr->pcfg_value, _r_str_length (config_value), config_value);
+ ptr_clr->configValue = _r_obj_createstring (configValue);
- ptr_clr->clr_hash = _r_str_hash (config_value);
- ptr_clr->new_clr = app.ConfigGetUlong (config_value, default_clr, L"colors");
+ ptr_clr->hash = _r_str_hash (configValue);
+ ptr_clr->new_clr = app.ConfigGetUlong (configValue, default_clr, L"colors");
}
ptr_clr->default_clr = default_clr;
ptr_clr->locale_id = locale_id;
ptr_clr->is_enabled = is_enabled;
- colors.push_back (ptr_clr);
+ colors.emplace_back (ptr_clr);
}
BOOLEAN _app_installmessage (HWND hwnd, BOOLEAN is_install)
@@ -286,13 +298,13 @@ BOOLEAN _app_installmessage (HWND hwnd, BOOLEAN is_install)
td_buttons[1].nButtonID = IDNO;
td_buttons[1].pszButtonText = str_button_text_2;
- _r_str_copy (str_button_text_1, RTL_NUMBER_OF (str_button_text_1), app.LocaleString (is_install ? IDS_TRAY_START : IDS_TRAY_STOP, NULL).GetString ());
- _r_str_copy (str_button_text_2, RTL_NUMBER_OF (str_button_text_2), app.LocaleString (IDS_CLOSE, NULL).GetString ());
+ _r_str_copy (str_button_text_1, RTL_NUMBER_OF (str_button_text_1), app.LocaleString (is_install ? IDS_TRAY_START : IDS_TRAY_STOP));
+ _r_str_copy (str_button_text_2, RTL_NUMBER_OF (str_button_text_2), app.LocaleString (IDS_CLOSE));
if (is_install)
{
- _r_str_copy (str_main, RTL_NUMBER_OF (str_main), app.LocaleString (IDS_QUESTION_START, NULL).GetString ());
- _r_str_copy (str_flag, RTL_NUMBER_OF (str_flag), app.LocaleString (IDS_DISABLEWINDOWSFIREWALL_CHK, NULL).GetString ());
+ _r_str_copy (str_main, RTL_NUMBER_OF (str_main), app.LocaleString (IDS_QUESTION_START));
+ _r_str_copy (str_flag, RTL_NUMBER_OF (str_flag), app.LocaleString (IDS_DISABLEWINDOWSFIREWALL_CHK));
tdc.pRadioButtons = td_radios;
tdc.cRadioButtons = RTL_NUMBER_OF (td_radios);
@@ -305,16 +317,16 @@ BOOLEAN _app_installmessage (HWND hwnd, BOOLEAN is_install)
td_radios[1].nButtonID = IDNO;
td_radios[1].pszButtonText = radio_text_2;
- _r_str_copy (radio_text_1, RTL_NUMBER_OF (radio_text_1), app.LocaleString (IDS_INSTALL_PERMANENT, NULL).GetString ());
- _r_str_copy (radio_text_2, RTL_NUMBER_OF (radio_text_2), app.LocaleString (IDS_INSTALL_TEMPORARY, NULL).GetString ());
+ _r_str_copy (radio_text_1, RTL_NUMBER_OF (radio_text_1), app.LocaleString (IDS_INSTALL_PERMANENT));
+ _r_str_copy (radio_text_2, RTL_NUMBER_OF (radio_text_2), app.LocaleString (IDS_INSTALL_TEMPORARY));
if (app.ConfigGetBoolean (L"IsDisableWindowsFirewallChecked", TRUE))
tdc.dwFlags |= TDF_VERIFICATION_FLAG_CHECKED;
}
else
{
- _r_str_copy (str_main, RTL_NUMBER_OF (str_main), app.LocaleString (IDS_QUESTION_STOP, NULL).GetString ());
- _r_str_copy (str_flag, RTL_NUMBER_OF (str_flag), app.LocaleString (IDS_ENABLEWINDOWSFIREWALL_CHK, NULL).GetString ());
+ _r_str_copy (str_main, RTL_NUMBER_OF (str_main), app.LocaleString (IDS_QUESTION_STOP));
+ _r_str_copy (str_flag, RTL_NUMBER_OF (str_flag), app.LocaleString (IDS_ENABLEWINDOWSFIREWALL_CHK));
if (app.ConfigGetBoolean (L"IsEnableWindowsFirewallChecked", TRUE))
tdc.dwFlags |= TDF_VERIFICATION_FLAG_CHECKED;
@@ -500,8 +512,8 @@ VOID _app_config_apply (HWND hwnd, INT ctrl_id)
if (_wfp_dumpfilters (hengine, &GUID_WfpProvider, &filter_all))
{
- for (auto &filter_id : filter_all)
- _app_setsecurityinfoforfilter (hengine, &filter_id, new_val, __LINE__);
+ for (auto it = filter_all.begin (); it != filter_all.end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), new_val, __LINE__);
}
}
@@ -534,24 +546,23 @@ VOID _app_config_apply (HWND hwnd, INT ctrl_id)
if (new_val)
{
- for (auto &p : apps)
- {
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
+ PR_STRING signatureString;
+ PITEM_APP ptr_app;
+ SIZE_T app_hash;
- if (!ptr_app_object)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
+ {
+ if (!it->second)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ app_hash = it->first;
+ ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app)
- {
- PR_OBJECT ptr_signature_object = _app_getsignatureinfo (p.first, ptr_app);
+ signatureString = _app_getsignatureinfo (app_hash, ptr_app);
- if (ptr_signature_object)
- _r_obj2_dereference (ptr_signature_object);
- }
+ SAFE_DELETE_REFERENCE (signatureString);
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
@@ -661,14 +672,14 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
if (htip)
{
- _r_ctrl_settip (htip, hwnd, IDC_RULE_BLOCKOUTBOUND, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_RULE_BLOCKINBOUND, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_RULE_ALLOWLOOPBACK, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_RULE_ALLOW6TO4, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_RULE_BLOCKOUTBOUND, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_RULE_BLOCKINBOUND, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_RULE_ALLOWLOOPBACK, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_RULE_ALLOW6TO4, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_USESTEALTHMODE_CHK, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_INSTALLBOOTTIMEFILTERS_CHK, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_SECUREFILTERS_CHK, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_USESTEALTHMODE_CHK, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_INSTALLBOOTTIMEFILTERS_CHK, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_SECUREFILTERS_CHK, LPSTR_TEXTCALLBACK);
}
break;
@@ -708,15 +719,17 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
_r_listview_addcolumn (hwnd, IDC_COLORS, 0, L"", 0, LVCFMT_LEFT);
INT item = 0;
+ PITEM_COLOR ptr_clr;
- for (auto &ptr_clr : colors)
+ for (auto it = colors.begin (); it != colors.end (); ++it)
{
- ptr_clr->new_clr = app.ConfigGetUlong (ptr_clr->pcfg_value, ptr_clr->default_clr, L"colors");
+ ptr_clr = *it;
+ ptr_clr->new_clr = app.ConfigGetUlong (_r_obj_getstring (ptr_clr->configValue), ptr_clr->default_clr, L"colors");
_r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_additem (hwnd, IDC_COLORS, item, 0, app.LocaleString (ptr_clr->locale_id, NULL).GetString (), config.icon_id, I_GROUPIDNONE, (LPARAM)ptr_clr);
- _r_listview_setitemcheck (hwnd, IDC_COLORS, item, app.ConfigGetBoolean (ptr_clr->pcfg_name, ptr_clr->is_enabled, L"colors"));
+ _r_listview_additem (hwnd, IDC_COLORS, item, 0, app.LocaleString (ptr_clr->locale_id), config.icon_id, I_GROUPIDNONE, (LPARAM)ptr_clr);
+ _r_listview_setitemcheck (hwnd, IDC_COLORS, item, app.ConfigGetBoolean (_r_obj_getstring (ptr_clr->configName), ptr_clr->is_enabled, L"colors"));
_r_fastlock_releaseshared (&lock_checkbox);
@@ -747,8 +760,8 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
{
CheckDlgButton (hwnd, IDC_ENABLELOG_CHK, app.ConfigGetBoolean (L"IsLogEnabled", FALSE) ? BST_CHECKED : BST_UNCHECKED);
- SetDlgItemText (hwnd, IDC_LOGPATH, app.ConfigGetString (L"LogPath", LOG_PATH_DEFAULT).GetString ());
- SetDlgItemText (hwnd, IDC_LOGVIEWER, app.ConfigGetString (L"LogViewer", LOG_VIEWER_DEFAULT).GetString ());
+ _r_ctrl_settext (hwnd, IDC_LOGPATH, app.ConfigGetString (L"LogPath", LOG_PATH_DEFAULT));
+ _r_ctrl_settext (hwnd, IDC_LOGVIEWER, app.ConfigGetString (L"LogViewer", LOG_VIEWER_DEFAULT));
UDACCEL ud = {0};
ud.nInc = 64; // set step to 64kb
@@ -780,83 +793,88 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
case RM_LOCALIZE:
{
INT dialog_id = (INT)wparam;
- rstring recommended = app.LocaleString (IDS_RECOMMENDED, NULL);
// localize titles
- SetDlgItemText (hwnd, IDC_TITLE_GENERAL, app.LocaleString (IDS_TITLE_GENERAL, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_LANGUAGE, app.LocaleString (IDS_TITLE_LANGUAGE, L": (Language)").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_BLOCKLIST_SPY, app.LocaleString (IDS_BLOCKLIST_SPY, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_BLOCKLIST_UPDATE, app.LocaleString (IDS_BLOCKLIST_UPDATE, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_BLOCKLIST_EXTRA, app.LocaleString (IDS_BLOCKLIST_EXTRA, L": (Skype, Bing, Live, Outlook, etc.)").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_CONNECTIONS, app.LocaleString (IDS_TAB_NETWORK, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_SECURITY, app.LocaleString (IDS_TITLE_SECURITY, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_CONFIRMATIONS, app.LocaleString (IDS_TITLE_CONFIRMATIONS, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_HIGHLIGHTING, app.LocaleString (IDS_TITLE_HIGHLIGHTING, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_NOTIFICATIONS, app.LocaleString (IDS_TITLE_NOTIFICATIONS, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_LOGGING, app.LocaleString (IDS_TITLE_LOGGING, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_INTERFACE, app.LocaleString (IDS_TITLE_INTERFACE, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_EXCLUDE, app.LocaleString (IDS_TITLE_EXCLUDE, L":").GetString ());
- SetDlgItemText (hwnd, IDC_TITLE_ADVANCED, app.LocaleString (IDS_TITLE_ADVANCED, L":").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_GENERAL, L"%s:", app.LocaleString (IDS_TITLE_GENERAL));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_LANGUAGE, L"%s: (Language)", app.LocaleString (IDS_TITLE_LANGUAGE));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_BLOCKLIST_SPY, L"%s:", app.LocaleString (IDS_BLOCKLIST_SPY));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_BLOCKLIST_UPDATE, L"%s:", app.LocaleString (IDS_BLOCKLIST_UPDATE));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_BLOCKLIST_EXTRA, L"%s: (Skype, Bing, Live, Outlook, etc.)", app.LocaleString (IDS_BLOCKLIST_EXTRA));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_CONNECTIONS, L"%s:", app.LocaleString (IDS_TAB_NETWORK));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_SECURITY, L"%s:", app.LocaleString (IDS_TITLE_SECURITY));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_CONFIRMATIONS, L"%s:", app.LocaleString (IDS_TITLE_CONFIRMATIONS));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_HIGHLIGHTING, L"%s:", app.LocaleString (IDS_TITLE_HIGHLIGHTING));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_NOTIFICATIONS, L"%s:", app.LocaleString (IDS_TITLE_NOTIFICATIONS));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_LOGGING, L"%s:", app.LocaleString (IDS_TITLE_LOGGING));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_INTERFACE, L"%s:", app.LocaleString (IDS_TITLE_INTERFACE));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_EXCLUDE, L"%s:", app.LocaleString (IDS_TITLE_EXCLUDE));
+ _r_ctrl_settextformat (hwnd, IDC_TITLE_ADVANCED, L"%s:", app.LocaleString (IDS_TITLE_ADVANCED));
switch (dialog_id)
{
case IDD_SETTINGS_GENERAL:
{
- SetDlgItemText (hwnd, IDC_ALWAYSONTOP_CHK, app.LocaleString (IDS_ALWAYSONTOP_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_LOADONSTARTUP_CHK, app.LocaleString (IDS_LOADONSTARTUP_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_STARTMINIMIZED_CHK, app.LocaleString (IDS_STARTMINIMIZED_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_SKIPUACWARNING_CHK, app.LocaleString (IDS_SKIPUACWARNING_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_CHECKUPDATES_CHK, app.LocaleString (IDS_CHECKUPDATES_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_CHECKUPDATESBETA_CHK, app.LocaleString (IDS_CHECKUPDATESBETA_CHK, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_ALWAYSONTOP_CHK, app.LocaleString (IDS_ALWAYSONTOP_CHK));
+ _r_ctrl_settext (hwnd, IDC_LOADONSTARTUP_CHK, app.LocaleString (IDS_LOADONSTARTUP_CHK));
+ _r_ctrl_settext (hwnd, IDC_STARTMINIMIZED_CHK, app.LocaleString (IDS_STARTMINIMIZED_CHK));
+ _r_ctrl_settext (hwnd, IDC_SKIPUACWARNING_CHK, app.LocaleString (IDS_SKIPUACWARNING_CHK));
+ _r_ctrl_settext (hwnd, IDC_CHECKUPDATES_CHK, app.LocaleString (IDS_CHECKUPDATES_CHK));
+ _r_ctrl_settext (hwnd, IDC_CHECKUPDATESBETA_CHK, app.LocaleString (IDS_CHECKUPDATESBETA_CHK));
- SetDlgItemText (hwnd, IDC_LANGUAGE_HINT, app.LocaleString (IDS_LANGUAGE_HINT, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_LANGUAGE_HINT, app.LocaleString (IDS_LANGUAGE_HINT));
break;
}
case IDD_SETTINGS_RULES:
{
- SetDlgItemText (hwnd, IDC_RULE_BLOCKOUTBOUND, app.LocaleString (IDS_RULE_BLOCKOUTBOUND, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_RULE_BLOCKINBOUND, app.LocaleString (IDS_RULE_BLOCKINBOUND, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
+ LPCWSTR recommendedString = app.LocaleString (IDS_RECOMMENDED);
- SetDlgItemText (hwnd, IDC_RULE_ALLOWLOOPBACK, app.LocaleString (IDS_RULE_ALLOWLOOPBACK, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_RULE_ALLOW6TO4, app.LocaleString (IDS_RULE_ALLOW6TO4, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_BLOCKOUTBOUND, L"%s (%s)", app.LocaleString (IDS_RULE_BLOCKOUTBOUND), recommendedString);
+ _r_ctrl_settextformat (hwnd, IDC_RULE_BLOCKINBOUND, L"%s (%s)", app.LocaleString (IDS_RULE_BLOCKINBOUND), recommendedString);
- SetDlgItemText (hwnd, IDC_SECUREFILTERS_CHK, app.LocaleString (IDS_SECUREFILTERS_CHK, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_USESTEALTHMODE_CHK, app.LocaleString (IDS_USESTEALTHMODE_CHK, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_INSTALLBOOTTIMEFILTERS_CHK, app.LocaleString (IDS_INSTALLBOOTTIMEFILTERS_CHK, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_RULE_ALLOWLOOPBACK, L"%s (%s)", app.LocaleString (IDS_RULE_ALLOWLOOPBACK), recommendedString);
+ _r_ctrl_settextformat (hwnd, IDC_RULE_ALLOW6TO4, L"%s (%s)", app.LocaleString (IDS_RULE_ALLOW6TO4), recommendedString);
- SetDlgItemText (hwnd, IDC_USENETWORKRESOLUTION_CHK, app.LocaleString (IDS_USENETWORKRESOLUTION_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_USECERTIFICATES_CHK, app.LocaleString (IDS_USECERTIFICATES_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_USEREFRESHDEVICES_CHK, app.LocaleString (IDS_USEREFRESHDEVICES_CHK, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_SECUREFILTERS_CHK, L"%s (%s)", app.LocaleString (IDS_SECUREFILTERS_CHK), recommendedString);
+ _r_ctrl_settextformat (hwnd, IDC_USESTEALTHMODE_CHK, L"%s (%s)", app.LocaleString (IDS_USESTEALTHMODE_CHK), recommendedString);
+ _r_ctrl_settextformat (hwnd, IDC_INSTALLBOOTTIMEFILTERS_CHK, L"%s (%s)", app.LocaleString (IDS_INSTALLBOOTTIMEFILTERS_CHK), recommendedString);
+
+ _r_ctrl_settext (hwnd, IDC_USENETWORKRESOLUTION_CHK, app.LocaleString (IDS_USENETWORKRESOLUTION_CHK));
+ _r_ctrl_settext (hwnd, IDC_USECERTIFICATES_CHK, app.LocaleString (IDS_USECERTIFICATES_CHK));
+ _r_ctrl_settextformat (hwnd, IDC_USEREFRESHDEVICES_CHK, L"%s (%s)", app.LocaleString (IDS_USEREFRESHDEVICES_CHK), recommendedString);
break;
}
case IDD_SETTINGS_BLOCKLIST:
{
- SetDlgItemText (hwnd, IDC_BLOCKLIST_SPY_DISABLE, app.LocaleString (IDS_DISABLE, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_BLOCKLIST_SPY_ALLOW, app.LocaleString (IDS_ACTION_ALLOW, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_BLOCKLIST_SPY_BLOCK, app.LocaleString (IDS_ACTION_BLOCK, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
+ LPCWSTR disableString = app.LocaleString (IDS_DISABLE);
+ LPCWSTR allowString = app.LocaleString (IDS_ACTION_ALLOW);
+ LPCWSTR blockString = app.LocaleString (IDS_ACTION_BLOCK);
- SetDlgItemText (hwnd, IDC_BLOCKLIST_UPDATE_DISABLE, app.LocaleString (IDS_DISABLE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_BLOCKLIST_UPDATE_ALLOW, app.LocaleString (IDS_ACTION_ALLOW, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_BLOCKLIST_UPDATE_BLOCK, app.LocaleString (IDS_ACTION_BLOCK, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_BLOCKLIST_SPY_DISABLE, disableString);
+ _r_ctrl_settext (hwnd, IDC_BLOCKLIST_SPY_ALLOW, allowString);
+ _r_ctrl_settextformat (hwnd, IDC_BLOCKLIST_SPY_BLOCK, L"%s (default)", blockString);
- SetDlgItemText (hwnd, IDC_BLOCKLIST_EXTRA_DISABLE, app.LocaleString (IDS_DISABLE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_BLOCKLIST_EXTRA_ALLOW, app.LocaleString (IDS_ACTION_ALLOW, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_BLOCKLIST_EXTRA_BLOCK, app.LocaleString (IDS_ACTION_BLOCK, NULL).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_BLOCKLIST_UPDATE_DISABLE, L"%s (default)", disableString);
+ _r_ctrl_settext (hwnd, IDC_BLOCKLIST_UPDATE_ALLOW, allowString);
+ _r_ctrl_settext (hwnd, IDC_BLOCKLIST_UPDATE_BLOCK, blockString);
- _r_ctrl_settext (hwnd, IDC_BLOCKLIST_INFO, L"Author: WindowsSpyBlocker - block spying and tracking on Windows systems.", WINDOWSSPYBLOCKER_URL, WINDOWSSPYBLOCKER_URL);
+ _r_ctrl_settextformat (hwnd, IDC_BLOCKLIST_EXTRA_DISABLE, L"%s (default)", disableString);
+ _r_ctrl_settext (hwnd, IDC_BLOCKLIST_EXTRA_ALLOW, allowString);
+ _r_ctrl_settext (hwnd, IDC_BLOCKLIST_EXTRA_BLOCK, blockString);
+
+ _r_ctrl_settextformat (hwnd, IDC_BLOCKLIST_INFO, L"Author: WindowsSpyBlocker - block spying and tracking on Windows systems.", WINDOWSSPYBLOCKER_URL);
break;
}
case IDD_SETTINGS_INTERFACE:
{
- SetDlgItemText (hwnd, IDC_CONFIRMEXIT_CHK, app.LocaleString (IDS_CONFIRMEXIT_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_CONFIRMEXITTIMER_CHK, app.LocaleString (IDS_CONFIRMEXITTIMER_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_CONFIRMLOGCLEAR_CHK, app.LocaleString (IDS_CONFIRMLOGCLEAR_CHK, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_CONFIRMEXIT_CHK, app.LocaleString (IDS_CONFIRMEXIT_CHK));
+ _r_ctrl_settext (hwnd, IDC_CONFIRMEXITTIMER_CHK, app.LocaleString (IDS_CONFIRMEXITTIMER_CHK));
+ _r_ctrl_settext (hwnd, IDC_CONFIRMLOGCLEAR_CHK, app.LocaleString (IDS_CONFIRMLOGCLEAR_CHK));
break;
}
@@ -872,46 +890,41 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
if (ptr_clr)
{
_r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_setitem (hwnd, IDC_COLORS, i, 0, app.LocaleString (ptr_clr->locale_id, NULL).GetString ());
+ _r_listview_setitem (hwnd, IDC_COLORS, i, 0, app.LocaleString (ptr_clr->locale_id));
_r_fastlock_releaseshared (&lock_checkbox);
}
}
- SetDlgItemText (hwnd, IDC_COLORS_HINT, app.LocaleString (IDS_COLORS_HINT, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_COLORS_HINT, app.LocaleString (IDS_COLORS_HINT));
break;
}
case IDD_SETTINGS_NOTIFICATIONS:
{
+ _r_ctrl_settext (hwnd, IDC_ENABLENOTIFICATIONS_CHK, app.LocaleString (IDS_ENABLENOTIFICATIONS_CHK));
+ _r_ctrl_settext (hwnd, IDC_NOTIFICATIONSOUND_CHK, app.LocaleString (IDS_NOTIFICATIONSOUND_CHK));
+ _r_ctrl_settext (hwnd, IDC_NOTIFICATIONONTRAY_CHK, app.LocaleString (IDS_NOTIFICATIONONTRAY_CHK));
- SetDlgItemText (hwnd, IDC_ENABLENOTIFICATIONS_CHK, app.LocaleString (IDS_ENABLENOTIFICATIONS_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_NOTIFICATIONSOUND_CHK, app.LocaleString (IDS_NOTIFICATIONSOUND_CHK, NULL).GetString ());
- SetDlgItemText (hwnd, IDC_NOTIFICATIONONTRAY_CHK, app.LocaleString (IDS_NOTIFICATIONONTRAY_CHK, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_NOTIFICATIONTIMEOUT_HINT, app.LocaleString (IDS_NOTIFICATIONTIMEOUT_HINT));
- SetDlgItemText (hwnd, IDC_NOTIFICATIONTIMEOUT_HINT, app.LocaleString (IDS_NOTIFICATIONTIMEOUT_HINT, NULL).GetString ());
-
- rstring exclude = app.LocaleString (IDS_TITLE_EXCLUDE, NULL);
-
- SetDlgItemText (hwnd, IDC_EXCLUDEBLOCKLIST_CHK, _r_fmt (L"%s %s", exclude.GetString (), app.LocaleString (IDS_EXCLUDEBLOCKLIST_CHK, NULL).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_EXCLUDECUSTOM_CHK, _r_fmt (L"%s %s", exclude.GetString (), app.LocaleString (IDS_EXCLUDECUSTOM_CHK, NULL).GetString ()).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_EXCLUDEBLOCKLIST_CHK, L"%s %s", app.LocaleString (IDS_TITLE_EXCLUDE), app.LocaleString (IDS_EXCLUDEBLOCKLIST_CHK));
+ _r_ctrl_settextformat (hwnd, IDC_EXCLUDECUSTOM_CHK, L"%s %s", app.LocaleString (IDS_TITLE_EXCLUDE), app.LocaleString (IDS_EXCLUDECUSTOM_CHK));
break;
}
case IDD_SETTINGS_LOGGING:
{
- SetDlgItemText (hwnd, IDC_ENABLELOG_CHK, app.LocaleString (IDS_ENABLELOG_CHK, NULL).GetString ());
+ _r_ctrl_settext (hwnd, IDC_ENABLELOG_CHK, app.LocaleString (IDS_ENABLELOG_CHK));
- SetDlgItemText (hwnd, IDC_LOGVIEWER_HINT, app.LocaleString (IDS_LOGVIEWER_HINT, L":").GetString ());
- SetDlgItemText (hwnd, IDC_LOGSIZELIMIT_HINT, app.LocaleString (IDS_LOGSIZELIMIT_HINT, NULL).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_LOGVIEWER_HINT, L"%s:", app.LocaleString (IDS_LOGVIEWER_HINT));
+ _r_ctrl_settext (hwnd, IDC_LOGSIZELIMIT_HINT, app.LocaleString (IDS_LOGSIZELIMIT_HINT));
- SetDlgItemText (hwnd, IDC_ENABLEUILOG_CHK, app.LocaleString (IDS_ENABLEUILOG_CHK, L" (session only)").GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_ENABLEUILOG_CHK, L"%s (session only)", app.LocaleString (IDS_ENABLEUILOG_CHK));
- rstring exclude = app.LocaleString (IDS_TITLE_EXCLUDE, NULL);
-
- SetDlgItemText (hwnd, IDC_EXCLUDESTEALTH_CHK, _r_fmt (L"%s %s", exclude.GetString (), app.LocaleString (IDS_EXCLUDESTEALTH_CHK, NULL).GetString ()).GetString ());
- SetDlgItemText (hwnd, IDC_EXCLUDECLASSIFYALLOW_CHK, _r_fmt (L"%s %s", exclude.GetString (), app.LocaleString (IDS_EXCLUDECLASSIFYALLOW_CHK, (L" [win8+]")).GetString ()).GetString ());
+ _r_ctrl_settextformat (hwnd, IDC_EXCLUDESTEALTH_CHK, L"%s %s", app.LocaleString (IDS_TITLE_EXCLUDE), app.LocaleString (IDS_EXCLUDESTEALTH_CHK));
+ _r_ctrl_settextformat (hwnd, IDC_EXCLUDECLASSIFYALLOW_CHK, L"%s %s [win8+]", app.LocaleString (IDS_TITLE_EXCLUDE), app.LocaleString (IDS_EXCLUDECLASSIFYALLOW_CHK));
_r_wnd_addstyle (hwnd, IDC_LOGPATH_BTN, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE);
_r_wnd_addstyle (hwnd, IDC_LOGVIEWER_BTN, app.IsClassicUI () ? WS_EX_STATICEDGE : 0, WS_EX_STATICEDGE, GWL_EXSTYLE);
@@ -953,22 +966,22 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
INT ctrl_id = GetDlgCtrlID ((HWND)(lpnmdi->hdr.idFrom));
if (ctrl_id == IDC_RULE_BLOCKOUTBOUND)
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_RULE_BLOCKOUTBOUND, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_RULE_BLOCKOUTBOUND));
else if (ctrl_id == IDC_RULE_BLOCKINBOUND)
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_RULE_BLOCKINBOUND, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_RULE_BLOCKINBOUND));
else if (ctrl_id == IDC_RULE_ALLOWLOOPBACK)
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_RULE_ALLOWLOOPBACK_HINT, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_RULE_ALLOWLOOPBACK_HINT));
else if (ctrl_id == IDC_USESTEALTHMODE_CHK)
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_USESTEALTHMODE_HINT, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_USESTEALTHMODE_HINT));
else if (ctrl_id == IDC_INSTALLBOOTTIMEFILTERS_CHK)
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_INSTALLBOOTTIMEFILTERS_HINT, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_INSTALLBOOTTIMEFILTERS_HINT));
else if (ctrl_id == IDC_SECUREFILTERS_CHK)
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_SECUREFILTERS_HINT, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_SECUREFILTERS_HINT));
if (!_r_str_isempty (buffer))
lpnmdi->lpszText = buffer;
@@ -998,7 +1011,7 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
if (ptr_clr)
{
- app.ConfigSetBoolean (ptr_clr->pcfg_name, is_enabled, L"colors");
+ app.ConfigSetBoolean (_r_obj_getstring (ptr_clr->configName), is_enabled, L"colors");
_r_listview_redraw (app.GetHWND (), (INT)_r_tab_getlparam (app.GetHWND (), IDC_TAB, INVALID_INT), INVALID_INT);
}
@@ -1036,11 +1049,12 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
COLORREF cust[16] = {0};
SIZE_T index = 0;
+ PITEM_COLOR ptr_clr;
- for (auto &ptr_clr : colors)
+ for (auto it = colors.begin (); it != colors.end (); ++it)
{
- if (ptr_clr)
- cust[index++] = ptr_clr->default_clr;
+ ptr_clr = *it;
+ cust[index++] = ptr_clr->default_clr;
}
cc.lStructSize = sizeof (cc);
@@ -1052,7 +1066,7 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
if (ChooseColor (&cc))
{
ptr_clr_current->new_clr = cc.rgbResult;
- app.ConfigSetUlong (ptr_clr_current->pcfg_value, cc.rgbResult, L"colors");
+ app.ConfigSetUlong (_r_obj_getstring (ptr_clr_current->configValue), cc.rgbResult, L"colors");
_r_listview_redraw (hwnd, IDC_COLORS, INVALID_INT);
_r_listview_redraw (app.GetHWND (), (INT)_r_tab_getlparam (app.GetHWND (), IDC_TAB, INVALID_INT), INVALID_INT);
@@ -1079,7 +1093,7 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
NMLVEMPTYMARKUP* lpnmlv = (NMLVEMPTYMARKUP*)lparam;
lpnmlv->dwFlags = EMF_CENTERED;
- _r_str_copy (lpnmlv->szMarkup, RTL_NUMBER_OF (lpnmlv->szMarkup), app.LocaleString (IDS_STATUS_EMPTY, NULL).GetString ());
+ _r_str_copy (lpnmlv->szMarkup, RTL_NUMBER_OF (lpnmlv->szMarkup), app.LocaleString (IDS_STATUS_EMPTY));
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
return TRUE;
@@ -1288,13 +1302,17 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
{
if (notify_code == EN_KILLFOCUS)
{
- rstring logpath = _r_ctrl_gettext (hwnd, ctrl_id);
+ PR_STRING logpath = _r_ctrl_gettext (hwnd, ctrl_id);
- if (!logpath.IsEmpty ())
+ if (logpath)
{
- app.ConfigSetString (L"LogPath", _r_path_unexpand (logpath.GetString ()).GetString ());
+ _r_obj_movereference (&logpath, _r_path_unexpand (_r_obj_getstring (logpath)));
+
+ app.ConfigSetString (L"LogPath", _r_obj_getstring (logpath));
_app_loginit (app.ConfigGetBoolean (L"IsLogEnabled", FALSE));
+
+ _r_obj_dereference (logpath);
}
}
@@ -1305,9 +1323,13 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
{
OPENFILENAME ofn = {0};
- WCHAR path[MAX_PATH] = {0};
- GetDlgItemText (hwnd, IDC_LOGPATH, path, RTL_NUMBER_OF (path));
- _r_str_copy (path, RTL_NUMBER_OF (path), _r_path_expand (path).GetString ());
+ WCHAR path[512];
+ PR_STRING expandedPath = NULL;
+
+ expandedPath = _r_ctrl_gettext (hwnd, IDC_LOGPATH);
+
+ _r_obj_movereference (&expandedPath, _r_path_expand (_r_obj_getstring (expandedPath)));
+ _r_str_copy (path, RTL_NUMBER_OF (path), _r_obj_getstring (expandedPath));
ofn.lStructSize = sizeof (ofn);
ofn.hwndOwner = hwnd;
@@ -1320,14 +1342,17 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
if (GetSaveFileName (&ofn))
{
- _r_str_copy (path, RTL_NUMBER_OF (path), _r_path_unexpand (path).GetString ());
+ _r_obj_movereference (&expandedPath, _r_path_unexpand (path));
- app.ConfigSetString (L"LogPath", path);
- SetDlgItemText (hwnd, IDC_LOGPATH, path);
+ app.ConfigSetString (L"LogPath", _r_obj_getstring (expandedPath));
+ _r_ctrl_settext (hwnd, IDC_LOGPATH, _r_obj_getstringorempty (expandedPath));
_app_loginit (app.ConfigGetBoolean (L"IsLogEnabled", FALSE));
}
+ if (expandedPath)
+ _r_obj_dereference (expandedPath);
+
break;
}
@@ -1335,10 +1360,16 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
{
if (notify_code == EN_KILLFOCUS)
{
- rstring logviewer = _r_ctrl_gettext (hwnd, ctrl_id);
+ PR_STRING logviewer = _r_ctrl_gettext (hwnd, ctrl_id);
- if (!logviewer.IsEmpty ())
- app.ConfigSetString (L"LogViewer", _r_path_unexpand (logviewer.GetString ()).GetString ());
+ if (logviewer)
+ {
+ _r_obj_movereference (&logviewer, _r_path_unexpand (_r_obj_getstring (logviewer)));
+
+ app.ConfigSetString (L"LogViewer", _r_obj_getstring (logviewer));
+
+ _r_obj_dereference (logviewer);
+ }
}
break;
@@ -1348,9 +1379,13 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
{
OPENFILENAME ofn = {0};
- WCHAR path[MAX_PATH] = {0};
- GetDlgItemText (hwnd, IDC_LOGVIEWER, path, RTL_NUMBER_OF (path));
- _r_str_copy (path, RTL_NUMBER_OF (path), _r_path_expand (path).GetString ());
+ WCHAR path[512];
+ PR_STRING expandedPath = NULL;
+
+ expandedPath = _r_ctrl_gettext (hwnd, IDC_LOGVIEWER);
+
+ _r_obj_movereference (&expandedPath, _r_path_expand (_r_obj_getstring (expandedPath)));
+ _r_str_copy (path, RTL_NUMBER_OF (path), _r_obj_getstring (expandedPath));
ofn.lStructSize = sizeof (ofn);
ofn.hwndOwner = hwnd;
@@ -1363,12 +1398,15 @@ INT_PTR CALLBACK SettingsProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam
if (GetOpenFileName (&ofn))
{
- _r_str_copy (path, RTL_NUMBER_OF (path), _r_path_unexpand (path).GetString ());
+ _r_obj_movereference (&expandedPath, _r_path_unexpand (path));
- app.ConfigSetString (L"LogViewer", path);
- SetDlgItemText (hwnd, IDC_LOGVIEWER, path);
+ app.ConfigSetString (L"LogViewer", _r_obj_getstringorempty (expandedPath));
+ _r_ctrl_settext (hwnd, IDC_LOGVIEWER, _r_obj_getstringorempty (expandedPath));
}
+ if (expandedPath)
+ _r_obj_dereference (expandedPath);
+
break;
}
@@ -1504,20 +1542,20 @@ VOID _app_imagelist_init (HWND hwnd)
SAFE_DELETE_ICON (config.hicon_large);
SAFE_DELETE_ICON (config.hicon_small);
- SAFE_DELETE_ICON (config.hicon_package);
+ SAFE_DELETE_ICON (config.hicon_uwp);
// get default icon for executable
- _app_getfileicon (_r_path_expand (PATH_NTOSKRNL).GetString (), FALSE, &config.icon_id, &config.hicon_large);
- _app_getfileicon (_r_path_expand (PATH_NTOSKRNL).GetString (), TRUE, NULL, &config.hicon_small);
- _app_getfileicon (_r_path_expand (PATH_SHELL32).GetString (), FALSE, &config.icon_service_id, NULL);
+ _app_getfileicon (_r_obj_getstring (config.ntoskrnl_path), FALSE, &config.icon_id, &config.hicon_large);
+ _app_getfileicon (_r_obj_getstring (config.ntoskrnl_path), TRUE, NULL, &config.hicon_small);
+ _app_getfileicon (_r_obj_getstring (config.shell32_path), FALSE, &config.icon_service_id, NULL);
// get default icon for windows store package (win8+)
if (_r_sys_validversion (6, 2))
{
- if (!_app_getfileicon (_r_path_expand (PATH_WINSTORE).GetString (), TRUE, &config.icon_uwp_id, &config.hicon_package))
+ if (!_app_getfileicon (_r_obj_getstring (config.winstore_path), TRUE, &config.icon_uwp_id, &config.hicon_uwp))
{
config.icon_uwp_id = config.icon_id;
- config.hicon_package = CopyIcon (config.hicon_small);
+ config.hicon_uwp = CopyIcon (config.hicon_small);
}
}
@@ -1555,9 +1593,13 @@ VOID _app_imagelist_init (HWND hwnd)
// rules imagelist (small)
if (config.himg_rules_small)
+ {
ImageList_SetIconSize (config.himg_rules_small, icon_size_small, icon_size_small);
+ }
else
+ {
config.himg_rules_small = ImageList_Create (icon_size_small, icon_size_small, ILC_COLOR32 | ILC_HIGHQUALITYSCALE, 2, 2);
+ }
if (config.himg_rules_small)
{
@@ -1567,9 +1609,13 @@ VOID _app_imagelist_init (HWND hwnd)
// rules imagelist (large)
if (config.himg_rules_large)
+ {
ImageList_SetIconSize (config.himg_rules_large, icon_size_large, icon_size_large);
+ }
else
+ {
config.himg_rules_large = ImageList_Create (icon_size_large, icon_size_large, ILC_COLOR32 | ILC_HIGHQUALITYSCALE, 2, 2);
+ }
if (config.himg_rules_large)
{
@@ -1648,41 +1694,42 @@ VOID _app_tabs_init (HWND hwnd)
SetWindowPos (GetDlgItem (hwnd, IDC_TAB), NULL, 0, 0, _r_calc_rectwidth (INT, &rc), _r_calc_rectheight (INT, &rc), SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOOWNERZORDER);
+ PR_STRING localizedString = NULL;
HINSTANCE hinst = app.GetHINSTANCE ();
DWORD listview_ex_style = LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP | LVS_EX_LABELTIP | LVS_EX_CHECKBOXES | LVS_EX_HEADERINALLVIEWS;
DWORD listview_style = WS_CHILD | WS_TABSTOP | LVS_SHOWSELALWAYS | LVS_REPORT | LVS_SHAREIMAGELISTS | LVS_AUTOARRANGE;
INT tabs_count = 0;
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_APPS_PROFILE, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_APPS, NULL).GetString (), I_IMAGENONE, IDC_APPS_PROFILE);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_APPS), I_IMAGENONE, IDC_APPS_PROFILE);
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_APPS_SERVICE, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_SERVICES, NULL).GetString (), I_IMAGENONE, IDC_APPS_SERVICE);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_SERVICES), I_IMAGENONE, IDC_APPS_SERVICE);
// uwp apps (win8+)
if (_r_sys_validversion (6, 2))
{
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_APPS_UWP, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_PACKAGES, NULL).GetString (), I_IMAGENONE, IDC_APPS_UWP);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_PACKAGES), I_IMAGENONE, IDC_APPS_UWP);
}
if (!app.ConfigGetBoolean (L"IsInternalRulesDisabled", FALSE))
{
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_RULES_BLOCKLIST, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TRAY_BLOCKLIST_RULES, NULL).GetString (), I_IMAGENONE, IDC_RULES_BLOCKLIST);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TRAY_BLOCKLIST_RULES), I_IMAGENONE, IDC_RULES_BLOCKLIST);
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_RULES_SYSTEM, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TRAY_SYSTEM_RULES, NULL).GetString (), I_IMAGENONE, IDC_RULES_SYSTEM);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TRAY_SYSTEM_RULES), I_IMAGENONE, IDC_RULES_SYSTEM);
}
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_RULES_CUSTOM, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TRAY_USER_RULES, NULL).GetString (), I_IMAGENONE, IDC_RULES_CUSTOM);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TRAY_USER_RULES), I_IMAGENONE, IDC_RULES_CUSTOM);
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_NETWORK, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_NETWORK, NULL).GetString (), I_IMAGENONE, IDC_NETWORK);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TAB_NETWORK), I_IMAGENONE, IDC_NETWORK);
CreateWindowEx (0, WC_LISTVIEW, NULL, listview_style | LVS_NOSORTHEADER, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hwnd, (HMENU)IDC_LOG, hinst, NULL);
- _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TITLE_LOGGING, NULL).GetString (), I_IMAGENONE, IDC_LOG);
+ _r_tab_additem (hwnd, IDC_TAB, tabs_count++, app.LocaleString (IDS_TITLE_LOGGING), I_IMAGENONE, IDC_LOG);
for (INT i = 0; i < tabs_count; i++)
{
@@ -1704,14 +1751,14 @@ VOID _app_tabs_init (HWND hwnd)
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP)
{
- _r_listview_addcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0, LVCFMT_LEFT);
- _r_listview_addcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_ADDED, NULL).GetString (), 0, LVCFMT_RIGHT);
+ _r_listview_addcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME), 0, LVCFMT_LEFT);
+ _r_listview_addcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_ADDED), 0, LVCFMT_RIGHT);
}
else
{
- _r_listview_addcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0, LVCFMT_LEFT);
- _r_listview_addcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_PROTOCOL, NULL).GetString (), 0, LVCFMT_RIGHT);
- _r_listview_addcolumn (hwnd, listview_id, 2, app.LocaleString (IDS_DIRECTION, NULL).GetString (), 0, LVCFMT_RIGHT);
+ _r_listview_addcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME), 0, LVCFMT_LEFT);
+ _r_listview_addcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_PROTOCOL), 0, LVCFMT_RIGHT);
+ _r_listview_addcolumn (hwnd, listview_id, 2, app.LocaleString (IDS_DIRECTION), 0, LVCFMT_RIGHT);
}
_r_listview_addgroup (hwnd, listview_id, 0, L"", 0, LVGS_COLLAPSIBLE, LVGS_COLLAPSIBLE);
@@ -1722,22 +1769,31 @@ VOID _app_tabs_init (HWND hwnd)
{
_r_listview_setstyle (hwnd, listview_id, listview_ex_style & ~LVS_EX_CHECKBOXES, FALSE); // no checkboxes
- _r_listview_addcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0, LVCFMT_LEFT);
- _r_listview_addcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_ADDRESS, _r_fmt (L" (%s)", SZ_DIRECTION_LOCAL).GetString ()).GetString (), 0, LVCFMT_LEFT);
- _r_listview_addcolumn (hwnd, listview_id, 2, app.LocaleString (IDS_PORT, _r_fmt (L" (%s)", SZ_DIRECTION_LOCAL).GetString ()).GetString (), 0, LVCFMT_RIGHT);
- _r_listview_addcolumn (hwnd, listview_id, 3, app.LocaleString (IDS_ADDRESS, _r_fmt (L" (%s)", SZ_DIRECTION_REMOTE).GetString ()).GetString (), 0, LVCFMT_LEFT);
- _r_listview_addcolumn (hwnd, listview_id, 4, app.LocaleString (IDS_PORT, _r_fmt (L" (%s)", SZ_DIRECTION_REMOTE).GetString ()).GetString (), 0, LVCFMT_RIGHT);
- _r_listview_addcolumn (hwnd, listview_id, 5, app.LocaleString (IDS_PROTOCOL, NULL).GetString (), 0, LVCFMT_RIGHT);
+ _r_listview_addcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME), 0, LVCFMT_LEFT);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_LOCAL L")", app.LocaleString (IDS_ADDRESS)));
+ _r_listview_addcolumn (hwnd, listview_id, 1, _r_obj_getstringorempty (localizedString), 0, LVCFMT_LEFT);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_LOCAL L")", app.LocaleString (IDS_PORT)));
+ _r_listview_addcolumn (hwnd, listview_id, 2, _r_obj_getstringorempty (localizedString), 0, LVCFMT_RIGHT);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_REMOTE L")", app.LocaleString (IDS_ADDRESS)));
+ _r_listview_addcolumn (hwnd, listview_id, 3, _r_obj_getstringorempty (localizedString), 0, LVCFMT_LEFT);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_REMOTE L")", app.LocaleString (IDS_PORT)));
+ _r_listview_addcolumn (hwnd, listview_id, 4, _r_obj_getstringorempty (localizedString), 0, LVCFMT_RIGHT);
+
+ _r_listview_addcolumn (hwnd, listview_id, 5, app.LocaleString (IDS_PROTOCOL), 0, LVCFMT_RIGHT);
if (listview_id == IDC_NETWORK)
{
- _r_listview_addcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_STATE, NULL).GetString (), 0, LVCFMT_RIGHT);
+ _r_listview_addcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_STATE), 0, LVCFMT_RIGHT);
}
else if (listview_id == IDC_LOG)
{
- _r_listview_addcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_FILTER, NULL).GetString (), 0, LVCFMT_LEFT);
- _r_listview_addcolumn (hwnd, listview_id, 7, app.LocaleString (IDS_DIRECTION, NULL).GetString (), 0, LVCFMT_RIGHT);
- _r_listview_addcolumn (hwnd, listview_id, 8, app.LocaleString (IDS_STATE, NULL).GetString (), 0, LVCFMT_RIGHT);
+ _r_listview_addcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_FILTER), 0, LVCFMT_LEFT);
+ _r_listview_addcolumn (hwnd, listview_id, 7, app.LocaleString (IDS_DIRECTION), 0, LVCFMT_RIGHT);
+ _r_listview_addcolumn (hwnd, listview_id, 8, app.LocaleString (IDS_STATE), 0, LVCFMT_RIGHT);
}
}
@@ -1745,16 +1801,14 @@ VOID _app_tabs_init (HWND hwnd)
BringWindowToTop (hlistview); // HACK!!!
}
-}
-PVOID allocate_pugixml (size_t size)
-{
- return _r_mem_allocatezero (size);
+ if (localizedString)
+ _r_obj_dereference (localizedString);
}
VOID _app_initialize ()
{
- pugi::set_memory_management_functions (&allocate_pugixml, &_r_mem_free); // set allocation routine
+ pugi::set_memory_management_functions ((pugi::allocation_function)_r_mem_allocatezero, _r_mem_free); // set allocation routine
// initialize spinlocks
_r_fastlock_initialize (&lock_apply);
@@ -1765,7 +1819,7 @@ VOID _app_initialize ()
// set privileges
{
- DWORD privileges[] = {
+ ULONG privileges[] = {
SE_SECURITY_PRIVILEGE,
SE_TAKE_OWNERSHIP_PRIVILEGE,
SE_BACKUP_PRIVILEGE,
@@ -1782,14 +1836,18 @@ VOID _app_initialize ()
// static initializer
config.wd_length = GetWindowsDirectory (config.windows_dir, RTL_NUMBER_OF (config.windows_dir));
- _r_str_printf (config.profile_path, RTL_NUMBER_OF (config.profile_path), L"%s\\" XML_PROFILE, app.GetProfileDirectory ());
- _r_str_printf (config.profile_internal_path, RTL_NUMBER_OF (config.profile_internal_path), L"%s\\" XML_PROFILE_INTERNAL, app.GetProfileDirectory ());
+ _r_str_printf (config.profile_path, RTL_NUMBER_OF (config.profile_path), L"%s\\" XML_PROFILE, app.GetAppProfileDirectory ());
+ _r_str_printf (config.profile_path_backup, RTL_NUMBER_OF (config.profile_path_backup), L"%s\\" XML_PROFILE L".bak", app.GetAppProfileDirectory ());
+ _r_str_printf (config.profile_internal_path, RTL_NUMBER_OF (config.profile_internal_path), L"%s\\" XML_PROFILE_INTERNAL, app.GetAppProfileDirectory ());
- _r_str_copy (config.profile_path_backup, RTL_NUMBER_OF (config.profile_path_backup), _r_fmt (L"%s.bak", config.profile_path).GetString ());
+ config.svchost_path = _r_path_expand (PATH_SVCHOST);
+ config.ntoskrnl_path = _r_path_expand (PATH_NTOSKRNL);
+ config.shell32_path = _r_path_expand (PATH_SHELL32);
+ config.winstore_path = _r_path_expand (PATH_WINSTORE);
+ config.my_hash = _r_str_hash (app.GetAppBinaryPath ());
config.ntoskrnl_hash = _r_str_hash (PROC_SYSTEM_NAME);
- config.svchost_hash = _r_str_hash (_r_path_expand (PATH_SVCHOST).GetString ());
- config.my_hash = _r_str_hash (app.GetBinaryPath ());
+ config.svchost_hash = _r_str_hash (config.svchost_path);
// initialize timers
{
@@ -1800,13 +1858,13 @@ VOID _app_initialize ()
timers.clear ();
- timers.push_back (_r_calc_minutes2seconds (time_t, 2));
- timers.push_back (_r_calc_minutes2seconds (time_t, 5));
- timers.push_back (_r_calc_minutes2seconds (time_t, 10));
- timers.push_back (_r_calc_hours2seconds (time_t, 1));
- timers.push_back (_r_calc_hours2seconds (time_t, 2));
- timers.push_back (_r_calc_hours2seconds (time_t, 4));
- timers.push_back (_r_calc_hours2seconds (time_t, 6));
+ timers.emplace_back (_r_calc_minutes2seconds (time_t, 2));
+ timers.emplace_back (_r_calc_minutes2seconds (time_t, 5));
+ timers.emplace_back (_r_calc_minutes2seconds (time_t, 10));
+ timers.emplace_back (_r_calc_hours2seconds (time_t, 1));
+ timers.emplace_back (_r_calc_hours2seconds (time_t, 2));
+ timers.emplace_back (_r_calc_hours2seconds (time_t, 4));
+ timers.emplace_back (_r_calc_hours2seconds (time_t, 6));
}
// initialize thread objects
@@ -1864,15 +1922,19 @@ find_wrap:
for (; current_item < last_item; current_item++)
{
- rstring item_text = _r_listview_getitemtext (hwnd, listview_id, current_item, 0);
+ PR_STRING item_text = _r_listview_getitemtext (hwnd, listview_id, current_item, 0);
- if (item_text.IsEmpty ())
- continue;
-
- if (StrStrNIW (item_text.GetString (), lpfr->lpstrFindWhat, (UINT)item_text.GetLength ()) != NULL)
+ if (item_text)
{
- _app_showitem (hwnd, listview_id, current_item, INVALID_INT);
- return FALSE;
+ if (StrStrNIW (_r_obj_getstring (item_text), lpfr->lpstrFindWhat, (UINT)_r_obj_getstringlength (item_text)) != NULL)
+ {
+ _app_showitem (hwnd, listview_id, current_item, INVALID_INT);
+ _r_obj_dereference (item_text);
+
+ return FALSE;
+ }
+
+ _r_obj_dereference (item_text);
}
}
@@ -1898,6 +1960,8 @@ find_wrap:
_app_initialize ();
+ _r_wnd_center (hwnd, NULL);
+
// init buffered paint
BufferedPaintInit ();
@@ -1951,7 +2015,12 @@ find_wrap:
// add blocklist to update
if (!app.ConfigGetBoolean (L"IsInternalRulesDisabled", FALSE))
- app.UpdateAddComponent (L"Internal rules", L"profile_internal", _r_fmt (L"%" TEXT (PR_LONG64), config.profile_internal_timestamp).GetString (), config.profile_internal_path, FALSE);
+ {
+ WCHAR internalProfileVersion[128];
+ _r_str_printf (internalProfileVersion, RTL_NUMBER_OF (internalProfileVersion), L"%" TEXT (PR_LONG64), config.profile_internal_timestamp);
+
+ app.UpdateAddComponent (L"Internal rules", L"profile_internal", internalProfileVersion, config.profile_internal_path, FALSE);
+ }
// initialize tab
_app_settab_id (hwnd, app.ConfigGetInteger (L"CurrentTab", IDC_APPS_PROFILE));
@@ -1982,7 +2051,7 @@ find_wrap:
}
else
{
- _r_status_settext (hwnd, IDC_STATUSBAR, 0, app.LocaleString (_app_getinterfacestatelocale (install_type), NULL).GetString ());
+ _r_status_settext (hwnd, IDC_STATUSBAR, 0, app.LocaleString (_app_getinterfacestatelocale (install_type)));
}
}
@@ -2090,102 +2159,138 @@ find_wrap:
case RM_LOCALIZE:
{
+ PR_STRING localizedString = NULL;
HMENU hmenu = GetMenu (hwnd);
if (hmenu)
{
- app.LocaleMenu (hmenu, IDS_FILE, 0, TRUE, NULL);
- app.LocaleMenu (hmenu, IDS_SETTINGS, IDM_SETTINGS, FALSE, L"...\tF2");
- app.LocaleMenu (hmenu, IDS_ADD_FILE, IDM_ADD_FILE, FALSE, L"...");
- app.LocaleMenu (GetSubMenu (hmenu, 0), IDS_EXPORT, 5, TRUE, NULL);
- app.LocaleMenu (GetSubMenu (hmenu, 0), IDS_IMPORT, 6, TRUE, NULL);
- app.LocaleMenu (hmenu, IDS_IMPORT, IDM_IMPORT, FALSE, L"...\tCtrl+O");
- app.LocaleMenu (hmenu, IDS_EXPORT, IDM_EXPORT, FALSE, L"...\tCtrl+S");
- app.LocaleMenu (hmenu, IDS_EXIT, IDM_EXIT, FALSE, NULL);
+ _r_menu_setitemtext (hmenu, 0, app.LocaleString (IDS_FILE), TRUE);
+ _r_menu_setitemtext (hmenu, 1, app.LocaleString (IDS_EDIT), TRUE);
+ _r_menu_setitemtext (hmenu, 2, app.LocaleString (IDS_VIEW), TRUE);
+ _r_menu_setitemtext (hmenu, 3, app.LocaleString (IDS_TRAY_RULES), TRUE);
+ _r_menu_setitemtext (hmenu, 4, app.LocaleString (IDS_TRAY_BLOCKLIST_RULES), TRUE);
+ _r_menu_setitemtext (hmenu, 5, app.LocaleString (IDS_HELP), TRUE);
- app.LocaleMenu (hmenu, IDS_EDIT, 1, TRUE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...\tF2", app.LocaleString (IDS_SETTINGS)));
+ _r_menu_setitemtext (hmenu, IDM_SETTINGS, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_PURGE_UNUSED, IDM_PURGE_UNUSED, FALSE, L"\tCtrl+Shift+X");
- app.LocaleMenu (hmenu, IDS_PURGE_TIMERS, IDM_PURGE_TIMERS, FALSE, L"\tCtrl+Shift+T");
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_ADD_FILE)));
+ _r_menu_setitemtext (hmenu, IDM_ADD_FILE, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_FIND, IDM_FIND, FALSE, L"...\tCtrl+F");
- app.LocaleMenu (hmenu, IDS_FINDNEXT, IDM_FINDNEXT, FALSE, L"\tF3");
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...\tCtrl+O", app.LocaleString (IDS_IMPORT)));
+ _r_menu_setitemtext (hmenu, IDM_IMPORT, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_REFRESH, IDM_REFRESH, FALSE, L"\tF5");
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...\tCtrl+S", app.LocaleString (IDS_EXPORT)));
+ _r_menu_setitemtext (hmenu, IDM_EXPORT, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_VIEW, 2, TRUE, NULL);
+ _r_menu_setitemtext (hmenu, IDM_EXIT, app.LocaleString (IDS_EXIT), FALSE);
- app.LocaleMenu (hmenu, IDS_ALWAYSONTOP_CHK, IDM_ALWAYSONTOP_CHK, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_SHOWFILENAMESONLY_CHK, IDM_SHOWFILENAMESONLY_CHK, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_AUTOSIZECOLUMNS_CHK, IDM_AUTOSIZECOLUMNS_CHK, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ENABLESPECIALGROUP_CHK, IDM_ENABLESPECIALGROUP_CHK, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+Shift+X", app.LocaleString (IDS_PURGE_UNUSED)));
+ _r_menu_setitemtext (hmenu, IDM_PURGE_UNUSED, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (GetSubMenu (hmenu, 2), IDS_ICONS, 5, TRUE, NULL);
- app.LocaleMenu (hmenu, IDS_ICONSSMALL, IDM_SIZE_SMALL, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ICONSLARGE, IDM_SIZE_LARGE, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ICONSEXTRALARGE, IDM_SIZE_EXTRALARGE, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+Shift+T", app.LocaleString (IDS_PURGE_TIMERS)));
+ _r_menu_setitemtext (hmenu, IDM_PURGE_TIMERS, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_VIEW_ICON, IDM_VIEW_ICON, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_VIEW_DETAILS, IDM_VIEW_DETAILS, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_VIEW_TILE, IDM_VIEW_TILE, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+F", app.LocaleString (IDS_FIND)));
+ _r_menu_setitemtext (hmenu, IDM_FIND, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_ICONSISHIDDEN, IDM_ICONSISHIDDEN, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tF3", app.LocaleString (IDS_FINDNEXT)));
+ _r_menu_setitemtext (hmenu, IDM_FINDNEXT, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (GetSubMenu (hmenu, 2), IDS_LANGUAGE, LANG_MENU, TRUE, L" (Language)");
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tF5", app.LocaleString (IDS_REFRESH)));
+ _r_menu_setitemtext (hmenu, IDM_REFRESH, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_FONT, IDM_FONT, FALSE, L"...");
+ _r_menu_setitemtext (hmenu, IDM_ALWAYSONTOP_CHK, app.LocaleString (IDS_ALWAYSONTOP_CHK), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_SHOWFILENAMESONLY_CHK, app.LocaleString (IDS_SHOWFILENAMESONLY_CHK), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_AUTOSIZECOLUMNS_CHK, app.LocaleString (IDS_AUTOSIZECOLUMNS_CHK), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_ENABLESPECIALGROUP_CHK, app.LocaleString (IDS_ENABLESPECIALGROUP_CHK), FALSE);
- rstring recommended = app.LocaleString (IDS_RECOMMENDED, NULL);
+ _r_menu_setitemtext (GetSubMenu (hmenu, 2), 5, app.LocaleString (IDS_ICONS), TRUE);
- app.LocaleMenu (hmenu, IDS_TRAY_RULES, 3, TRUE, NULL);
+ _r_menu_setitemtext (hmenu, IDM_SIZE_SMALL, app.LocaleString (IDS_ICONSSMALL), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_SIZE_LARGE, app.LocaleString (IDS_ICONSLARGE), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_SIZE_EXTRALARGE, app.LocaleString (IDS_ICONSEXTRALARGE), FALSE);
- app.LocaleMenu (hmenu, IDS_TAB_NETWORK, IDM_CONNECTIONS_TITLE, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_TITLE_SECURITY, IDM_SECURITY_TITLE, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_TITLE_ADVANCED, IDM_ADVANCED_TITLE, FALSE, NULL);
+ _r_menu_setitemtext (hmenu, IDM_VIEW_ICON, app.LocaleString (IDS_VIEW_ICON), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_VIEW_DETAILS, app.LocaleString (IDS_VIEW_DETAILS), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_VIEW_TILE, app.LocaleString (IDS_VIEW_TILE), FALSE);
+
+ _r_menu_setitemtext (hmenu, IDM_ICONSISHIDDEN, app.LocaleString (IDS_ICONSISHIDDEN), FALSE);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (Language)", app.LocaleString (IDS_LANGUAGE)));
+ _r_menu_setitemtext (GetSubMenu (hmenu, 2), LANG_MENU, _r_obj_getstringorempty (localizedString), TRUE);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_FONT)));
+ _r_menu_setitemtext (hmenu, IDM_FONT, _r_obj_getstringorempty (localizedString), FALSE);
+
+ LPCWSTR recommendedString = app.LocaleString (IDS_RECOMMENDED);
+
+ _r_menu_setitemtext (hmenu, IDM_CONNECTIONS_TITLE, app.LocaleString (IDS_TAB_NETWORK), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_SECURITY_TITLE, app.LocaleString (IDS_TITLE_SECURITY), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_ADVANCED_TITLE, app.LocaleString (IDS_TITLE_ADVANCED), FALSE);
_r_menu_enableitem (hmenu, IDM_CONNECTIONS_TITLE, MF_BYCOMMAND, FALSE);
_r_menu_enableitem (hmenu, IDM_SECURITY_TITLE, MF_BYCOMMAND, FALSE);
_r_menu_enableitem (hmenu, IDM_ADVANCED_TITLE, MF_BYCOMMAND, FALSE);
- app.LocaleMenu (hmenu, IDS_RULE_BLOCKOUTBOUND, IDM_RULE_BLOCKOUTBOUND, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
- app.LocaleMenu (hmenu, IDS_RULE_BLOCKINBOUND, IDM_RULE_BLOCKINBOUND, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
- app.LocaleMenu (hmenu, IDS_RULE_ALLOWLOOPBACK, IDM_RULE_ALLOWLOOPBACK, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
- app.LocaleMenu (hmenu, IDS_RULE_ALLOW6TO4, IDM_RULE_ALLOW6TO4, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_RULE_BLOCKOUTBOUND), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_RULE_BLOCKOUTBOUND, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_SECUREFILTERS_CHK, IDM_SECUREFILTERS_CHK, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
- app.LocaleMenu (hmenu, IDS_USESTEALTHMODE_CHK, IDM_USESTEALTHMODE_CHK, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
- app.LocaleMenu (hmenu, IDS_INSTALLBOOTTIMEFILTERS_CHK, IDM_INSTALLBOOTTIMEFILTERS_CHK, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_RULE_BLOCKINBOUND), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_RULE_BLOCKINBOUND, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_USENETWORKRESOLUTION_CHK, IDM_USENETWORKRESOLUTION_CHK, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_USECERTIFICATES_CHK, IDM_USECERTIFICATES_CHK, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_USEREFRESHDEVICES_CHK, IDM_USEREFRESHDEVICES_CHK, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_RULE_ALLOWLOOPBACK), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_RULE_ALLOWLOOPBACK, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_TRAY_BLOCKLIST_RULES, 4, TRUE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_RULE_ALLOW6TO4), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_RULE_ALLOW6TO4, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_BLOCKLIST_SPY, IDM_BLOCKLIST_SPY_TITLE, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_BLOCKLIST_UPDATE, IDM_BLOCKLIST_UPDATE_TITLE, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_BLOCKLIST_EXTRA, IDM_BLOCKLIST_EXTRA_TITLE, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_SECUREFILTERS_CHK), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_SECUREFILTERS_CHK, _r_obj_getstringorempty (localizedString), FALSE);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_USESTEALTHMODE_CHK), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_USESTEALTHMODE_CHK, _r_obj_getstringorempty (localizedString), FALSE);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_INSTALLBOOTTIMEFILTERS_CHK), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_INSTALLBOOTTIMEFILTERS_CHK, _r_obj_getstringorempty (localizedString), FALSE);
+
+ _r_menu_setitemtext (hmenu, IDM_USENETWORKRESOLUTION_CHK, app.LocaleString (IDS_USENETWORKRESOLUTION_CHK), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_USECERTIFICATES_CHK, app.LocaleString (IDS_USECERTIFICATES_CHK), FALSE);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (%s)", app.LocaleString (IDS_USEREFRESHDEVICES_CHK), recommendedString));
+ _r_menu_setitemtext (hmenu, IDM_USEREFRESHDEVICES_CHK, _r_obj_getstringorempty (localizedString), FALSE);
+
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_SPY_TITLE, app.LocaleString (IDS_BLOCKLIST_SPY), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_UPDATE_TITLE, app.LocaleString (IDS_BLOCKLIST_UPDATE), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_EXTRA_TITLE, app.LocaleString (IDS_BLOCKLIST_EXTRA), FALSE);
_r_menu_enableitem (hmenu, IDM_BLOCKLIST_SPY_TITLE, MF_BYCOMMAND, FALSE);
_r_menu_enableitem (hmenu, IDM_BLOCKLIST_UPDATE_TITLE, MF_BYCOMMAND, FALSE);
_r_menu_enableitem (hmenu, IDM_BLOCKLIST_EXTRA_TITLE, MF_BYCOMMAND, FALSE);
- app.LocaleMenu (hmenu, IDS_DISABLE, IDM_BLOCKLIST_SPY_DISABLE, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ACTION_ALLOW, IDM_BLOCKLIST_SPY_ALLOW, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ACTION_BLOCK, IDM_BLOCKLIST_SPY_BLOCK, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_SPY_DISABLE, app.LocaleString (IDS_DISABLE), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_SPY_ALLOW, app.LocaleString (IDS_ACTION_ALLOW), FALSE);
- app.LocaleMenu (hmenu, IDS_DISABLE, IDM_BLOCKLIST_UPDATE_DISABLE, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
- app.LocaleMenu (hmenu, IDS_ACTION_ALLOW, IDM_BLOCKLIST_UPDATE_ALLOW, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ACTION_BLOCK, IDM_BLOCKLIST_UPDATE_BLOCK, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (default)", app.LocaleString (IDS_ACTION_BLOCK)));
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_SPY_BLOCK, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_DISABLE, IDM_BLOCKLIST_EXTRA_DISABLE, FALSE, _r_fmt (L" (%s)", recommended.GetString ()).GetString ());
- app.LocaleMenu (hmenu, IDS_ACTION_ALLOW, IDM_BLOCKLIST_EXTRA_ALLOW, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ACTION_BLOCK, IDM_BLOCKLIST_EXTRA_BLOCK, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (default)", app.LocaleString (IDS_DISABLE)));
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_UPDATE_DISABLE, _r_obj_getstringorempty (localizedString), FALSE);
- app.LocaleMenu (hmenu, IDS_HELP, 5, TRUE, NULL);
- app.LocaleMenu (hmenu, IDS_WEBSITE, IDM_WEBSITE, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_CHECKUPDATES, IDM_CHECKUPDATES, FALSE, NULL);
- app.LocaleMenu (hmenu, IDS_ABOUT, IDM_ABOUT, FALSE, L"\tF1");
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_UPDATE_ALLOW, app.LocaleString (IDS_ACTION_ALLOW), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_UPDATE_BLOCK, app.LocaleString (IDS_ACTION_BLOCK), FALSE);
+
+ //_r_obj_movereference (&localizedString, app.LocaleString2 (IDS_DISABLE, L" (default)"));
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_EXTRA_DISABLE, _r_obj_getstringorempty (localizedString), FALSE);
+
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_EXTRA_ALLOW, app.LocaleString (IDS_ACTION_ALLOW), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_BLOCKLIST_EXTRA_BLOCK, app.LocaleString (IDS_ACTION_BLOCK), FALSE);
+
+ _r_menu_setitemtext (hmenu, IDM_WEBSITE, app.LocaleString (IDS_WEBSITE), FALSE);
+ _r_menu_setitemtext (hmenu, IDM_CHECKUPDATES, app.LocaleString (IDS_CHECKUPDATES), FALSE);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tF1", app.LocaleString (IDS_ABOUT)));
+ _r_menu_setitemtext (hmenu, IDM_ABOUT, _r_obj_getstringorempty (localizedString), FALSE);
app.LocaleEnum ((HWND)GetSubMenu (hmenu, 2), LANG_MENU, TRUE, IDX_LANGUAGE); // enum localizations
}
@@ -2193,19 +2298,25 @@ find_wrap:
// localize toolbar
_app_setinterfacestate (hwnd);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_REFRESH, app.LocaleString (IDS_REFRESH, NULL).GetString (), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_SETTINGS, app.LocaleString (IDS_SETTINGS, NULL).GetString (), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_REFRESH, app.LocaleString (IDS_REFRESH), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_SETTINGS, app.LocaleString (IDS_SETTINGS), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_OPENRULESEDITOR, app.LocaleString (IDS_OPENRULESEDITOR, L"...").GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_OPENRULESEDITOR)));
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_OPENRULESEDITOR, _r_obj_getstringorempty (localizedString), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLENOTIFICATIONS_CHK, app.LocaleString (IDS_ENABLENOTIFICATIONS_CHK, NULL).GetString (), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLELOG_CHK, app.LocaleString (IDS_ENABLELOG_CHK, NULL).GetString (), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLEUILOG_CHK, app.LocaleString (IDS_ENABLEUILOG_CHK, L" (session only)").GetString (), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLENOTIFICATIONS_CHK, app.LocaleString (IDS_ENABLENOTIFICATIONS_CHK), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLELOG_CHK, app.LocaleString (IDS_ENABLELOG_CHK), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGSHOW, app.LocaleString (IDS_LOGSHOW, L" (Ctrl+I)").GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGCLEAR, app.LocaleString (IDS_LOGCLEAR, L" (Ctrl+X)").GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (session only)", app.LocaleString (IDS_ENABLEUILOG_CHK)));
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLEUILOG_CHK, _r_obj_getstringorempty (localizedString), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_DONATE, app.LocaleString (IDS_DONATE, NULL).GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (Ctrl+I)", app.LocaleString (IDS_LOGSHOW)));
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGSHOW, _r_obj_getstringorempty (localizedString), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (Ctrl+X)", app.LocaleString (IDS_LOGCLEAR)));
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGCLEAR, _r_obj_getstringorempty (localizedString), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_DONATE, app.LocaleString (IDS_DONATE), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
// set rebar size
_app_toolbar_resize ();
@@ -2244,40 +2355,58 @@ find_wrap:
else
continue;
- _r_tab_setitem (hwnd, IDC_TAB, i, app.LocaleString (locale_id, NULL).GetString (), I_IMAGENONE, 0);
+ _r_tab_setitem (hwnd, IDC_TAB, i, app.LocaleString (locale_id), I_IMAGENONE, 0);
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP)
{
- _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_ADDED, NULL).GetString (), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_ADDED), 0);
}
else if (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM)
{
- _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_PROTOCOL, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 2, app.LocaleString (IDS_DIRECTION, NULL).GetString (), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_PROTOCOL), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 2, app.LocaleString (IDS_DIRECTION), 0);
}
else if (listview_id == IDC_NETWORK)
{
- _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_ADDRESS, _r_fmt (L" (%s)", SZ_DIRECTION_LOCAL).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 2, app.LocaleString (IDS_PORT, _r_fmt (L" (%s)", SZ_DIRECTION_LOCAL).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 3, app.LocaleString (IDS_ADDRESS, _r_fmt (L" (%s)", SZ_DIRECTION_REMOTE).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 4, app.LocaleString (IDS_PORT, _r_fmt (L" (%s)", SZ_DIRECTION_REMOTE).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 5, app.LocaleString (IDS_PROTOCOL, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_STATE, NULL).GetString (), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_LOCAL L")", app.LocaleString (IDS_ADDRESS)));
+ _r_listview_setcolumn (hwnd, listview_id, 1, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_LOCAL L")", app.LocaleString (IDS_PORT)));
+ _r_listview_setcolumn (hwnd, listview_id, 2, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_REMOTE L")", app.LocaleString (IDS_ADDRESS)));
+ _r_listview_setcolumn (hwnd, listview_id, 3, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_REMOTE L")", app.LocaleString (IDS_PORT)));
+ _r_listview_setcolumn (hwnd, listview_id, 4, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_listview_setcolumn (hwnd, listview_id, 5, app.LocaleString (IDS_PROTOCOL), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_STATE), 0);
}
else if (listview_id == IDC_LOG)
{
- _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 1, app.LocaleString (IDS_ADDRESS, _r_fmt (L" (%s)", SZ_DIRECTION_LOCAL).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 2, app.LocaleString (IDS_PORT, _r_fmt (L" (%s)", SZ_DIRECTION_LOCAL).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 3, app.LocaleString (IDS_ADDRESS, _r_fmt (L" (%s)", SZ_DIRECTION_REMOTE).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 4, app.LocaleString (IDS_PORT, _r_fmt (L" (%s)", SZ_DIRECTION_REMOTE).GetString ()).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 5, app.LocaleString (IDS_PROTOCOL, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_FILTER, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 7, app.LocaleString (IDS_DIRECTION, NULL).GetString (), 0);
- _r_listview_setcolumn (hwnd, listview_id, 8, app.LocaleString (IDS_STATE, NULL).GetString (), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 0, app.LocaleString (IDS_NAME), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_LOCAL L")", app.LocaleString (IDS_ADDRESS)));
+ _r_listview_setcolumn (hwnd, listview_id, 1, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_LOCAL L")", app.LocaleString (IDS_PORT)));
+ _r_listview_setcolumn (hwnd, listview_id, 2, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_REMOTE L")", app.LocaleString (IDS_ADDRESS)));
+ _r_listview_setcolumn (hwnd, listview_id, 3, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (" SZ_DIRECTION_REMOTE L")", app.LocaleString (IDS_PORT)));
+ _r_listview_setcolumn (hwnd, listview_id, 4, _r_obj_getstringorempty (localizedString), 0);
+
+ _r_listview_setcolumn (hwnd, listview_id, 5, app.LocaleString (IDS_PROTOCOL), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 6, app.LocaleString (IDS_FILTER), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 7, app.LocaleString (IDS_DIRECTION), 0);
+ _r_listview_setcolumn (hwnd, listview_id, 8, app.LocaleString (IDS_STATE), 0);
}
SendDlgItemMessage (hwnd, listview_id, LVM_RESETEMPTYTEXT, 0, 0);
@@ -2299,6 +2428,8 @@ find_wrap:
_app_notifyrefresh (config.hnotification, FALSE);
+ SAFE_DELETE_REFERENCE (localizedString);
+
break;
}
@@ -2313,6 +2444,8 @@ find_wrap:
case RM_DPICHANGED:
{
+ PR_STRING localizedString = NULL;
+
_app_imagelist_init (hwnd);
SendDlgItemMessage (config.hrebar, IDC_TOOLBAR, TB_SETIMAGELIST, 0, (LPARAM)config.himg_toolbar);
@@ -2320,19 +2453,23 @@ find_wrap:
// reset toolbar information
_app_setinterfacestate (hwnd);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_REFRESH, app.LocaleString (IDS_REFRESH, NULL).GetString (), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_SETTINGS, app.LocaleString (IDS_SETTINGS, NULL).GetString (), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_REFRESH, app.LocaleString (IDS_REFRESH), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_SETTINGS, app.LocaleString (IDS_SETTINGS), BTNS_BUTTON | BTNS_AUTOSIZE | BTNS_SHOWTEXT, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_OPENRULESEDITOR, app.LocaleString (IDS_OPENRULESEDITOR, L"...").GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_OPENRULESEDITOR)));
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_OPENRULESEDITOR, _r_obj_getstringorempty (localizedString), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLENOTIFICATIONS_CHK, app.LocaleString (IDS_ENABLENOTIFICATIONS_CHK, NULL).GetString (), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLELOG_CHK, app.LocaleString (IDS_ENABLELOG_CHK, NULL).GetString (), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLEUILOG_CHK, app.LocaleString (IDS_ENABLEUILOG_CHK, NULL).GetString (), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLENOTIFICATIONS_CHK, app.LocaleString (IDS_ENABLENOTIFICATIONS_CHK), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLELOG_CHK, app.LocaleString (IDS_ENABLELOG_CHK), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_ENABLEUILOG_CHK, app.LocaleString (IDS_ENABLEUILOG_CHK), BTNS_CHECK | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGSHOW, app.LocaleString (IDS_LOGSHOW, L" (Ctrl+I)").GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGCLEAR, app.LocaleString (IDS_LOGCLEAR, L" (Ctrl+X)").GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (Ctrl+I)", app.LocaleString (IDS_LOGSHOW)));
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGSHOW, _r_obj_getstringorempty (localizedString), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
- _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_DONATE, app.LocaleString (IDS_DONATE, NULL).GetString (), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (Ctrl+X)", app.LocaleString (IDS_LOGCLEAR)));
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_TRAY_LOGCLEAR, _r_obj_getstringorempty (localizedString), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
+
+ _r_toolbar_setbutton (config.hrebar, IDC_TOOLBAR, IDM_DONATE, app.LocaleString (IDS_DONATE), BTNS_BUTTON | BTNS_AUTOSIZE, 0, I_IMAGENONE);
_app_toolbar_resize ();
@@ -2347,6 +2484,8 @@ find_wrap:
_app_refreshstatus (hwnd, 0);
+ SAFE_DELETE_REFERENCE (localizedString);
+
break;
}
@@ -2366,12 +2505,9 @@ find_wrap:
{
time_t current_timestamp = (time_t)lparam;
- _app_freerulesconfig_map (rules_config);
+ _app_freerulesconfig_map (&rules_config);
- _r_fs_makebackup (config.profile_path, current_timestamp);
-
- _r_fs_remove (config.profile_path, _R_FLAG_REMOVE_FORCE);
- _r_fs_remove (config.profile_path_backup, _R_FLAG_REMOVE_FORCE);
+ _r_fs_makebackup (config.profile_path, current_timestamp, TRUE);
_app_profile_load (hwnd, NULL);
@@ -2387,8 +2523,8 @@ find_wrap:
if (_wfp_isfiltersinstalled ())
{
if (_app_istimersactive () ?
- !app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION_TIMER, NULL).GetString (), L"ConfirmExitTimer") :
- !app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION_EXIT, NULL).GetString (), L"ConfirmExit2"))
+ !app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION_TIMER), L"ConfirmExitTimer") :
+ !app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION_EXIT), L"ConfirmExit2"))
{
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
return TRUE;
@@ -2441,20 +2577,22 @@ find_wrap:
case WM_DROPFILES:
{
- UINT numfiles = DragQueryFile ((HDROP)wparam, UINT32_MAX, NULL, 0);
+ PR_STRING string;
+ UINT numfiles;
+ UINT length;
SIZE_T app_hash = 0;
+ numfiles = DragQueryFile ((HDROP)wparam, UINT32_MAX, NULL, 0);
+
for (UINT i = 0; i < numfiles; i++)
{
- UINT length = DragQueryFile ((HDROP)wparam, i, NULL, 0) + 1;
+ length = DragQueryFile ((HDROP)wparam, i, NULL, 0);
+ string = _r_obj_createstringex (NULL, length * sizeof (WCHAR));
- LPWSTR file = (LPWSTR)_r_mem_allocatezero (length * sizeof (WCHAR));
+ if (DragQueryFile ((HDROP)wparam, i, string->Buffer, length + 1))
+ app_hash = _app_addapplication (hwnd, string->Buffer, 0, 0, 0, FALSE, FALSE);
- DragQueryFile ((HDROP)wparam, i, file, length);
-
- app_hash = _app_addapplication (hwnd, file, 0, 0, 0, FALSE, FALSE);
-
- _r_mem_free (file);
+ _r_obj_dereference (string);
}
DragFinish ((HDROP)wparam);
@@ -2571,8 +2709,13 @@ find_wrap:
case LVN_GETINFOTIP:
{
LPNMLVGETINFOTIP lpnmlv = (LPNMLVGETINFOTIP)lparam;
+ PR_STRING string = _app_gettooltip (hwnd, lpnmlv);
- _r_str_copy (lpnmlv->pszText, lpnmlv->cchTextMax, _app_gettooltip (hwnd, lpnmlv).GetString ());
+ if (string)
+ {
+ _r_str_copy (lpnmlv->pszText, lpnmlv->cchTextMax, string->Buffer);
+ _r_obj_dereference (string);
+ }
break;
}
@@ -2596,79 +2739,69 @@ find_wrap:
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP)
{
SIZE_T app_hash = lpnmlv->lParam;
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (!ptr_app_object)
+ if (!ptr_app)
break;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ OBJECTS_APP_VECTOR rules;
- OBJECTS_VEC rules;
-
- if (ptr_app)
+ if (ptr_app->is_enabled != is_enabled)
{
- if (ptr_app->is_enabled != is_enabled)
- {
- ptr_app->is_enabled = is_enabled;
+ ptr_app->is_enabled = is_enabled;
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (hwnd, listview_id, lpnmlv->iItem, app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (hwnd, listview_id, lpnmlv->iItem, app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
- if (is_enabled)
- _app_freenotify (app_hash, ptr_app);
+ if (is_enabled)
+ _app_freenotify (app_hash, ptr_app);
- if (!is_enabled && _app_istimeractive (ptr_app))
- _app_timer_reset (hwnd, ptr_app);
+ if (!is_enabled && _app_istimeractive (ptr_app))
+ _app_timer_reset (hwnd, ptr_app);
- rules.push_back (ptr_app_object);
+ rules.emplace_back (ptr_app);
- HANDLE hengine = _wfp_getenginehandle ();
+ HANDLE hengine = _wfp_getenginehandle ();
- if (hengine)
- _wfp_create3filters (hengine, rules, __LINE__);
+ if (hengine)
+ _wfp_create3filters (hengine, &rules, __LINE__);
- is_changed = TRUE;
- }
+ is_changed = TRUE;
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
else if (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM)
{
- OBJECTS_VEC rules;
+ OBJECTS_RULE_VECTOR rules;
SIZE_T rule_idx = lpnmlv->lParam;
- PR_OBJECT ptr_rule_object = _app_getrulebyid (rule_idx);
+ PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
- if (!ptr_rule_object)
+ if (!ptr_rule)
break;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
-
- if (ptr_rule)
+ if (ptr_rule->is_enabled != is_enabled)
{
- if (ptr_rule->is_enabled != is_enabled)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
+ _r_fastlock_acquireshared (&lock_checkbox);
- _app_ruleenable (ptr_rule, is_enabled);
- _app_setruleiteminfo (hwnd, listview_id, lpnmlv->iItem, ptr_rule, TRUE);
+ _app_ruleenable (ptr_rule, is_enabled);
+ _app_setruleiteminfo (hwnd, listview_id, lpnmlv->iItem, ptr_rule, TRUE);
- _r_fastlock_releaseshared (&lock_checkbox);
+ _r_fastlock_releaseshared (&lock_checkbox);
- rules.push_back (ptr_rule_object);
+ rules.emplace_back (ptr_rule);
- HANDLE hengine = _wfp_getenginehandle ();
+ HANDLE hengine = _wfp_getenginehandle ();
- if (hengine)
- _wfp_create4filters (hengine, rules, __LINE__);
+ if (hengine)
+ _wfp_create4filters (hengine, &rules, __LINE__);
- is_changed = TRUE;
- }
+ is_changed = TRUE;
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
if (is_changed)
@@ -2689,7 +2822,7 @@ find_wrap:
NMLVEMPTYMARKUP* lpnmlv = (NMLVEMPTYMARKUP*)lparam;
lpnmlv->dwFlags = EMF_CENTERED;
- _r_str_copy (lpnmlv->szMarkup, RTL_NUMBER_OF (lpnmlv->szMarkup), app.LocaleString (IDS_STATUS_EMPTY, NULL).GetString ());
+ _r_str_copy (lpnmlv->szMarkup, RTL_NUMBER_OF (lpnmlv->szMarkup), app.LocaleString (IDS_STATUS_EMPTY));
SetWindowLongPtr (hwnd, DWLP_MSGRESULT, TRUE);
return TRUE;
@@ -2746,6 +2879,9 @@ find_wrap:
if (!hmenu)
break;
+ PR_STRING localizedString = NULL;
+ PR_STRING columnText = NULL;
+
HMENU hsubmenu1 = NULL;
HMENU hsubmenu2 = NULL;
@@ -2758,34 +2894,53 @@ find_wrap:
hsubmenu2 = CreatePopupMenu ();
// show rules
- AppendMenu (hsubmenu1, MF_STRING, IDM_DISABLENOTIFICATIONS, app.LocaleString (IDS_DISABLENOTIFICATIONS, NULL).GetString ());
+ AppendMenu (hsubmenu1, MF_STRING, IDM_DISABLENOTIFICATIONS, app.LocaleString (IDS_DISABLENOTIFICATIONS));
_app_generate_rulesmenu (hsubmenu1, hash_item);
// show timers
- AppendMenu (hsubmenu2, MF_STRING, IDM_DISABLETIMER, app.LocaleString (IDS_DISABLETIMER, NULL).GetString ());
+ AppendMenu (hsubmenu2, MF_STRING, IDM_DISABLETIMER, app.LocaleString (IDS_DISABLETIMER));
AppendMenu (hsubmenu2, MF_SEPARATOR, 0, NULL);
_app_generate_timermenu (hsubmenu2, hash_item);
- AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, app.LocaleString (IDS_EXPLORE, L"\tEnter").GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tEnter", app.LocaleString (IDS_EXPLORE)));
+ AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_POPUP, (UINT_PTR)hsubmenu1, app.LocaleString (IDS_TRAY_RULES, NULL).GetString ());
- AppendMenu (hmenu, MF_POPUP, (UINT_PTR)hsubmenu2, app.LocaleString (IDS_TIMER, NULL).GetString ());
+ AppendMenu (hmenu, MF_POPUP, (UINT_PTR)hsubmenu1, app.LocaleString (IDS_TRAY_RULES));
+ AppendMenu (hmenu, MF_POPUP, (UINT_PTR)hsubmenu2, app.LocaleString (IDS_TIMER));
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_DELETE, app.LocaleString (IDS_DELETE, L"\tDel").GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tDel", app.LocaleString (IDS_DELETE)));
+ AppendMenu (hmenu, MF_STRING, IDM_DELETE, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_CHECK, app.LocaleString (IDS_CHECK, NULL).GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_UNCHECK, app.LocaleString (IDS_UNCHECK, NULL).GetString ());
+ AppendMenu (hmenu, MF_STRING, IDM_CHECK, app.LocaleString (IDS_CHECK));
+ AppendMenu (hmenu, MF_STRING, IDM_UNCHECK, app.LocaleString (IDS_UNCHECK));
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, app.LocaleString (IDS_SELECT_ALL, L"\tCtrl+A").GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+A", app.LocaleString (IDS_SELECT_ALL)));
+ AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY, L"\tCtrl+C").GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_COPY2, app.LocaleString (IDS_COPY, _r_fmt (L" \"%s\"", _r_listview_getcolumntext (hwnd, listview_id, lv_column_current).GetString ()).GetString ()).GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+C", app.LocaleString (IDS_COPY)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY, _r_obj_getstringorempty (localizedString));
+
+ columnText = _r_listview_getcolumntext (hwnd, listview_id, lv_column_current);
+
+ if (columnText)
+ {
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s \"%s\"", app.LocaleString (IDS_COPY), _r_obj_getstringorempty (columnText)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY2, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_dereference (columnText);
+ }
SetMenuDefaultItem (hmenu, IDM_PROPERTIES, MF_BYCOMMAND);
- _r_menu_checkitem (hmenu, IDM_DISABLENOTIFICATIONS, 0, MF_BYCOMMAND, (BOOL)_app_getappinfo (hash_item, InfoIsSilent) != FALSE);
+ _r_menu_checkitem (hmenu, IDM_DISABLENOTIFICATIONS, 0, MF_BYCOMMAND, _app_getappinfo (hash_item, InfoIsSilent) != FALSE);
if (listview_id != IDC_APPS_PROFILE)
_r_menu_enableitem (hmenu, IDM_DELETE, MF_BYCOMMAND, FALSE);
@@ -2793,49 +2948,84 @@ find_wrap:
else if (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM)
{
if (listview_id == IDC_RULES_CUSTOM)
- AppendMenu (hmenu, MF_STRING, IDM_OPENRULESEDITOR, app.LocaleString (IDS_ADD, L"...").GetString ());
+ {
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_ADD)));
+ AppendMenu (hmenu, MF_STRING, IDM_OPENRULESEDITOR, _r_obj_getstringorempty (localizedString));
+ }
- AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, app.LocaleString (IDS_EDIT2, L"...\tEnter").GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...\tEnter", app.LocaleString (IDS_EDIT2)));
+ AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, _r_obj_getstringorempty (localizedString));
if (listview_id == IDC_RULES_CUSTOM)
{
- AppendMenu (hmenu, MF_STRING, IDM_DELETE, app.LocaleString (IDS_DELETE, L"\tDel").GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tDel", app.LocaleString (IDS_DELETE)));
+ AppendMenu (hmenu, MF_STRING, IDM_DELETE, _r_obj_getstringorempty (localizedString));
- PR_OBJECT ptr_rule_object = _app_getrulebyid (hash_item);
+ PITEM_RULE ptr_rule = _app_getrulebyid (hash_item);
- if (ptr_rule_object)
+ if (ptr_rule)
{
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
-
- if (ptr_rule && ptr_rule->is_readonly)
+ if (ptr_rule->is_readonly)
_r_menu_enableitem (hmenu, IDM_DELETE, MF_BYCOMMAND, FALSE);
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_CHECK, app.LocaleString (IDS_CHECK, NULL).GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_UNCHECK, app.LocaleString (IDS_UNCHECK, NULL).GetString ());
+ AppendMenu (hmenu, MF_STRING, IDM_CHECK, app.LocaleString (IDS_CHECK));
+ AppendMenu (hmenu, MF_STRING, IDM_UNCHECK, app.LocaleString (IDS_UNCHECK));
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, app.LocaleString (IDS_SELECT_ALL, L"\tCtrl+A").GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+A", app.LocaleString (IDS_SELECT_ALL)));
+ AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY, L"\tCtrl+C").GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_COPY2, app.LocaleString (IDS_COPY, _r_fmt (L" \"%s\"", _r_listview_getcolumntext (hwnd, listview_id, lv_column_current).GetString ()).GetString ()).GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+C", app.LocaleString (IDS_COPY)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY, _r_obj_getstringorempty (localizedString));
+
+ columnText = _r_listview_getcolumntext (hwnd, listview_id, lv_column_current);
+
+ if (columnText)
+ {
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s \"%s\"", app.LocaleString (IDS_COPY), _r_obj_getstringorempty (columnText)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY2, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_dereference (columnText);
+ }
SetMenuDefaultItem (hmenu, IDM_PROPERTIES, MF_BYCOMMAND);
}
else if (listview_id == IDC_NETWORK)
{
- AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, app.LocaleString (IDS_SHOWINLIST, L"\tEnter").GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_OPENRULESEDITOR, app.LocaleString (IDS_OPENRULESEDITOR, L"...").GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tEnter", app.LocaleString (IDS_SHOWINLIST)));
+ AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_OPENRULESEDITOR)));
+ AppendMenu (hmenu, MF_STRING, IDM_OPENRULESEDITOR, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_NETWORK_CLOSE, app.LocaleString (IDS_NETWORK_CLOSE, NULL).GetString ());
+ AppendMenu (hmenu, MF_STRING, IDM_NETWORK_CLOSE, app.LocaleString (IDS_NETWORK_CLOSE));
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, app.LocaleString (IDS_SELECT_ALL, L"\tCtrl+A").GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+A", app.LocaleString (IDS_SELECT_ALL)));
+ AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY, L"\tCtrl+C").GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_COPY2, app.LocaleString (IDS_COPY, _r_fmt (L" \"%s\"", _r_listview_getcolumntext (hwnd, listview_id, lv_column_current).GetString ()).GetString ()).GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+C", app.LocaleString (IDS_COPY)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY, _r_obj_getstringorempty (localizedString));
+
+ columnText = _r_listview_getcolumntext (hwnd, listview_id, lv_column_current);
+
+ if (columnText)
+ {
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s \"%s\"", app.LocaleString (IDS_COPY), _r_obj_getstringorempty (columnText)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY2, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_dereference (columnText);
+ }
SetMenuDefaultItem (hmenu, IDM_PROPERTIES, MF_BYCOMMAND);
@@ -2852,14 +3042,34 @@ find_wrap:
}
else if (listview_id == IDC_LOG)
{
- AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, app.LocaleString (IDS_SHOWINLIST, L"\tEnter").GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_OPENRULESEDITOR, app.LocaleString (IDS_OPENRULESEDITOR, L"...").GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_TRAY_LOGCLEAR, app.LocaleString (IDS_LOGCLEAR, L"\tCtrl+X").GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tEnter", app.LocaleString (IDS_SHOWINLIST)));
+ AppendMenu (hmenu, MF_STRING, IDM_PROPERTIES, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_OPENRULESEDITOR)));
+ AppendMenu (hmenu, MF_STRING, IDM_OPENRULESEDITOR, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+X", app.LocaleString (IDS_LOGCLEAR)));
+ AppendMenu (hmenu, MF_STRING, IDM_TRAY_LOGCLEAR, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, app.LocaleString (IDS_SELECT_ALL, L"\tCtrl+A").GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+A", app.LocaleString (IDS_SELECT_ALL)));
+ AppendMenu (hmenu, MF_STRING, IDM_SELECT_ALL, _r_obj_getstringorempty (localizedString));
+
AppendMenu (hmenu, MF_SEPARATOR, 0, NULL);
- AppendMenu (hmenu, MF_STRING, IDM_COPY, app.LocaleString (IDS_COPY, L"\tCtrl+C").GetString ());
- AppendMenu (hmenu, MF_STRING, IDM_COPY2, app.LocaleString (IDS_COPY, _r_fmt (L" \"%s\"", _r_listview_getcolumntext (hwnd, listview_id, lv_column_current).GetString ()).GetString ()).GetString ());
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s\tCtrl+C", app.LocaleString (IDS_COPY)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY, _r_obj_getstringorempty (localizedString));
+
+ columnText = _r_listview_getcolumntext (hwnd, listview_id, lv_column_current);
+
+ if (columnText)
+ {
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s \"%s\"", app.LocaleString (IDS_COPY), _r_obj_getstringorempty (columnText)));
+ AppendMenu (hmenu, MF_STRING, IDM_COPY2, _r_obj_getstringorempty (localizedString));
+
+ _r_obj_dereference (columnText);
+ }
SetMenuDefaultItem (hmenu, IDM_PROPERTIES, MF_BYCOMMAND);
}
@@ -2877,6 +3087,8 @@ find_wrap:
if (command_id)
PostMessage (hwnd, WM_COMMAND, MAKEWPARAM (command_id, 0), (LPARAM)lv_column_current);
+ SAFE_DELETE_REFERENCE (localizedString);
+
break;
}
}
@@ -2933,54 +3145,52 @@ find_wrap:
#define NOTIFICATIONS_ID 4
#define LOGGING_ID 5
#define ERRLOG_ID 6
-
- BOOLEAN is_filtersinstalled = (_wfp_isfiltersinstalled () != InstallDisabled);
+ PR_STRING localizedString = NULL;
HMENU hmenu = LoadMenu (NULL, MAKEINTRESOURCE (IDM_TRAY));
HMENU hsubmenu = GetSubMenu (hmenu, 0);
- {
- MENUITEMINFO mii = {0};
+ BOOLEAN is_filtersinstalled = (_wfp_isfiltersinstalled () != InstallDisabled);
- mii.cbSize = sizeof (mii);
- mii.fMask = MIIM_BITMAP;
-
- mii.hbmpItem = is_filtersinstalled ? config.hbmp_disable : config.hbmp_enable;
- SetMenuItemInfo (hsubmenu, IDM_TRAY_START, FALSE, &mii);
- }
+ _r_menu_setitembitmap (hsubmenu, IDM_TRAY_START, is_filtersinstalled ? config.hbmp_disable : config.hbmp_enable, FALSE);
// localize
- app.LocaleMenu (hsubmenu, IDS_TRAY_SHOW, IDM_TRAY_SHOW, FALSE, NULL);
- app.LocaleMenu (hsubmenu, is_filtersinstalled ? IDS_TRAY_STOP : IDS_TRAY_START, IDM_TRAY_START, FALSE, NULL);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_SHOW, app.LocaleString (IDS_TRAY_SHOW), FALSE);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_START, app.LocaleString (is_filtersinstalled ? IDS_TRAY_STOP : IDS_TRAY_START), FALSE);
- app.LocaleMenu (hsubmenu, IDS_TITLE_NOTIFICATIONS, NOTIFICATIONS_ID, TRUE, NULL);
- app.LocaleMenu (hsubmenu, IDS_TITLE_LOGGING, LOGGING_ID, TRUE, NULL);
+ _r_menu_setitemtext (hsubmenu, NOTIFICATIONS_ID, app.LocaleString (IDS_TITLE_NOTIFICATIONS), TRUE);
+ _r_menu_setitemtext (hsubmenu, LOGGING_ID, app.LocaleString (IDS_TITLE_LOGGING), TRUE);
- app.LocaleMenu (hsubmenu, IDS_ENABLENOTIFICATIONS_CHK, IDM_TRAY_ENABLENOTIFICATIONS_CHK, FALSE, NULL);
- app.LocaleMenu (hsubmenu, IDS_NOTIFICATIONSOUND_CHK, IDM_TRAY_ENABLENOTIFICATIONSSOUND_CHK, FALSE, NULL);
- app.LocaleMenu (hsubmenu, IDS_NOTIFICATIONONTRAY_CHK, IDM_TRAY_NOTIFICATIONONTRAY_CHK, FALSE, NULL);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_ENABLENOTIFICATIONS_CHK, app.LocaleString (IDS_ENABLENOTIFICATIONS_CHK), FALSE);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_ENABLENOTIFICATIONSSOUND_CHK, app.LocaleString (IDS_NOTIFICATIONSOUND_CHK), FALSE);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_NOTIFICATIONONTRAY_CHK, app.LocaleString (IDS_NOTIFICATIONONTRAY_CHK), FALSE);
- app.LocaleMenu (hsubmenu, IDS_ENABLELOG_CHK, IDM_TRAY_ENABLELOG_CHK, FALSE, NULL);
- app.LocaleMenu (hsubmenu, IDS_ENABLEUILOG_CHK, IDM_TRAY_ENABLEUILOG_CHK, FALSE, L" (session only)");
- app.LocaleMenu (hsubmenu, IDS_LOGSHOW, IDM_TRAY_LOGSHOW, FALSE, NULL);
- app.LocaleMenu (hsubmenu, IDS_LOGCLEAR, IDM_TRAY_LOGCLEAR, FALSE, NULL);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_ENABLELOG_CHK, app.LocaleString (IDS_ENABLELOG_CHK), FALSE);
- if (_r_fs_exists (app.GetLogPath ()))
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s (session only)", app.LocaleString (IDS_ENABLEUILOG_CHK)));
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_ENABLEUILOG_CHK, _r_obj_getstringorempty (localizedString), FALSE);
+
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_LOGSHOW, app.LocaleString (IDS_LOGSHOW), FALSE);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_LOGCLEAR, app.LocaleString (IDS_LOGCLEAR), FALSE);
+
+ if (_r_fs_exists (app.GetDebugLogPath ()))
{
- app.LocaleMenu (hsubmenu, IDS_TRAY_LOGERR, ERRLOG_ID, TRUE, NULL);
+ _r_menu_setitemtext (hsubmenu, ERRLOG_ID, app.LocaleString (IDS_TRAY_LOGERR), TRUE);
- app.LocaleMenu (hsubmenu, IDS_LOGSHOW, IDM_TRAY_LOGSHOW_ERR, FALSE, NULL);
- app.LocaleMenu (hsubmenu, IDS_LOGCLEAR, IDM_TRAY_LOGCLEAR_ERR, FALSE, NULL);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_LOGSHOW_ERR, app.LocaleString (IDS_LOGSHOW), FALSE);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_LOGCLEAR_ERR, app.LocaleString (IDS_LOGCLEAR), FALSE);
}
else
{
DeleteMenu (hsubmenu, ERRLOG_ID, MF_BYPOSITION);
}
- app.LocaleMenu (hsubmenu, IDS_SETTINGS, IDM_TRAY_SETTINGS, FALSE, L"...");
- app.LocaleMenu (hsubmenu, IDS_WEBSITE, IDM_TRAY_WEBSITE, FALSE, NULL);
- app.LocaleMenu (hsubmenu, IDS_ABOUT, IDM_TRAY_ABOUT, FALSE, NULL);
- app.LocaleMenu (hsubmenu, IDS_EXIT, IDM_TRAY_EXIT, FALSE, NULL);
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s...", app.LocaleString (IDS_SETTINGS)));
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_SETTINGS, _r_obj_getstringorempty (localizedString), FALSE);
+
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_WEBSITE, app.LocaleString (IDS_WEBSITE), FALSE);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_ABOUT, app.LocaleString (IDS_ABOUT), FALSE);
+ _r_menu_setitemtext (hsubmenu, IDM_TRAY_EXIT, app.LocaleString (IDS_EXIT), FALSE);
_r_menu_checkitem (hsubmenu, IDM_TRAY_ENABLENOTIFICATIONS_CHK, 0, MF_BYCOMMAND, app.ConfigGetBoolean (L"IsNotificationsEnabled", TRUE));
_r_menu_checkitem (hsubmenu, IDM_TRAY_ENABLENOTIFICATIONSSOUND_CHK, 0, MF_BYCOMMAND, app.ConfigGetBoolean (L"IsNotificationsSound", TRUE));
@@ -3002,6 +3212,8 @@ find_wrap:
DestroyMenu (hmenu);
+ SAFE_DELETE_REFERENCE (localizedString);
+
break;
}
}
@@ -3114,82 +3326,72 @@ find_wrap:
BOOL is_remove = INVALID_INT;
SIZE_T rule_idx = (ctrl_id - IDX_RULES_SPECIAL);
- PR_OBJECT ptr_rule_object = _app_getrulebyid (rule_idx);
+ PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
- if (!ptr_rule_object)
+ if (!ptr_rule)
return FALSE;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
-
- if (ptr_rule)
+ while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
{
- while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
+ SIZE_T app_hash = _r_listview_getitemlparam (hwnd, listview_id, item);
+
+ if (ptr_rule->is_forservices && (app_hash == config.ntoskrnl_hash || app_hash == config.svchost_hash))
+ continue;
+
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
+
+ if (!ptr_app)
+ continue;
+
+ _app_freenotify (app_hash, ptr_app);
+
+ if (is_remove == INVALID_INT)
+ is_remove = !!(ptr_rule->is_enabled && (ptr_rule->apps->find (app_hash) != ptr_rule->apps->end ()));
+
+ if (is_remove)
{
- SIZE_T app_hash = _r_listview_getitemlparam (hwnd, listview_id, item);
+ ptr_rule->apps->erase (app_hash);
- if (ptr_rule->is_forservices && (app_hash == config.ntoskrnl_hash || app_hash == config.svchost_hash))
- continue;
+ if (ptr_rule->apps->empty ())
+ _app_ruleenable (ptr_rule, FALSE);
+ }
+ else
+ {
+ ptr_rule->apps->emplace (app_hash, TRUE);
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
-
- if (!ptr_app_object)
- continue;
-
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app)
- {
- _app_freenotify (app_hash, ptr_app);
-
- if (is_remove == INVALID_INT)
- is_remove = !!(ptr_rule->is_enabled && (ptr_rule->apps.find (app_hash) != ptr_rule->apps.end ()));
-
- if (is_remove)
- {
- ptr_rule->apps.erase (app_hash);
-
- if (ptr_rule->apps.empty ())
- _app_ruleenable (ptr_rule, FALSE);
- }
- else
- {
- ptr_rule->apps[app_hash] = TRUE;
-
- _app_ruleenable (ptr_rule, TRUE);
- }
-
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (hwnd, listview_id, item, app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
-
- _r_obj2_dereference (ptr_app_object);
+ _app_ruleenable (ptr_rule, TRUE);
}
- INT rule_listview_id = _app_getlistview_id (ptr_rule->type);
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (hwnd, listview_id, item, app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
- if (rule_listview_id)
- {
- INT item_pos = _app_getposition (hwnd, rule_listview_id, rule_idx);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setruleiteminfo (hwnd, rule_listview_id, item_pos, ptr_rule, TRUE);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
- }
-
- OBJECTS_VEC rules;
- rules.push_back (ptr_rule_object);
-
- HANDLE hengine = _wfp_getenginehandle ();
-
- if (hengine)
- _wfp_create4filters (hengine, rules, __LINE__);
+ _r_obj_dereference (ptr_app);
}
- _r_obj2_dereference (ptr_rule_object);
+ INT rule_listview_id = _app_getlistview_id (ptr_rule->type);
+
+ if (rule_listview_id)
+ {
+ INT item_pos = _app_getposition (hwnd, rule_listview_id, rule_idx);
+
+ if (item_pos != INVALID_INT)
+ {
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setruleiteminfo (hwnd, rule_listview_id, item_pos, ptr_rule, TRUE);
+ _r_fastlock_releaseshared (&lock_checkbox);
+ }
+ }
+
+ OBJECTS_RULE_VECTOR rules;
+ rules.emplace_back (ptr_rule);
+
+ HANDLE hengine = _wfp_getenginehandle ();
+
+ if (hengine)
+ _wfp_create4filters (hengine, &rules, __LINE__);
+
+ _r_obj_dereference (ptr_rule);
_app_listviewsort (hwnd, listview_id, INVALID_INT, FALSE);
_app_refreshstatus (hwnd, listview_id);
@@ -3208,35 +3410,27 @@ find_wrap:
SIZE_T timer_idx = (ctrl_id - IDX_TIMER);
time_t seconds = timers.at (timer_idx);
INT item = INVALID_INT;
- OBJECTS_VEC rules;
+ OBJECTS_APP_VECTOR rules;
while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
{
SIZE_T app_hash = _r_listview_getitemlparam (hwnd, listview_id, item);
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (!ptr_app_object)
+ if (!ptr_app)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ _app_timer_set (hwnd, ptr_app, seconds);
- if (ptr_app)
- {
- _app_timer_set (hwnd, ptr_app, seconds);
- rules.push_back (ptr_app_object);
- }
- else
- {
- _r_obj2_dereference (ptr_app_object);
- }
+ rules.emplace_back (ptr_app);
}
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_create3filters (hengine, rules, __LINE__);
+ _wfp_create3filters (hengine, &rules, __LINE__);
- _app_freeobjects_vec (rules);
+ _app_freeapps_vec (&rules);
_app_listviewsort (hwnd, listview_id, INVALID_INT, FALSE);
_app_refreshstatus (hwnd, listview_id);
@@ -3284,7 +3478,7 @@ find_wrap:
case IDM_DONATE:
{
- ShellExecute (hwnd, NULL, _r_fmt (_APP_DONATE_URL, APP_NAME_SHORT).GetString (), NULL, NULL, SW_SHOWDEFAULT);
+ ShellExecute (hwnd, NULL, _APP_DONATE_NEWURL, NULL, NULL, SW_SHOWDEFAULT);
break;
}
@@ -3297,11 +3491,11 @@ find_wrap:
case IDM_IMPORT:
{
- WCHAR path[MAX_PATH] = {0};
+ WCHAR path[MAX_PATH];
_r_str_copy (path, RTL_NUMBER_OF (path), XML_PROFILE);
- WCHAR title[MAX_PATH] = {0};
- _r_str_printf (title, RTL_NUMBER_OF (title), L"%s %s...", app.LocaleString (IDS_IMPORT, NULL).GetString (), path);
+ WCHAR title[MAX_PATH];
+ _r_str_printf (title, RTL_NUMBER_OF (title), L"%s %s...", app.LocaleString (IDS_IMPORT), path);
OPENFILENAME ofn = {0};
@@ -3336,11 +3530,11 @@ find_wrap:
case IDM_EXPORT:
{
- WCHAR path[MAX_PATH] = {0};
+ WCHAR path[MAX_PATH];
_r_str_copy (path, RTL_NUMBER_OF (path), XML_PROFILE);
- WCHAR title[MAX_PATH] = {0};
- _r_str_printf (title, RTL_NUMBER_OF (title), L"%s %s...", app.LocaleString (IDS_EXPORT, NULL).GetString (), path);
+ WCHAR title[MAX_PATH];
+ _r_str_printf (title, RTL_NUMBER_OF (title), L"%s %s...", app.LocaleString (IDS_EXPORT), path);
OPENFILENAME ofn = {0};
@@ -3394,36 +3588,31 @@ find_wrap:
app.ConfigSetBoolean (L"ShowFilenames", new_val);
// regroup apps
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- SIZE_T app_hash = p.first;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app)
+ _r_obj_movereference (&ptr_app->display_name, _app_getdisplayname (app_hash, ptr_app));
+
+ INT listview_id = _app_getlistview_id (ptr_app->type);
+
+ if (listview_id)
{
- _app_getdisplayname (app_hash, ptr_app, &ptr_app->display_name);
+ INT item_pos = _app_getposition (hwnd, listview_id, app_hash);
- INT listview_id = _app_getlistview_id (ptr_app->type);
-
- if (listview_id)
+ if (item_pos != INVALID_INT)
{
- INT item_pos = _app_getposition (hwnd, listview_id, app_hash);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (hwnd, listview_id, item_pos, app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (hwnd, listview_id, item_pos, app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
}
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
_app_listviewsort (hwnd, (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT), INVALID_INT, FALSE);
@@ -3439,34 +3628,29 @@ find_wrap:
app.ConfigSetBoolean (L"IsEnableSpecialGroup", new_val);
// regroup apps
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- SIZE_T app_hash = p.first;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app)
+ INT listview_id = _app_getlistview_id (ptr_app->type);
+
+ if (listview_id)
{
- INT listview_id = _app_getlistview_id (ptr_app->type);
+ INT item_pos = _app_getposition (hwnd, listview_id, app_hash);
- if (listview_id)
+ if (item_pos != INVALID_INT)
{
- INT item_pos = _app_getposition (hwnd, listview_id, app_hash);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (hwnd, listview_id, item_pos, app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (hwnd, listview_id, item_pos, app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
}
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
INT listview_id = (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT);
@@ -3549,34 +3733,29 @@ find_wrap:
_r_menu_checkitem (GetMenu (hwnd), ctrl_id, 0, MF_BYCOMMAND, new_val);
app.ConfigSetBoolean (L"IsIconsHidden", new_val);
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- SIZE_T app_hash = p.first;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app)
+ INT listview_id = _app_getlistview_id (ptr_app->type);
+
+ if (listview_id)
{
- INT listview_id = _app_getlistview_id (ptr_app->type);
+ INT item_pos = _app_getposition (hwnd, listview_id, app_hash);
- if (listview_id)
+ if (item_pos != INVALID_INT)
{
- INT item_pos = _app_getposition (hwnd, listview_id, app_hash);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (hwnd, listview_id, item_pos, app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (hwnd, listview_id, item_pos, app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
}
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
break;
@@ -3595,11 +3774,11 @@ find_wrap:
cf.nSizeMin = 8;
cf.lpLogFont = &lf;
- _app_listviewinitfont (hwnd, &lf);
+ app.ConfigGetFont (L"Font", hwnd, &lf);
if (ChooseFont (&cf))
{
- app.ConfigSetString (L"Font", !_r_str_isempty (lf.lfFaceName) ? _r_fmt (L"%s;%d;%d", lf.lfFaceName, _r_dc_fontheighttosize (hwnd, lf.lfHeight), lf.lfWeight).GetString () : UI_FONT_DEFAULT);
+ app.ConfigSetFont (L"Font", hwnd, &lf);
SAFE_DELETE_OBJECT (config.hfont);
@@ -3618,7 +3797,6 @@ find_wrap:
}
}
-
RedrawWindow (hwnd, NULL, NULL, RDW_NOFRAME | RDW_NOINTERNALPAINT | RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN);
}
@@ -3814,15 +3992,36 @@ find_wrap:
}
else
{
- rstring path = _r_path_expand (app.ConfigGetString (L"LogPath", LOG_PATH_DEFAULT).GetString ());
+ PR_STRING logPath;
+ PR_STRING viewerPath;
+ PR_STRING processPath;
+
+ logPath = _r_path_expand (app.ConfigGetString (L"LogPath", LOG_PATH_DEFAULT));
+
+ if (!logPath || !_r_fs_exists (logPath->Buffer))
+ {
+ if (logPath)
+ _r_obj_dereference (logPath);
- if (!_r_fs_exists (path.GetString ()))
return FALSE;
+ }
if (_r_fs_isvalidhandle (config.hlogfile))
FlushFileBuffers (config.hlogfile);
- _r_sys_createprocess (NULL, _r_fmt (L"%s \"%s\"", _app_getlogviewer ().GetString (), path.GetString ()).GetString (), NULL);
+ viewerPath = _app_getlogviewer ();
+
+ if (viewerPath)
+ {
+ processPath = _r_format_string (L"%s \"%s\"", _r_obj_getstring (viewerPath), logPath->Buffer);
+
+ _r_sys_createprocess (NULL, _r_obj_getstring (processPath), NULL);
+
+ _r_obj_dereference (viewerPath);
+ _r_obj_dereference (processPath);
+ }
+
+ _r_obj_dereference (logPath);
}
break;
@@ -3830,39 +4029,56 @@ find_wrap:
case IDM_TRAY_LOGCLEAR:
{
- rstring path = _r_path_expand (app.ConfigGetString (L"LogPath", LOG_PATH_DEFAULT).GetString ());
- BOOLEAN is_validhandle = _r_fs_isvalidhandle (config.hlogfile);
+ PR_STRING path = _r_path_expand (app.ConfigGetString (L"LogPath", LOG_PATH_DEFAULT));
- if (is_validhandle || _r_fs_exists (path.GetString ()) || !log_arr.empty ())
+ if (_r_fs_isvalidhandle (config.hlogfile) || (path && _r_fs_exists (path->Buffer)) || !log_arr.empty ())
{
- if (!app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION, NULL).GetString (), L"ConfirmLogClear"))
- break;
+ if (app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION), L"ConfirmLogClear"))
+ {
+ _app_freelogstack ();
- _app_freelogstack ();
-
- _app_logclear ();
- _app_logclear_ui (hwnd);
+ _app_logclear ();
+ _app_logclear_ui (hwnd);
+ }
}
+ SAFE_DELETE_REFERENCE (path);
+
break;
}
case IDM_TRAY_LOGSHOW_ERR:
{
- LPCWSTR path = app.GetLogPath ();
+ PR_STRING viewerPath;
+ PR_STRING processPath;
+ LPCWSTR logPath;
- if (_r_fs_exists (path))
- _r_sys_createprocess (NULL, _r_fmt (L"%s \"%s\"", _app_getlogviewer ().GetString (), path).GetString (), NULL);
+ logPath = app.GetDebugLogPath ();
+
+ if (_r_fs_exists (logPath))
+ {
+ viewerPath = _app_getlogviewer ();
+
+ if (viewerPath)
+ {
+ processPath = _r_format_string (L"%s \"%s\"", viewerPath->Buffer, logPath);
+
+ _r_sys_createprocess (NULL, processPath->Buffer, NULL);
+
+ _r_obj_dereference (processPath);
+ _r_obj_dereference (viewerPath);
+ }
+ }
break;
}
case IDM_TRAY_LOGCLEAR_ERR:
{
- if (!app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION, NULL).GetString (), L"ConfirmLogClear"))
+ if (!app.ShowConfirmMessage (hwnd, NULL, app.LocaleString (IDS_QUESTION), L"ConfirmLogClear"))
break;
- LPCWSTR path = app.GetLogPath ();
+ LPCWSTR path = app.GetDebugLogPath ();
if (!_r_fs_exists (path))
break;
@@ -3908,7 +4124,10 @@ find_wrap:
else
{
LPWSTR p = files;
+
WCHAR dir[MAX_PATH] = {0};
+ WCHAR full_path[512];
+
GetCurrentDirectory (RTL_NUMBER_OF (dir), dir);
while (*p)
@@ -3917,7 +4136,8 @@ find_wrap:
if (*p)
{
- app_hash = _app_addapplication (hwnd, _r_fmt (L"%s\\%s", dir, p).GetString (), 0, 0, 0, FALSE, FALSE);
+ _r_str_printf (full_path, RTL_NUMBER_OF (full_path), L"%s\\%s", dir, p);
+ app_hash = _app_addapplication (hwnd, full_path, 0, 0, 0, FALSE, FALSE);
}
}
}
@@ -3956,32 +4176,27 @@ find_wrap:
while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
{
SIZE_T app_hash = _r_listview_getitemlparam (hwnd, listview_id, item);
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (!ptr_app_object)
+ if (!ptr_app)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app)
+ if (ctrl_id == IDM_DISABLENOTIFICATIONS)
{
- if (ctrl_id == IDM_DISABLENOTIFICATIONS)
- {
- if (new_val == INVALID_INT)
- new_val = !ptr_app->is_silent;
+ if (new_val == INVALID_INT)
+ new_val = !ptr_app->is_silent;
- ptr_app->is_silent = new_val;
+ ptr_app->is_silent = !!new_val;
- if (new_val)
- _app_freenotify (app_hash, ptr_app);
- }
- else if (ctrl_id == IDM_DISABLETIMER)
- {
- _app_timer_reset (hwnd, ptr_app);
- }
+ if (new_val)
+ _app_freenotify (app_hash, ptr_app);
+ }
+ else if (ctrl_id == IDM_DISABLETIMER)
+ {
+ _app_timer_reset (hwnd, ptr_app);
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
_app_listviewsort (hwnd, listview_id, INVALID_INT, FALSE);
@@ -3995,34 +4210,64 @@ find_wrap:
case IDM_COPY:
case IDM_COPY2:
{
- INT listview_id = (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT);
- INT item = INVALID_INT;
+ INT listview_id;
+ INT item;
- INT column_count = _r_listview_getcolumncount (hwnd, listview_id);
- INT column_current = (INT)lparam;
- rstring divider = _r_fmt (L"%c ", DIVIDER_COPY);
+ INT column_count;
+ INT column_current;
- rstring buffer;
+ PR_STRING buffer;
+ PR_STRING string;
+
+ listview_id = (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT);
+ item = INVALID_INT;
+
+ column_count = _r_listview_getcolumncount (hwnd, listview_id);
+ column_current = (INT)lparam;
+
+ buffer = _r_obj_createstringbuilder (512 * sizeof (WCHAR));
while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
{
if (ctrl_id == IDM_COPY)
{
for (INT column_id = 0; column_id < column_count; column_id++)
- buffer.Append (_r_listview_getitemtext (hwnd, listview_id, item, column_id)).Append (divider);
+ {
+ string = _r_listview_getitemtext (hwnd, listview_id, item, column_id);
+
+ if (string)
+ {
+ if (!_r_str_isempty (string))
+ _r_string_appendformat (&buffer, L"%s%s", string->Buffer, DIVIDER_COPY);
+
+ _r_obj_dereference (string);
+ }
+ }
+
+ _r_str_trim (buffer, DIVIDER_COPY);
}
else
{
- buffer.Append (_r_listview_getitemtext (hwnd, listview_id, item, column_current)).Append (divider);
+ string = _r_listview_getitemtext (hwnd, listview_id, item, column_current);
+
+ if (string)
+ {
+ if (!_r_str_isempty (string))
+ _r_string_append (&buffer, string->Buffer);
+
+ _r_obj_dereference (string);
+ }
}
- _r_str_trim (buffer, divider.GetString ());
- buffer.Append (L"\r\n");
+ _r_string_append (&buffer, L"\r\n");
}
_r_str_trim (buffer, DIVIDER_TRIM);
- _r_clipboard_set (hwnd, buffer.GetString (), buffer.GetLength ());
+ if (!_r_str_isempty (buffer))
+ _r_clipboard_set (hwnd, buffer->Buffer, _r_obj_getstringlength (buffer));
+
+ _r_obj_dereference (buffer);
break;
}
@@ -4037,20 +4282,18 @@ find_wrap:
if (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP)
{
- OBJECTS_VEC rules;
+ OBJECTS_APP_VECTOR rules;
INT item = INVALID_INT;
while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
{
SIZE_T app_hash = _r_listview_getitemlparam (hwnd, listview_id, item);
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (!ptr_app_object)
+ if (!ptr_app)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app && ptr_app->is_enabled != new_val)
+ if (ptr_app->is_enabled != new_val)
{
if (!new_val)
_app_timer_reset (hwnd, ptr_app);
@@ -4064,7 +4307,7 @@ find_wrap:
_app_setappiteminfo (hwnd, listview_id, item, app_hash, ptr_app);
_r_fastlock_releaseshared (&lock_checkbox);
- rules.push_back (ptr_app_object);
+ rules.emplace_back (ptr_app);
is_changed = TRUE;
@@ -4072,7 +4315,7 @@ find_wrap:
}
else
{
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
@@ -4081,27 +4324,25 @@ find_wrap:
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_create3filters (hengine, rules, __LINE__);
+ _wfp_create3filters (hengine, &rules, __LINE__);
- _app_freeobjects_vec (rules);
+ _app_freeapps_vec (&rules);
}
}
else if (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM)
{
- OBJECTS_VEC rules;
+ OBJECTS_RULE_VECTOR rules;
INT item = INVALID_INT;
while ((item = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETNEXTITEM, (WPARAM)item, LVNI_SELECTED)) != INVALID_INT)
{
SIZE_T rule_idx = _r_listview_getitemlparam (hwnd, listview_id, item);
- PR_OBJECT ptr_rule_object = _app_getrulebyid (rule_idx);
+ PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
- if (!ptr_rule_object)
+ if (!ptr_rule)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
-
- if (ptr_rule && ptr_rule->is_enabled != new_val)
+ if (ptr_rule->is_enabled != new_val)
{
_app_ruleenable (ptr_rule, new_val);
@@ -4109,7 +4350,7 @@ find_wrap:
_app_setruleiteminfo (hwnd, listview_id, item, ptr_rule, TRUE);
_r_fastlock_releaseshared (&lock_checkbox);
- rules.push_back (ptr_rule_object);
+ rules.emplace_back (ptr_rule);
is_changed = TRUE;
@@ -4117,7 +4358,7 @@ find_wrap:
}
else
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
@@ -4126,9 +4367,9 @@ find_wrap:
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_create4filters (hengine, rules, __LINE__);
+ _wfp_create4filters (hengine, &rules, __LINE__);
- _app_freeobjects_vec (rules);
+ _app_freerules_vec (&rules);
}
}
@@ -4151,8 +4392,11 @@ find_wrap:
case IDM_OPENRULESEDITOR:
{
- PITEM_RULE ptr_rule = new ITEM_RULE;
- PR_OBJECT ptr_rule_object = _r_obj2_allocateex (ptr_rule, &_app_dereferencerule);
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_allocateex (sizeof (ITEM_RULE), &_app_dereferencerule);
+
+ // initialize stl
+ ptr_rule->apps = new HASHER_MAP;
+ ptr_rule->guids = new GUIDS_VEC;
_app_ruleenable (ptr_rule, TRUE);
@@ -4170,7 +4414,7 @@ find_wrap:
SIZE_T app_hash = _r_listview_getitemlparam (hwnd, listview_id, item);
if (_app_isappfound (app_hash))
- ptr_rule->apps[app_hash] = TRUE;
+ ptr_rule->apps->emplace (app_hash, TRUE);
}
}
else if (listview_id == IDC_NETWORK)
@@ -4186,30 +4430,25 @@ find_wrap:
if (ptr_network)
{
- if (_r_str_isempty (ptr_rule->pname))
- {
- rstring item_text = _r_listview_getitemtext (hwnd, listview_id, item, 0);
-
- _r_str_alloc (&ptr_rule->pname, item_text.GetLength (), item_text.GetString ());
- }
+ _r_obj_movereference (&ptr_rule->name, _r_listview_getitemtext (hwnd, listview_id, item, 0));
if (ptr_network->app_hash && !_r_str_isempty (ptr_network->path))
{
if (!_app_isappfound (ptr_network->app_hash))
{
- _app_addapplication (hwnd, ptr_network->path, 0, 0, 0, FALSE, FALSE);
+ _app_addapplication (hwnd, ptr_network->path->Buffer, 0, 0, 0, FALSE, FALSE);
_app_refreshstatus (hwnd, listview_id);
_app_profile_save (NULL);
}
- ptr_rule->apps[ptr_network->app_hash] = TRUE;
+ ptr_rule->apps->emplace (ptr_network->app_hash, TRUE);
}
ptr_rule->protocol = ptr_network->protocol;
- _app_formataddress (ptr_network->af, 0, &ptr_network->remote_addr, ptr_network->remote_port, &ptr_rule->prule_remote, FMTADDR_AS_RULE);
- _app_formataddress (ptr_network->af, 0, &ptr_network->local_addr, ptr_network->local_port, &ptr_rule->prule_local, FMTADDR_AS_RULE);
+ _r_obj_movereference (&ptr_rule->rule_remote, _app_formataddress (ptr_network->af, 0, &ptr_network->remote_addr, ptr_network->remote_port, FMTADDR_AS_RULE));
+ _r_obj_movereference (&ptr_rule->rule_local, _app_formataddress (ptr_network->af, 0, &ptr_network->local_addr, ptr_network->local_port, FMTADDR_AS_RULE));
_r_obj_dereference (ptr_network);
}
@@ -4228,41 +4467,42 @@ find_wrap:
if (ptr_log)
{
- if (_r_str_isempty (ptr_rule->pname))
+ if (_r_str_isempty (ptr_rule->name))
{
- rstring item_text = _r_listview_getitemtext (hwnd, listview_id, item, 0);
+ PR_STRING itemText = _r_listview_getitemtext (hwnd, listview_id, item, 0);
- _r_str_alloc (&ptr_rule->pname, item_text.GetLength (), item_text.GetString ());
+ if (itemText)
+ _r_obj_movereference (&ptr_rule->name, itemText);
}
if (ptr_log->app_hash && !_r_str_isempty (ptr_log->path))
{
if (!_app_isappfound (ptr_log->app_hash))
{
- _app_addapplication (hwnd, ptr_log->path, 0, 0, 0, FALSE, FALSE);
+ _app_addapplication (hwnd, ptr_log->path->Buffer, 0, 0, 0, FALSE, FALSE);
_app_refreshstatus (hwnd, listview_id);
_app_profile_save (NULL);
}
- ptr_rule->apps[ptr_log->app_hash] = TRUE;
+ ptr_rule->apps->emplace (ptr_log->app_hash, TRUE);
}
ptr_rule->protocol = ptr_log->protocol;
ptr_rule->direction = ptr_log->direction;
- _app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, ptr_log->remote_port, &ptr_rule->prule_remote, FMTADDR_AS_RULE);
- _app_formataddress (ptr_log->af, 0, &ptr_log->local_addr, ptr_log->local_port, &ptr_rule->prule_local, FMTADDR_AS_RULE);
+ _r_obj_movereference (&ptr_rule->rule_remote, _app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, ptr_log->remote_port, FMTADDR_AS_RULE));
+ _r_obj_movereference (&ptr_rule->rule_local, _app_formataddress (ptr_log->af, 0, &ptr_log->local_addr, ptr_log->local_port, FMTADDR_AS_RULE));
_r_obj_dereference (ptr_log);
}
}
}
- if (DialogBoxParam (NULL, MAKEINTRESOURCE (IDD_EDITOR), hwnd, &EditorProc, (LPARAM)ptr_rule_object))
+ if (DialogBoxParam (NULL, MAKEINTRESOURCE (IDD_EDITOR), hwnd, &EditorProc, (LPARAM)ptr_rule))
{
SIZE_T rule_idx = rules_arr.size ();
- rules_arr.push_back (_r_obj2_reference (ptr_rule_object));
+ rules_arr.emplace_back ((PITEM_RULE)_r_obj_reference (ptr_rule));
INT listview_rules_id = _app_getlistview_id (DataRuleCustom);
@@ -4272,7 +4512,7 @@ find_wrap:
_r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_additem (hwnd, listview_rules_id, item_id, 0, ptr_rule->pname, _app_getruleicon (ptr_rule), _app_getrulegroup (ptr_rule), rule_idx);
+ _r_listview_additem (hwnd, listview_rules_id, item_id, 0, _r_obj_getstringordefault (ptr_rule->name, SZ_EMPTY), _app_getruleicon (ptr_rule), _app_getrulegroup (ptr_rule), rule_idx);
_app_setruleiteminfo (hwnd, listview_rules_id, item_id, ptr_rule, TRUE);
_r_fastlock_releaseshared (&lock_checkbox);
@@ -4284,7 +4524,7 @@ find_wrap:
_app_profile_save (NULL);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
break;
}
@@ -4313,17 +4553,14 @@ find_wrap:
else if (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM)
{
SIZE_T rule_idx = _r_listview_getitemlparam (hwnd, listview_id, item);
- PR_OBJECT ptr_rule_object = _app_getrulebyid (rule_idx);
+ PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
- if (!ptr_rule_object)
+ if (!ptr_rule)
break;
- if (DialogBoxParam (NULL, MAKEINTRESOURCE (IDD_EDITOR), hwnd, &EditorProc, (LPARAM)ptr_rule_object))
+ if (DialogBoxParam (NULL, MAKEINTRESOURCE (IDD_EDITOR), hwnd, &EditorProc, (LPARAM)ptr_rule))
{
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
-
- if (ptr_rule)
- _app_setruleiteminfo (hwnd, listview_id, item, ptr_rule, TRUE);
+ _app_setruleiteminfo (hwnd, listview_id, item, ptr_rule, TRUE);
_app_listviewsort (hwnd, listview_id, INVALID_INT, FALSE);
_app_refreshstatus (hwnd, listview_id);
@@ -4331,7 +4568,7 @@ find_wrap:
_app_profile_save (NULL);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
else if (listview_id == IDC_NETWORK)
{
@@ -4345,7 +4582,7 @@ find_wrap:
{
if (!_app_isappfound (ptr_network->app_hash))
{
- _app_addapplication (hwnd, ptr_network->path, 0, 0, 0, FALSE, FALSE);
+ _app_addapplication (hwnd, ptr_network->path->Buffer, 0, 0, 0, FALSE, FALSE);
_app_refreshstatus (hwnd, listview_id);
_app_profile_save (NULL);
@@ -4374,7 +4611,7 @@ find_wrap:
{
if (!_app_isappfound (ptr_log->app_hash))
{
- _app_addapplication (hwnd, ptr_log->path, 0, 0, 0, FALSE, FALSE);
+ _app_addapplication (hwnd, ptr_log->path->Buffer, 0, 0, 0, FALSE, FALSE);
_app_refreshstatus (hwnd, listview_id);
_app_profile_save (NULL);
@@ -4448,17 +4685,25 @@ find_wrap:
case IDM_DELETE:
{
- INT listview_id = (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT);
+ INT listview_id;
+ INT selected;
+ INT count;
+ WCHAR messageText[512];
+
+ listview_id = (INT)_r_tab_getlparam (hwnd, IDC_TAB, INVALID_INT);
if (listview_id != IDC_APPS_PROFILE && listview_id != IDC_RULES_CUSTOM)
break;
- INT selected = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETSELECTEDCOUNT, 0, 0);
-
- if (!selected || app.ShowMessage (hwnd, MB_YESNO | MB_ICONEXCLAMATION, NULL, NULL, _r_fmt (app.LocaleString (IDS_QUESTION_DELETE, NULL).GetString (), selected).GetString ()) != IDYES)
+ if (!(selected = (INT)SendDlgItemMessage (hwnd, listview_id, LVM_GETSELECTEDCOUNT, 0, 0)))
break;
- INT count = _r_listview_getitemcount (hwnd, listview_id, FALSE) - 1;
+ _r_str_printf (messageText, RTL_NUMBER_OF (messageText), app.LocaleString (IDS_QUESTION_DELETE), selected);
+
+ if (app.ShowMessage (hwnd, MB_YESNO | MB_ICONEXCLAMATION, NULL, NULL, messageText) != IDYES)
+ break;
+
+ count = _r_listview_getitemcount (hwnd, listview_id, FALSE) - 1;
GUIDS_VEC guids;
@@ -4469,16 +4714,14 @@ find_wrap:
if (listview_id == IDC_APPS_PROFILE)
{
SIZE_T app_hash = _r_listview_getitemlparam (hwnd, listview_id, i);
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (!ptr_app_object)
+ if (!ptr_app)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app && !ptr_app->is_undeletable) // skip "undeletable" apps
+ if (!ptr_app->is_undeletable) // skip "undeletable" apps
{
- guids.insert (guids.end (), ptr_app->guids.begin (), ptr_app->guids.end ());
+ guids.insert (guids.end (), ptr_app->guids->begin (), ptr_app->guids->end ());
SendDlgItemMessage (hwnd, listview_id, LVM_DELETEITEM, (WPARAM)i, 0);
@@ -4487,71 +4730,64 @@ find_wrap:
_app_freeapplication (app_hash);
- _r_obj2_dereferenceex (ptr_app_object, 2);
+ _r_obj_dereferenceex (ptr_app, 2);
}
else
{
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
else if (listview_id == IDC_RULES_CUSTOM)
{
SIZE_T rule_idx = _r_listview_getitemlparam (hwnd, listview_id, i);
- PR_OBJECT ptr_rule_object = _app_getrulebyid (rule_idx);
+ PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
- if (!ptr_rule_object)
+ if (!ptr_rule)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
-
HASHER_MAP apps_checker;
- if (ptr_rule && !ptr_rule->is_readonly) // skip "read-only" rules
+ if (!ptr_rule->is_readonly) // skip "read-only" rules
{
- guids.insert (guids.end (), ptr_rule->guids.begin (), ptr_rule->guids.end ());
+ guids.insert (guids.end (), ptr_rule->guids->begin (), ptr_rule->guids->end ());
- for (auto &p : ptr_rule->apps)
- apps_checker[p.first] = TRUE;
+ for (auto it = ptr_rule->apps->begin (); it != ptr_rule->apps->end (); ++it)
+ apps_checker.emplace (it->first, TRUE);
SendDlgItemMessage (hwnd, listview_id, LVM_DELETEITEM, (WPARAM)i, 0);
rules_arr.at (rule_idx) = NULL;
- _r_obj2_dereferenceex (ptr_rule_object, 2);
+ _r_obj_dereferenceex (ptr_rule, 2);
}
else
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
- for (auto &p : apps_checker)
+ for (auto it = apps_checker.begin (); it != apps_checker.end (); ++it)
{
- SIZE_T app_hash = p.first;
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (!ptr_app_object)
+ if (!ptr_app)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ INT app_listview_id = _app_getlistview_id (ptr_app->type);
- if (ptr_app)
+ if (app_listview_id)
{
- INT app_listview_id = _app_getlistview_id (ptr_app->type);
+ INT item_pos = _app_getposition (hwnd, app_listview_id, app_hash);
- if (app_listview_id)
+ if (item_pos != INVALID_INT)
{
- INT item_pos = _app_getposition (hwnd, app_listview_id, app_hash);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (hwnd, app_listview_id, item_pos, app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (hwnd, app_listview_id, item_pos, app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
}
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
}
@@ -4560,7 +4796,7 @@ find_wrap:
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_destroyfilters_array (hengine, guids, __LINE__);
+ _wfp_destroyfilters_array (hengine, &guids, __LINE__);
_app_refreshstatus (hwnd, INVALID_INT);
_app_profile_save (NULL);
@@ -4573,19 +4809,17 @@ find_wrap:
BOOLEAN is_deleted = FALSE;
GUIDS_VEC guids;
- std::vector apps_list;
+ HASH_VEC apps_list;
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- SIZE_T app_hash = p.first;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app && !ptr_app->is_undeletable && (!_app_isappexists (ptr_app) || ((ptr_app->type != DataAppService && ptr_app->type != DataAppUWP) && !_app_isappused (ptr_app, app_hash))))
+ if (!ptr_app->is_undeletable && (!_app_isappexists (ptr_app) || ((ptr_app->type != DataAppService && ptr_app->type != DataAppUWP) && !_app_isappused (ptr_app, app_hash))))
{
INT app_listview_id = _app_getlistview_id (ptr_app->type);
@@ -4600,25 +4834,25 @@ find_wrap:
_app_timer_reset (hwnd, ptr_app);
_app_freenotify (app_hash, ptr_app);
- guids.insert (guids.end (), ptr_app->guids.begin (), ptr_app->guids.end ());
+ guids.insert (guids.end (), ptr_app->guids->begin (), ptr_app->guids->end ());
- apps_list.push_back (app_hash);
+ apps_list.emplace_back (app_hash);
is_deleted = TRUE;
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
- for (auto &p : apps_list)
- _app_freeapplication (p);
+ for (auto it = apps_list.begin (); it != apps_list.end (); ++it)
+ _app_freeapplication (*it);
if (is_deleted)
{
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_destroyfilters_array (hengine, guids, __LINE__);
+ _wfp_destroyfilters_array (hengine, &guids, __LINE__);
_app_refreshstatus (hwnd, INVALID_INT);
_app_profile_save (NULL);
@@ -4629,38 +4863,36 @@ find_wrap:
case IDM_PURGE_TIMERS:
{
- if (!_app_istimersactive () || app.ShowMessage (hwnd, MB_YESNO | MB_ICONEXCLAMATION, NULL, NULL, app.LocaleString (IDS_QUESTION_TIMERS, NULL).GetString ()) != IDYES)
+ if (!_app_istimersactive () || app.ShowMessage (hwnd, MB_YESNO | MB_ICONEXCLAMATION, NULL, NULL, app.LocaleString (IDS_QUESTION_TIMERS)) != IDYES)
break;
- OBJECTS_VEC rules;
+ OBJECTS_APP_VECTOR rules;
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app && _app_istimeractive (ptr_app))
+ if (_app_istimeractive (ptr_app))
{
_app_timer_reset (hwnd, ptr_app);
- rules.push_back (ptr_app_object);
+ rules.emplace_back (ptr_app);
}
else
{
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_create3filters (hengine, rules, __LINE__);
+ _wfp_create3filters (hengine, &rules, __LINE__);
- _app_freeobjects_vec (rules);
+ _app_freeapps_vec (&rules);
_app_profile_save (NULL);
@@ -4714,26 +4946,21 @@ find_wrap:
InetPton (ptr_log->af, RM_AD, &ptr_log->remote_addr);
ptr_log->remote_port = RP_AD;
- _r_str_alloc (&ptr_log->path, _r_str_length (app.GetBinaryPath ()), app.GetBinaryPath ());
- _r_str_alloc (&ptr_log->filter_name, _r_str_length (FN_AD), FN_AD);
+ ptr_log->path = _r_obj_createstring (app.GetBinaryPath ());
+ ptr_log->filter_name = _r_obj_createstring (FN_AD);
//_app_formataddress (ptr_log->af, ptr_log->protocol, &ptr_log->remote_addr, 0, &ptr_log->remote_fmt, FMTADDR_USE_PROTOCOL | FMTADDR_RESOLVE_HOST);
//_app_formataddress (ptr_log->af, ptr_log->protocol, &ptr_log->local_addr, 0, &ptr_log->local_fmt, FMTADDR_USE_PROTOCOL | FMTADDR_RESOLVE_HOST);
- PR_OBJECT ptr_app_object = _app_getappitem (config.my_hash);
+ PITEM_APP ptr_app = _app_getappitem (config.my_hash);
- if (ptr_app_object)
+ if (ptr_app)
{
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ ptr_app->last_notify = 0;
- if (ptr_app)
- {
- ptr_app->last_notify = 0;
+ _app_notifyadd (config.hnotification, ptr_log, ptr_app);
- _app_notifyadd (config.hnotification, ptr_log, ptr_app);
- }
-
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
break;
@@ -4756,8 +4983,8 @@ find_wrap:
IN_ADDR ipv4_remote = {0};
IN_ADDR ipv4_local = {0};
- rstring path = app.GetBinaryPath ();
- _r_path_ntpathfromdos (path);
+ PR_STRING ntPath = NULL;
+ _r_path_ntpathfromdos (app.GetBinaryPath (), &ntPath);
UINT16 layer_id = 0;
UINT64 filter_id = 0;
@@ -4789,15 +5016,23 @@ find_wrap:
for (UINT i = 0; i < 255; i++)
{
- RtlIpv4StringToAddress (_r_fmt (RM_AD2, i + 1), TRUE, &terminator, &ipv4_remote);
- RtlIpv4StringToAddress (_r_fmt (LM_AD2, i + 1), TRUE, &terminator, &ipv4_local);
+ WCHAR addressLocalString[256];
+ WCHAR addressRemoteString[256];
+
+ _r_str_printf (addressLocalString, RTL_NUMBER_OF (addressLocalString), LM_AD2, i + 1);
+ _r_str_printf (addressRemoteString, RTL_NUMBER_OF (addressRemoteString), RM_AD2, i + 1);
+
+ RtlIpv4StringToAddress (addressLocalString, TRUE, &terminator, &ipv4_local);
+ RtlIpv4StringToAddress (addressRemoteString, TRUE, &terminator, &ipv4_remote);
UINT32 remote_addr = _r_byteswap_ulong (ipv4_remote.S_un.S_addr);
UINT32 local_addr = _r_byteswap_ulong (ipv4_local.S_un.S_addr);
- _wfp_logcallback (flags, &ft, (UINT8*)path.GetString (), NULL, (SID*)config.pbuiltin_admins_sid, IPPROTO_TCP, FWP_IP_VERSION_V4, remote_addr, NULL, RP_AD, local_addr, NULL, LP_AD, layer_id, filter_id, FWP_DIRECTION_OUTBOUND, FALSE, FALSE);
+ _wfp_logcallback (flags, &ft, (UINT8*)_r_obj_getstring (ntPath), NULL, (SID*)config.pbuiltin_admins_sid, IPPROTO_TCP, FWP_IP_VERSION_V4, remote_addr, NULL, RP_AD, local_addr, NULL, LP_AD, layer_id, filter_id, FWP_DIRECTION_OUTBOUND, FALSE, FALSE);
}
+ SAFE_DELETE_REFERENCE (ntPath);
+
break;
}
#endif // _DEBUG || _APP_BETA
@@ -4830,16 +5065,16 @@ INT APIENTRY wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdL
for (INT i = 0; i < numargs; i++)
{
- if (_r_str_compare_length (arga[i], L"/install", 8) == 0)
+ if (_r_str_compare (arga[i], L"/install") == 0)
is_install = TRUE;
- else if (_r_str_compare_length (arga[i], L"/uninstall", 10) == 0)
+ else if (_r_str_compare (arga[i], L"/uninstall") == 0)
is_uninstall = TRUE;
- else if (_r_str_compare_length (arga[i], L"/silent", 7) == 0)
+ else if (_r_str_compare (arga[i], L"/silent") == 0)
is_silent = TRUE;
- else if (_r_str_compare_length (arga[i], L"/temp", 5) == 0)
+ else if (_r_str_compare (arga[i], L"/temp") == 0)
is_temporary = TRUE;
}
diff --git a/src/notifications.cpp b/src/notifications.cpp
index 0fe1c4b6..6b68febf 100644
--- a/src/notifications.cpp
+++ b/src/notifications.cpp
@@ -15,22 +15,14 @@ VOID _app_notifycreatewindow ()
BOOLEAN _app_notifycommand (HWND hwnd, INT button_id, time_t seconds)
{
SIZE_T app_hash = _app_notifyget_id (hwnd, FALSE);
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
-
- if (!ptr_app_object)
- return FALSE;
-
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
if (!ptr_app)
- {
- _r_obj2_dereference (ptr_app_object);
return FALSE;
- }
_app_freenotify (app_hash, ptr_app);
- OBJECTS_VEC rules;
+ OBJECTS_APP_VECTOR rules;
INT listview_id = _app_getlistview_id (ptr_app->type);
INT item_pos = _app_getposition (app.GetHWND (), listview_id, app_hash);
@@ -54,7 +46,7 @@ BOOLEAN _app_notifycommand (HWND hwnd, INT button_id, time_t seconds)
}
}
- rules.push_back (ptr_app_object);
+ rules.emplace_back (ptr_app);
}
else if (button_id == IDC_LATER_BTN)
{
@@ -70,9 +62,9 @@ BOOLEAN _app_notifycommand (HWND hwnd, INT button_id, time_t seconds)
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_create3filters (hengine, rules, __LINE__);
+ _wfp_create3filters (hengine, &rules, __LINE__);
- _app_freeobjects_vec (rules);
+ _app_freeapps_vec (&rules);
_app_refreshstatus (app.GetHWND (), listview_id);
_app_profile_save (NULL);
@@ -101,11 +93,7 @@ BOOLEAN _app_notifyadd (HWND hwnd, PITEM_LOG ptr_log, PITEM_APP ptr_app)
_app_getappicon (ptr_app, FALSE, NULL, &ptr_log->hicon);
// remove existing log item (if exists)
- if (ptr_app->pnotification)
- {
- _r_obj_dereference (ptr_app->pnotification);
- ptr_app->pnotification = NULL;
- }
+ SAFE_DELETE_REFERENCE (ptr_app->pnotification);
ptr_app->pnotification = (PITEM_LOG)_r_obj_reference (ptr_log);
@@ -124,11 +112,7 @@ VOID _app_freenotify (SIZE_T app_hash, PITEM_APP ptr_app)
if (ptr_app)
{
- if (ptr_app->pnotification)
- {
- _r_obj_dereference (ptr_app->pnotification);
- ptr_app->pnotification = NULL;
- }
+ SAFE_DELETE_REFERENCE (ptr_app->pnotification);
}
if (_app_notifyget_id (hwnd, FALSE) == app_hash)
@@ -143,27 +127,24 @@ SIZE_T _app_notifyget_id (HWND hwnd, BOOLEAN is_nearest)
if (is_nearest)
{
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- if (p.first == app_hash_current) // exclude current app from enumeration
+ if (!it->second || it->first == app_hash_current) // exclude current app from enumeration
continue;
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (!ptr_app_object)
- continue;
-
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app && ptr_app->pnotification)
+ if (ptr_app->pnotification)
{
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
- SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR)p.first);
- return p.first;
+ SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR)app_hash);
+
+ return app_hash;
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
SetWindowLongPtr (hwnd, GWLP_USERDATA, 0);
@@ -175,22 +156,15 @@ SIZE_T _app_notifyget_id (HWND hwnd, BOOLEAN is_nearest)
PITEM_LOG _app_notifyget_obj (SIZE_T app_hash)
{
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (ptr_app_object)
+ if (ptr_app)
{
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_LOG ptr_log = (PITEM_LOG)_r_obj_reference (ptr_app->pnotification);
- if (ptr_app)
- {
- PITEM_LOG ptr_log = (PITEM_LOG)_r_obj_reference (ptr_app->pnotification);
+ _r_obj_dereference (ptr_app);
- _r_obj2_dereference (ptr_app_object);
-
- return ptr_log;
- }
-
- _r_obj2_dereference (ptr_app_object);
+ return ptr_log;
}
return NULL;
@@ -201,73 +175,78 @@ BOOLEAN _app_notifyshow (HWND hwnd, PITEM_LOG ptr_log, BOOLEAN is_forced, BOOLEA
if (!app.ConfigGetBoolean (L"IsNotificationsEnabled", TRUE))
return FALSE;
- PR_OBJECT ptr_app_object = _app_getappitem (ptr_log->app_hash);
-
- if (!ptr_app_object)
- return FALSE;
-
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = _app_getappitem (ptr_log->app_hash);
if (!ptr_app)
- {
- _r_obj2_dereference (ptr_app_object);
return FALSE;
- }
- rstring is_signed;
- rstring empty_text = app.LocaleString (IDS_STATUS_EMPTY, NULL);
+ WCHAR windowTitle[128];
+ WCHAR dateString[128];
+ PR_STRING signatureString = NULL;
+ PR_STRING remoteAddressString;
+ PR_STRING remotePortString;
+ PR_STRING directionString;
+ PR_STRING localizedString = NULL;
if (app.ConfigGetBoolean (L"IsCertificatesEnabled", FALSE))
{
if (ptr_app->is_signed)
{
- PR_OBJECT ptr_signature_object = _app_getsignatureinfo (ptr_log->app_hash, ptr_app);
+ PR_STRING signatureCacheString = _app_getsignatureinfo (ptr_log->app_hash, ptr_app);
- if (ptr_signature_object)
+ if (signatureCacheString)
{
- if (ptr_signature_object->pdata)
- is_signed = (LPCWSTR)ptr_signature_object->pdata;
-
- else
- is_signed = app.LocaleString (IDS_SIGN_SIGNED, NULL);
-
- _r_obj2_dereference (ptr_signature_object);
+ _r_obj_movereference (&signatureString, signatureCacheString);
}
else
{
- is_signed = app.LocaleString (IDS_SIGN_SIGNED, NULL);
+ signatureString = _r_obj_createstring (app.LocaleString (IDS_SIGN_UNSIGNED));
}
}
else
{
- is_signed = app.LocaleString (IDS_SIGN_UNSIGNED, NULL);
+ signatureString = _r_obj_createstring (app.LocaleString (IDS_SIGN_UNSIGNED));
}
}
- SetWindowText (hwnd, _r_fmt (L"%s - " APP_NAME, app.LocaleString (IDS_NOTIFY_TITLE, NULL).GetString ()).GetString ());
+ _r_str_printf (windowTitle, RTL_NUMBER_OF (windowTitle), L"%s - " APP_NAME, app.LocaleString (IDS_NOTIFY_TITLE));
+
+ SetWindowText (hwnd, windowTitle);
SetWindowLongPtr (hwnd, GWLP_USERDATA, (LONG_PTR)ptr_log->app_hash);
SetWindowLongPtr (GetDlgItem (hwnd, IDC_HEADER_ID), GWLP_USERDATA, (LONG_PTR)ptr_log->hicon);
// print table text
- {
- LPWSTR remote_fmt = NULL;
- _app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, 0, &remote_fmt, FMTADDR_RESOLVE_HOST);
+ remoteAddressString = _app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, 0, FMTADDR_RESOLVE_HOST);
+ remotePortString = _app_formatport (ptr_log->remote_port, FALSE);
+ directionString = _app_getdirectionname (ptr_log->direction, ptr_log->is_loopback, TRUE);
- _r_ctrl_settabletext (hwnd, IDC_FILE_ID, app.LocaleString (IDS_NAME, L":").GetString (), IDC_FILE_TEXT, !_r_str_isempty (ptr_app->display_name) ? _r_path_getfilename (ptr_app->display_name) : empty_text.GetString ());
- _r_ctrl_settabletext (hwnd, IDC_SIGNATURE_ID, app.LocaleString (IDS_SIGNATURE, L":").GetString (), IDC_SIGNATURE_TEXT, is_signed.IsEmpty () ? empty_text.GetString () : is_signed.GetString ());
- _r_ctrl_settabletext (hwnd, IDC_ADDRESS_ID, app.LocaleString (IDS_ADDRESS, L":").GetString (), IDC_ADDRESS_TEXT, !_r_str_isempty (remote_fmt) ? remote_fmt : empty_text.GetString ());
- _r_ctrl_settabletext (hwnd, IDC_PORT_ID, app.LocaleString (IDS_PORT, L":").GetString (), IDC_PORT_TEXT, ptr_log->remote_port ? _app_formatport (ptr_log->remote_port, FALSE).GetString () : empty_text.GetString ());
- _r_ctrl_settabletext (hwnd, IDC_DIRECTION_ID, app.LocaleString (IDS_DIRECTION, L":").GetString (), IDC_DIRECTION_TEXT, _app_getdirectionname (ptr_log->direction, ptr_log->is_loopback, TRUE).GetString ());
- _r_ctrl_settabletext (hwnd, IDC_FILTER_ID, app.LocaleString (IDS_FILTER, L":").GetString (), IDC_FILTER_TEXT, !_r_str_isempty (ptr_log->filter_name) ? ptr_log->filter_name : empty_text.GetString ());
- _r_ctrl_settabletext (hwnd, IDC_DATE_ID, app.LocaleString (IDS_DATE, L":").GetString (), IDC_DATE_TEXT, _r_fmt_dateex (ptr_log->timestamp, FDTF_SHORTDATE | FDTF_LONGTIME).GetString ());
+ _r_format_dateex (dateString, RTL_NUMBER_OF (dateString), ptr_log->timestamp, FDTF_SHORTDATE | FDTF_LONGTIME);
- SAFE_DELETE_MEMORY (remote_fmt);
- }
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s:", app.LocaleString (IDS_NAME)));
+ _r_ctrl_settabletext (hwnd, IDC_FILE_ID, _r_obj_getstring (localizedString), IDC_FILE_TEXT, _r_path_getbasename (_r_obj_getstring (ptr_app->display_name)));
- _r_ctrl_settext (hwnd, IDC_RULES_BTN, app.LocaleString (IDS_TRAY_RULES, NULL).GetString ());
- _r_ctrl_settext (hwnd, IDC_ALLOW_BTN, app.LocaleString (IDS_ACTION_ALLOW, NULL).GetString ());
- _r_ctrl_settext (hwnd, IDC_BLOCK_BTN, app.LocaleString (IDS_ACTION_BLOCK, NULL).GetString ());
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s:", app.LocaleString (IDS_SIGNATURE)));
+ _r_ctrl_settabletext (hwnd, IDC_SIGNATURE_ID, _r_obj_getstring (localizedString), IDC_SIGNATURE_TEXT, _r_obj_getstringordefault (signatureString, SZ_EMPTY));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s:", app.LocaleString (IDS_ADDRESS)));
+ _r_ctrl_settabletext (hwnd, IDC_ADDRESS_ID, _r_obj_getstring (localizedString), IDC_ADDRESS_TEXT, _r_obj_getstringordefault (remoteAddressString, SZ_EMPTY));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s:", app.LocaleString (IDS_PORT)));
+ _r_ctrl_settabletext (hwnd, IDC_PORT_ID, _r_obj_getstring (localizedString), IDC_PORT_TEXT, _r_obj_getstringordefault (remotePortString, SZ_EMPTY));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s:", app.LocaleString (IDS_DIRECTION)));
+ _r_ctrl_settabletext (hwnd, IDC_DIRECTION_ID, _r_obj_getstring (localizedString), IDC_DIRECTION_TEXT, _r_obj_getstringordefault (directionString, SZ_EMPTY));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s:", app.LocaleString (IDS_FILTER)));
+ _r_ctrl_settabletext (hwnd, IDC_FILTER_ID, _r_obj_getstring (localizedString), IDC_FILTER_TEXT, _r_obj_getstringordefault (ptr_log->filter_name, SZ_EMPTY));
+
+ _r_obj_movereference (&localizedString, _r_format_string (L"%s:", app.LocaleString (IDS_DATE)));
+ _r_ctrl_settabletext (hwnd, IDC_DATE_ID, _r_obj_getstring (localizedString), IDC_DATE_TEXT, dateString);
+
+ _r_ctrl_settext (hwnd, IDC_RULES_BTN, app.LocaleString (IDS_TRAY_RULES));
+ _r_ctrl_settext (hwnd, IDC_ALLOW_BTN, app.LocaleString (IDS_ACTION_ALLOW));
+ _r_ctrl_settext (hwnd, IDC_BLOCK_BTN, app.LocaleString (IDS_ACTION_BLOCK));
_r_ctrl_enable (hwnd, IDC_RULES_BTN, !is_safety);
_r_ctrl_enable (hwnd, IDC_ALLOW_BTN, !is_safety);
@@ -275,10 +254,13 @@ BOOLEAN _app_notifyshow (HWND hwnd, PITEM_LOG ptr_log, BOOLEAN is_forced, BOOLEA
_r_ctrl_enable (hwnd, IDC_LATER_BTN, !is_safety);
if (is_safety)
+ {
SetTimer (hwnd, NOTIFY_TIMER_SAFETY_ID, NOTIFY_TIMER_SAFETY_TIMEOUT, NULL);
-
+ }
else
+ {
KillTimer (hwnd, NOTIFY_TIMER_SAFETY_ID);
+ }
_app_notifysetpos (hwnd, FALSE);
@@ -295,6 +277,13 @@ BOOLEAN _app_notifyshow (HWND hwnd, PITEM_LOG ptr_log, BOOLEAN is_forced, BOOLEA
ShowWindow (hwnd, is_forced ? SW_SHOW : SW_SHOWNA);
+ SAFE_DELETE_REFERENCE (signatureString);
+ SAFE_DELETE_REFERENCE (remoteAddressString);
+ SAFE_DELETE_REFERENCE (remotePortString);
+ SAFE_DELETE_REFERENCE (directionString);
+ SAFE_DELETE_REFERENCE (localizedString);
+ SAFE_DELETE_REFERENCE (ptr_app);
+
return TRUE;
}
@@ -319,17 +308,19 @@ VOID _app_notifyplaysound ()
if (RegOpenKeyEx (HKEY_CURRENT_USER, L"AppEvents\\Schemes\\Apps\\.Default\\" NOTIFY_SOUND_NAME L"\\.Default", 0, KEY_READ, &hkey) == ERROR_SUCCESS)
{
- rstring path = _r_reg_querystring (hkey, NULL);
+ PR_STRING path = _r_reg_querystring (hkey, NULL);
- if (!path.IsEmpty ())
+ if (path)
{
- path = _r_path_expand (path.GetString ());
+ PR_STRING expandedString = _r_str_expandenvironmentstring (path);
- if (_r_fs_exists (path.GetString ()))
- {
- _r_str_copy (notify_snd_path, RTL_NUMBER_OF (notify_snd_path), path.GetString ());
- result = TRUE;
- }
+ if (expandedString)
+ _r_obj_movereference (&path, expandedString);
+
+ _r_str_copy (notify_snd_path, RTL_NUMBER_OF (notify_snd_path), _r_obj_getstring (path));
+ _r_obj_dereference (path);
+
+ result = TRUE;
}
RegCloseKey (hkey);
@@ -340,7 +331,7 @@ VOID _app_notifyplaysound ()
result = TRUE;
}
- if (!result || !_r_fs_exists (notify_snd_path) || !PlaySound (notify_snd_path, NULL, SND_ASYNC | SND_NODEFAULT | SND_NOWAIT | SND_FILENAME | SND_SENTRY))
+ if (!result || !PlaySound (notify_snd_path, NULL, SND_ASYNC | SND_NODEFAULT | SND_NOWAIT | SND_FILENAME | SND_SENTRY))
PlaySound (NOTIFY_SOUND_NAME, NULL, SND_ASYNC | SND_NODEFAULT | SND_NOWAIT | SND_SENTRY);
}
@@ -395,7 +386,7 @@ VOID _app_notifysetpos (HWND hwnd, BOOLEAN is_forced)
APPBARDATA abd;
abd.cbSize = sizeof (abd);
- if ((BOOL)SHAppBarMessage (ABM_GETTASKBARPOS, &abd))
+ if (SHAppBarMessage (ABM_GETTASKBARPOS, &abd))
{
INT border_x = _r_dc_getsystemmetrics (hwnd, SM_CXBORDER);
@@ -535,11 +526,11 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
if (htip)
{
- _r_ctrl_settip (htip, hwnd, IDC_FILE_TEXT, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_RULES_BTN, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_ALLOW_BTN, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_BLOCK_BTN, LPSTR_TEXTCALLBACK);
- _r_ctrl_settip (htip, hwnd, IDC_LATER_BTN, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_FILE_TEXT, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_RULES_BTN, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_ALLOW_BTN, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_BLOCK_BTN, LPSTR_TEXTCALLBACK);
+ _r_ctrl_settiptext (htip, hwnd, IDC_LATER_BTN, LPSTR_TEXTCALLBACK);
}
break;
@@ -630,7 +621,7 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
INT wnd_height = _r_calc_rectheight (INT, &clientRect);
SetRect (&clientRect, 0, wnd_height - _r_dc_getdpi (hwnd, _R_SIZE_FOOTERHEIGHT), wnd_width, wnd_height);
- _r_dc_fillrect (hdc, &clientRect, GetSysColor (COLOR_3DFACE));
+ _r_dc_fillrect (hdc, &clientRect, GetSysColor (COLOR_BTNFACE));
for (INT i = 0; i < wnd_width; i++)
SetPixelV (hdc, i, clientRect.top, GetSysColor (COLOR_APPWORKSPACE));
@@ -685,10 +676,10 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
DrawGradient (drawInfo->hDC, &drawInfo->rcItem, app.ConfigGetUlong (L"NotificationBackground1", NOTIFY_GRADIENT_1), app.ConfigGetUlong (L"NotificationBackground2", NOTIFY_GRADIENT_2), GRADIENT_FILL_RECT_H);
// draw title text
- WCHAR text[128] = {0};
- _r_str_printf (text, RTL_NUMBER_OF (text), app.LocaleString (IDS_NOTIFY_HEADER, NULL).GetString (), APP_NAME);
+ WCHAR text[128];
+ _r_str_printf (text, RTL_NUMBER_OF (text), app.LocaleString (IDS_NOTIFY_HEADER), APP_NAME);
- COLORREF clr_prev = SetTextColor (drawInfo->hDC, GetSysColor (COLOR_WINDOW));
+ COLORREF clr_prev = SetTextColor (drawInfo->hDC, RGB (255, 255, 255));
DrawTextEx (drawInfo->hDC, text, (INT)_r_str_length (text), &textRect, DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS | DT_NOCLIP | DT_NOPREFIX, NULL);
SetTextColor (drawInfo->hDC, clr_prev);
@@ -761,13 +752,13 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
if (ctrl_id == IDC_RULES_BTN)
{
- AppendMenu (hsubmenu, MF_STRING, IDM_DISABLENOTIFICATIONS, app.LocaleString (IDS_DISABLENOTIFICATIONS, NULL).GetString ());
+ AppendMenu (hsubmenu, MF_STRING, IDM_DISABLENOTIFICATIONS, app.LocaleString (IDS_DISABLENOTIFICATIONS));
_app_generate_rulesmenu (hsubmenu, _app_notifyget_id (hwnd, FALSE));
}
else if (ctrl_id == IDC_ALLOW_BTN)
{
- AppendMenu (hsubmenu, MF_STRING, IDC_ALLOW_BTN, app.LocaleString (IDS_ACTION_ALLOW, NULL).GetString ());
+ AppendMenu (hsubmenu, MF_STRING, IDC_ALLOW_BTN, app.LocaleString (IDS_ACTION_ALLOW));
AppendMenu (hsubmenu, MF_SEPARATOR, 0, NULL);
_app_generate_timermenu (hsubmenu, 0);
@@ -821,7 +812,13 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
nmlvgit.iItem = item_id;
nmlvgit.lParam = 0;
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), _app_gettooltip (app.GetHWND (), &nmlvgit).GetString ());
+ PR_STRING string = _app_gettooltip (app.GetHWND (), &nmlvgit);
+
+ if (string)
+ {
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), string->Buffer);
+ _r_obj_dereference (string);
+ }
}
}
@@ -830,23 +827,29 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
}
else if (ctrl_id == IDC_RULES_BTN)
{
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_NOTIFY_TOOLTIP, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_NOTIFY_TOOLTIP));
}
else if (ctrl_id == IDC_ALLOW_BTN)
{
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_ACTION_ALLOW_HINT, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_ACTION_ALLOW_HINT));
}
else if (ctrl_id == IDC_BLOCK_BTN)
{
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_ACTION_BLOCK_HINT, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_ACTION_BLOCK_HINT));
}
else if (ctrl_id == IDC_LATER_BTN)
{
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_ACTION_LATER_HINT, NULL).GetString ());
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), app.LocaleString (IDS_ACTION_LATER_HINT));
}
else
{
- _r_str_copy (buffer, RTL_NUMBER_OF (buffer), _r_ctrl_gettext (hwnd, ctrl_id).GetString ());
+ PR_STRING string = _r_ctrl_gettext (hwnd, ctrl_id);
+
+ if (string)
+ {
+ _r_str_copy (buffer, RTL_NUMBER_OF (buffer), _r_obj_getstring (string));
+ _r_obj_dereference (string);
+ }
}
if (!_r_str_isempty (buffer))
@@ -866,99 +869,89 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
if ((LOWORD (wparam) >= IDX_RULES_SPECIAL && LOWORD (wparam) <= IDX_RULES_SPECIAL + (INT)rules_arr.size ()))
{
SIZE_T rule_idx = (LOWORD (wparam) - IDX_RULES_SPECIAL);
- PR_OBJECT ptr_rule_object = _app_getrulebyid (rule_idx);
+ PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
- if (!ptr_rule_object)
+ if (!ptr_rule)
return FALSE;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_LOG ptr_log = _app_notifyget_obj (_app_notifyget_id (hwnd, FALSE));
- if (ptr_rule)
+ if (ptr_log)
{
- PITEM_LOG ptr_log = _app_notifyget_obj (_app_notifyget_id (hwnd, FALSE));
-
- if (ptr_log)
+ if (ptr_log->app_hash && !(ptr_rule->is_forservices && (ptr_log->app_hash == config.ntoskrnl_hash || ptr_log->app_hash == config.svchost_hash)))
{
- if (ptr_log->app_hash && !(ptr_rule->is_forservices && (ptr_log->app_hash == config.ntoskrnl_hash || ptr_log->app_hash == config.svchost_hash)))
+ PITEM_APP ptr_app = _app_getappitem (ptr_log->app_hash);
+
+ if (ptr_app)
{
- PR_OBJECT ptr_app_object = _app_getappitem (ptr_log->app_hash);
+ _app_freenotify (ptr_log->app_hash, ptr_app);
- if (ptr_app_object)
+ BOOLEAN is_remove = ptr_rule->is_enabled && (ptr_rule->apps->find (ptr_log->app_hash) != ptr_rule->apps->end ());
+
+ if (is_remove)
{
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ ptr_rule->apps->erase (ptr_log->app_hash);
- if (ptr_app)
- {
- _app_freenotify (ptr_log->app_hash, ptr_app);
-
- BOOLEAN is_remove = ptr_rule->is_enabled && (ptr_rule->apps.find (ptr_log->app_hash) != ptr_rule->apps.end ());
-
- if (is_remove)
- {
- ptr_rule->apps.erase (ptr_log->app_hash);
-
- if (ptr_rule->apps.empty ())
- _app_ruleenable (ptr_rule, FALSE);
- }
- else
- {
- ptr_rule->apps[ptr_log->app_hash] = TRUE;
- _app_ruleenable (ptr_rule, TRUE);
- }
-
- INT listview_id = (INT)_r_tab_getlparam (app.GetHWND (), IDC_TAB, INVALID_INT);
- INT app_listview_id = _app_getlistview_id (ptr_app->type);
- INT rule_listview_id = _app_getlistview_id (ptr_rule->type);
-
- {
- INT item_pos = _app_getposition (app.GetHWND (), app_listview_id, ptr_log->app_hash);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (app.GetHWND (), app_listview_id, item_pos, ptr_log->app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
- }
-
- {
- INT item_pos = _app_getposition (app.GetHWND (), rule_listview_id, rule_idx);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setruleiteminfo (app.GetHWND (), rule_listview_id, item_pos, ptr_rule, FALSE);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
- }
-
- OBJECTS_VEC rules;
- rules.push_back (ptr_rule_object);
-
- HANDLE hengine = _wfp_getenginehandle ();
-
- if (hengine)
- _wfp_create4filters (hengine, rules, __LINE__);
-
- if (listview_id == app_listview_id || listview_id == rule_listview_id)
- {
- _app_listviewsort (app.GetHWND (), listview_id, INVALID_INT, FALSE);
- _r_listview_redraw (app.GetHWND (), listview_id, INVALID_INT);
- }
-
- _app_refreshstatus (app.GetHWND (), listview_id);
- _app_profile_save (NULL);
- }
-
- _r_obj2_dereference (ptr_app_object);
+ if (ptr_rule->apps->empty ())
+ _app_ruleenable (ptr_rule, FALSE);
+ }
+ else
+ {
+ ptr_rule->apps->emplace (ptr_log->app_hash, TRUE);
+ _app_ruleenable (ptr_rule, TRUE);
}
- }
- _r_obj_dereference (ptr_log);
+ INT listview_id = (INT)_r_tab_getlparam (app.GetHWND (), IDC_TAB, INVALID_INT);
+ INT app_listview_id = _app_getlistview_id (ptr_app->type);
+ INT rule_listview_id = _app_getlistview_id (ptr_rule->type);
+
+ {
+ INT item_pos = _app_getposition (app.GetHWND (), app_listview_id, ptr_log->app_hash);
+
+ if (item_pos != INVALID_INT)
+ {
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (app.GetHWND (), app_listview_id, item_pos, ptr_log->app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
+ }
+ }
+
+ {
+ INT item_pos = _app_getposition (app.GetHWND (), rule_listview_id, rule_idx);
+
+ if (item_pos != INVALID_INT)
+ {
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setruleiteminfo (app.GetHWND (), rule_listview_id, item_pos, ptr_rule, FALSE);
+ _r_fastlock_releaseshared (&lock_checkbox);
+ }
+ }
+
+ OBJECTS_RULE_VECTOR rules;
+ rules.emplace_back (ptr_rule);
+
+ HANDLE hengine = _wfp_getenginehandle ();
+
+ if (hengine)
+ _wfp_create4filters (hengine, &rules, __LINE__);
+
+ if (listview_id == app_listview_id || listview_id == rule_listview_id)
+ {
+ _app_listviewsort (app.GetHWND (), listview_id, INVALID_INT, FALSE);
+ _r_listview_redraw (app.GetHWND (), listview_id, INVALID_INT);
+ }
+
+ _app_refreshstatus (app.GetHWND (), listview_id);
+ _app_profile_save (NULL);
+
+ _r_obj_dereference (ptr_app);
+ }
}
+
+ _r_obj_dereference (ptr_log);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
return FALSE;
}
@@ -988,23 +981,18 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
if (ptr_log)
{
- PR_OBJECT ptr_app_object = _app_getappitem (ptr_log->app_hash);
+ PITEM_APP ptr_app = _app_getappitem (ptr_log->app_hash);
- if (ptr_app_object)
+ if (ptr_app)
{
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ INT listview_id = _app_getlistview_id (ptr_app->type);
- if (ptr_app)
- {
- INT listview_id = _app_getlistview_id (ptr_app->type);
+ if (listview_id)
+ _app_showitem (app.GetHWND (), listview_id, _app_getposition (app.GetHWND (), listview_id, ptr_log->app_hash), INVALID_INT);
- if (listview_id)
- _app_showitem (app.GetHWND (), listview_id, _app_getposition (app.GetHWND (), listview_id, ptr_log->app_hash), INVALID_INT);
+ _r_wnd_toggle (app.GetHWND (), TRUE);
- _r_wnd_toggle (app.GetHWND (), TRUE);
- }
-
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
_r_obj_dereference (ptr_log);
@@ -1058,49 +1046,51 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
case IDM_OPENRULESEDITOR:
{
- PITEM_RULE ptr_rule = new ITEM_RULE;
- PR_OBJECT ptr_rule_object = _r_obj2_allocateex (ptr_rule, &_app_dereferencerule);
+ PITEM_APP ptr_app;
+ PITEM_RULE ptr_rule;
+ PITEM_LOG ptr_log;
+ SIZE_T app_hash;
- SIZE_T app_hash = 0;
- PITEM_LOG ptr_log = _app_notifyget_obj (_app_notifyget_id (hwnd, FALSE));
+ ptr_rule = (PITEM_RULE)_r_obj_allocateex (sizeof (ITEM_RULE), &_app_dereferencerule);
+
+ // initialize stl
+ ptr_rule->apps = new HASHER_MAP;
+ ptr_rule->guids = new GUIDS_VEC;
+
+ ptr_log = _app_notifyget_obj (_app_notifyget_id (hwnd, FALSE));
if (ptr_log)
{
app_hash = ptr_log->app_hash;
- ptr_rule->apps[app_hash] = TRUE;
+ ptr_rule->apps->emplace (app_hash, TRUE);
ptr_rule->protocol = ptr_log->protocol;
ptr_rule->direction = ptr_log->direction;
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ ptr_app = _app_getappitem (app_hash);
- if (ptr_app_object)
+ if (ptr_app)
{
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app)
- _app_freenotify (app_hash, ptr_app);
-
- _r_obj2_dereference (ptr_app_object);
+ _app_freenotify (app_hash, ptr_app);
+ _r_obj_dereference (ptr_app);
}
- LPWSTR rule = NULL;
+ PR_STRING remoteRuleString;
- if (_app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, ptr_log->remote_port, &rule, FMTADDR_AS_RULE))
+ remoteRuleString = _app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, ptr_log->remote_port, FMTADDR_AS_RULE);
+
+ if (remoteRuleString)
{
- SIZE_T len = _r_str_length (rule);
+ ptr_rule->name = _r_obj_createstring2 (remoteRuleString);
- _r_str_alloc (&ptr_rule->pname, len, rule);
- _r_str_alloc (&ptr_rule->prule_remote, len, rule);
+ _r_obj_movereference (&ptr_rule->rule_remote, remoteRuleString);
}
- SAFE_DELETE_MEMORY (rule);
-
_r_obj_dereference (ptr_log);
}
else
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
break;
}
@@ -1109,10 +1099,10 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
_app_ruleenable (ptr_rule, TRUE);
- if (DialogBoxParam (NULL, MAKEINTRESOURCE (IDD_EDITOR), app.GetHWND (), &EditorProc, (LPARAM)ptr_rule_object))
+ if (DialogBoxParam (NULL, MAKEINTRESOURCE (IDD_EDITOR), app.GetHWND (), &EditorProc, (LPARAM)ptr_rule))
{
SIZE_T rule_idx = rules_arr.size ();
- rules_arr.push_back (_r_obj2_reference (ptr_rule_object));
+ rules_arr.emplace_back ((PITEM_RULE)_r_obj_reference (ptr_rule));
INT listview_id = (INT)_r_tab_getlparam (app.GetHWND (), IDC_TAB, INVALID_INT);
@@ -1125,7 +1115,7 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
_r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_additem (app.GetHWND (), rules_listview_id, item_id, 0, ptr_rule->pname, _app_getruleicon (ptr_rule), _app_getrulegroup (ptr_rule), rule_idx);
+ _r_listview_additem (app.GetHWND (), rules_listview_id, item_id, 0, _r_obj_getstringorempty (ptr_rule->name), _app_getruleicon (ptr_rule), _app_getrulegroup (ptr_rule), rule_idx);
_app_setruleiteminfo (app.GetHWND (), rules_listview_id, item_id, ptr_rule, TRUE);
_r_fastlock_releaseshared (&lock_checkbox);
@@ -1135,40 +1125,35 @@ INT_PTR CALLBACK NotificationProc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lp
}
// set app information
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ ptr_app = _app_getappitem (app_hash);
- if (ptr_app_object)
+ if (ptr_app)
{
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ INT app_listview_id = _app_getlistview_id (ptr_app->type);
- if (ptr_app)
+ if (app_listview_id)
{
- INT app_listview_id = _app_getlistview_id (ptr_app->type);
+ INT item_pos = _app_getposition (app.GetHWND (), app_listview_id, app_hash);
- if (app_listview_id)
+ if (item_pos != INVALID_INT)
{
- INT item_pos = _app_getposition (app.GetHWND (), app_listview_id, app_hash);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setappiteminfo (app.GetHWND (), app_listview_id, item_pos, app_hash, ptr_app);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
-
- if (app_listview_id == listview_id)
- _app_listviewsort (app.GetHWND (), listview_id, INVALID_INT, FALSE);
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setappiteminfo (app.GetHWND (), app_listview_id, item_pos, app_hash, ptr_app);
+ _r_fastlock_releaseshared (&lock_checkbox);
}
+
+ if (app_listview_id == listview_id)
+ _app_listviewsort (app.GetHWND (), listview_id, INVALID_INT, FALSE);
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
_app_refreshstatus (app.GetHWND (), listview_id);
_app_profile_save (NULL);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
break;
}
diff --git a/src/profile.cpp b/src/profile.cpp
index 9ec80915..e2ccb31b 100644
--- a/src/profile.cpp
+++ b/src/profile.cpp
@@ -5,78 +5,72 @@
LONG_PTR _app_getappinfo (SIZE_T app_hash, ENUM_INFO_DATA info_key)
{
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ LONG_PTR result;
+ PITEM_APP ptr_app;
- if (!ptr_app_object)
+ ptr_app = _app_getappitem (app_hash);
+
+ if (!ptr_app)
return 0;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
- LONG_PTR result = 0;
+ result = 0;
- if (ptr_app)
+ if (info_key == InfoPath)
{
- if (info_key == InfoPath)
- {
- if (!_r_str_isempty (ptr_app->real_path))
- result = (LONG_PTR)ptr_app->real_path;
- }
- else if (info_key == InfoName)
- {
- if (!_r_str_isempty (ptr_app->display_name))
- result = (LONG_PTR)ptr_app->display_name;
+ if (!_r_str_isempty (ptr_app->real_path))
+ result = (LONG_PTR)ptr_app->real_path->Buffer;
+ }
+ else if (info_key == InfoName)
+ {
+ if (!_r_str_isempty (ptr_app->display_name))
+ result = (LONG_PTR)ptr_app->display_name->Buffer;
- else if (!_r_str_isempty (ptr_app->original_path))
- result = (LONG_PTR)ptr_app->original_path;
- }
- else if (info_key == InfoTimestampPtr)
- {
- result = (LONG_PTR)&ptr_app->timestamp;
- }
- else if (info_key == InfoTimerPtr)
- {
- result = (LONG_PTR)&ptr_app->timer;
- }
- else if (info_key == InfoIconId)
- {
- result = (LONG_PTR)ptr_app->icon_id;
- }
- else if (info_key == InfoListviewId)
- {
- result = (LONG_PTR)_app_getlistview_id (ptr_app->type);
- }
- else if (info_key == InfoIsSilent)
- {
- result = ptr_app->is_silent ? TRUE : FALSE;
- }
- else if (info_key == InfoIsUndeletable)
- {
- result = ptr_app->is_undeletable ? TRUE : FALSE;
- }
+ else if (!_r_str_isempty (ptr_app->original_path))
+ result = (LONG_PTR)ptr_app->original_path->Buffer;
+ }
+ else if (info_key == InfoTimestampPtr)
+ {
+ result = (LONG_PTR)&ptr_app->timestamp;
+ }
+ else if (info_key == InfoTimerPtr)
+ {
+ result = (LONG_PTR)&ptr_app->timer;
+ }
+ else if (info_key == InfoIconId)
+ {
+ result = (LONG_PTR)ptr_app->icon_id;
+ }
+ else if (info_key == InfoListviewId)
+ {
+ result = (LONG_PTR)_app_getlistview_id (ptr_app->type);
+ }
+ else if (info_key == InfoIsSilent)
+ {
+ result = ptr_app->is_silent ? TRUE : FALSE;
+ }
+ else if (info_key == InfoIsUndeletable)
+ {
+ result = ptr_app->is_undeletable ? TRUE : FALSE;
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
return result;
}
BOOLEAN _app_setappinfo (SIZE_T app_hash, ENUM_INFO_DATA info_key, LONG_PTR info_value)
{
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- if (!ptr_app_object)
+ if (!ptr_app)
return FALSE;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app)
+ if (info_key == InfoIsUndeletable)
{
- if (info_key == InfoIsUndeletable)
- {
- ptr_app->is_undeletable = info_value ? TRUE : FALSE;
- }
+ ptr_app->is_undeletable = info_value ? TRUE : FALSE;
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
return TRUE;
}
@@ -86,94 +80,108 @@ SIZE_T _app_addapplication (HWND hwnd, LPCWSTR path, time_t timestamp, time_t ti
if (_r_str_isempty (path) || PathIsDirectory (path))
return 0;
- // prevent possible duplicate apps entries with short path (issue #640)
WCHAR path_full[1024];
+ PITEM_APP ptr_app;
+ PR_STRING signatureString;
+ SIZE_T app_length;
+ SIZE_T app_hash;
+ BOOLEAN is_ntoskrnl;
- if (_r_str_find (path, INVALID_SIZE_T, L'~', 0) != INVALID_SIZE_T)
+ app_length = _r_str_length (path);
+
+ // prevent possible duplicate apps entries with short path (issue #640)
+ if (_r_str_findchar (path, app_length, L'~', TRUE) != INVALID_SIZE_T)
{
if (GetLongPathName (path, path_full, RTL_NUMBER_OF (path_full)))
+ {
path = path_full;
+ app_length = _r_str_length (path_full);
+ }
}
- SIZE_T app_length = _r_str_length (path);
- SIZE_T app_hash = _r_str_hash (path);
+ app_hash = _r_str_hash (path);
if (_app_isappfound (app_hash))
return app_hash; // already exists
- PITEM_APP ptr_app = new ITEM_APP;
-
- BOOLEAN is_ntoskrnl = (app_hash == config.ntoskrnl_hash);
-
- rstring real_path;
+ ptr_app = (PITEM_APP)_r_obj_allocateex (sizeof (ITEM_APP), &_app_dereferenceapp);
+ is_ntoskrnl = (app_hash == config.ntoskrnl_hash);
if (_r_str_compare_length (path, L"\\device\\", 8) == 0) // device path
{
- real_path = path;
-
+ ptr_app->real_path = _r_obj_createstring (path);
ptr_app->type = DataAppDevice;
}
else if (_r_str_compare_length (path, L"S-1-", 4) == 0) // windows store (win8+)
{
+ _app_item_get (DataAppUWP, app_hash, NULL, &ptr_app->real_path, timestamp ? NULL : ×tamp, NULL);
ptr_app->type = DataAppUWP;
-
- _app_item_get (DataAppUWP, app_hash, NULL, &real_path, timestamp ? NULL : ×tamp, NULL);
- }
- else if (PathIsNetworkPath (path)) // network path
- {
- real_path = path;
-
- ptr_app->type = DataAppNetwork;
}
else
{
- real_path = path;
-
- if (!is_ntoskrnl && _r_str_find (real_path.GetString (), real_path.GetLength (), OBJ_NAME_PATH_SEPARATOR, 0) == INVALID_SIZE_T)
+ if (!is_ntoskrnl && _r_str_findchar (path, app_length, OBJ_NAME_PATH_SEPARATOR, TRUE) == INVALID_SIZE_T)
{
- if (_app_item_get (DataAppService, app_hash, NULL, &real_path, timestamp ? NULL : ×tamp, NULL))
+ if (_app_item_get (DataAppService, app_hash, NULL, &ptr_app->real_path, timestamp ? NULL : ×tamp, NULL))
+ {
ptr_app->type = DataAppService;
-
+ }
else
+ {
+ ptr_app->real_path = _r_obj_createstring (path);
ptr_app->type = DataAppPico;
+ }
}
else
{
- ptr_app->type = DataAppRegular;
-
if (is_ntoskrnl) // "System" process
- real_path = _r_path_expand (PATH_NTOSKRNL);
+ {
+ ptr_app->real_path = _r_obj_createstring2 (config.ntoskrnl_path);
+ }
+ else
+ {
+ ptr_app->real_path = _r_obj_createstring (path);
+ }
+
+ if (PathIsNetworkPath (path))
+ {
+ ptr_app->type = DataAppNetwork; // network path
+ }
+ else
+ {
+ ptr_app->type = DataAppRegular;
+ }
}
}
- if (!real_path.IsEmpty () && ptr_app->type == DataAppRegular)
+ if (!_r_str_isempty (ptr_app->real_path) && ptr_app->type == DataAppRegular)
{
- DWORD dwAttr = GetFileAttributes (real_path.GetString ());
+ DWORD dwAttr = GetFileAttributes (_r_obj_getstring (ptr_app->real_path));
- ptr_app->is_system = is_ntoskrnl || (dwAttr & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM || (_r_str_compare_length (real_path.GetString (), config.windows_dir, config.wd_length) == 0);
+ ptr_app->is_system = is_ntoskrnl || (dwAttr & FILE_ATTRIBUTE_SYSTEM) != 0 || (_r_str_compare_length (_r_obj_getstring (ptr_app->real_path), config.windows_dir, config.wd_length) == 0);
}
- _r_str_alloc (&ptr_app->original_path, app_length, path);
- _r_str_alloc (&ptr_app->real_path, real_path.GetLength (), real_path.GetString ());
+ ptr_app->original_path = _r_obj_createstringex (path, app_length * sizeof (WCHAR));
if (is_ntoskrnl && !_r_str_isempty (ptr_app->original_path))
{
_r_str_tolower (ptr_app->original_path);
- ptr_app->original_path[0] = _r_str_upper (ptr_app->original_path[0]); // fix "System" lowercase
+ ptr_app->original_path->Buffer[0] = _r_str_upper (ptr_app->original_path->Buffer[0]); // fix "System" lowercase
}
// get display name
- _app_getdisplayname (app_hash, ptr_app, &ptr_app->display_name);
+ _r_obj_movereference (&ptr_app->display_name, _app_getdisplayname (app_hash, ptr_app));
// get signature information
if (app.ConfigGetBoolean (L"IsCertificatesEnabled", FALSE))
{
- PR_OBJECT ptr_signer_object = _app_getsignatureinfo (app_hash, ptr_app);
+ signatureString = _app_getsignatureinfo (app_hash, ptr_app);
- if (ptr_signer_object)
- _r_obj2_dereference (ptr_signer_object);
+ if (signatureString)
+ _r_obj_dereference (signatureString);
}
+ ptr_app->guids = new GUIDS_VEC; // initialize stl
+
ptr_app->is_enabled = is_enabled;
ptr_app->is_silent = is_silent;
@@ -185,7 +193,7 @@ SIZE_T _app_addapplication (HWND hwnd, LPCWSTR path, time_t timestamp, time_t ti
ptr_app->is_undeletable = TRUE;
// insert object into the map
- apps[app_hash] = _r_obj2_allocateex (ptr_app, &_app_dereferenceapp);
+ apps.emplace (app_hash, ptr_app);
// insert item
if (hwnd)
@@ -196,7 +204,7 @@ SIZE_T _app_addapplication (HWND hwnd, LPCWSTR path, time_t timestamp, time_t ti
{
_r_fastlock_acquireshared (&lock_checkbox);
- _r_listview_additem (hwnd, listview_id, 0, 0, ptr_app->display_name, ptr_app->icon_id, _app_getappgroup (app_hash, ptr_app), app_hash);
+ _r_listview_additem (hwnd, listview_id, 0, 0, _r_obj_getstringordefault (ptr_app->display_name, SZ_EMPTY), ptr_app->icon_id, _app_getappgroup (app_hash, ptr_app), app_hash);
_app_setappiteminfo (hwnd, listview_id, 0, app_hash, ptr_app);
_r_fastlock_releaseshared (&lock_checkbox);
@@ -206,10 +214,15 @@ SIZE_T _app_addapplication (HWND hwnd, LPCWSTR path, time_t timestamp, time_t ti
return app_hash;
}
-PR_OBJECT _app_getappitem (SIZE_T app_hash)
+PITEM_APP _app_getappitem (SIZE_T app_hash)
{
if (_app_isappfound (app_hash))
- return _r_obj2_reference (apps[app_hash]);
+ {
+ PVOID pdata = apps.at (app_hash);
+
+ if (pdata)
+ return (PITEM_APP)_r_obj_reference (pdata);
+ }
return NULL;
}
@@ -218,51 +231,47 @@ PITEM_APP_HELPER _app_getapphelperitem (SIZE_T app_hash)
{
if (_app_isapphelperfound (app_hash))
{
- PVOID ptr = apps_helper[app_hash];
+ PVOID pdata = apps_helper.at (app_hash);
- if (ptr)
- return (PITEM_APP_HELPER)_r_obj_reference (ptr);
+ if (pdata)
+ return (PITEM_APP_HELPER)_r_obj_reference (pdata);
}
return NULL;
}
-PR_OBJECT _app_getrulebyid (SIZE_T idx)
+PITEM_RULE _app_getrulebyid (SIZE_T idx)
{
if (idx != INVALID_SIZE_T && idx < rules_arr.size ())
{
- PR_OBJECT ptr_rule_object = rules_arr.at (idx);
+ PITEM_RULE pdata = rules_arr.at (idx);
- if (ptr_rule_object)
- return _r_obj2_reference (ptr_rule_object);
+ if (pdata)
+ return (PITEM_RULE)_r_obj_reference (pdata);
}
return NULL;
}
-PR_OBJECT _app_getrulebyhash (SIZE_T rule_hash)
+PITEM_RULE _app_getrulebyhash (SIZE_T rule_hash)
{
if (!rule_hash)
return NULL;
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
- if (!p)
+ if (!*it)
continue;
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule)
+ if (ptr_rule->is_readonly)
{
- if (ptr_rule->is_readonly)
- {
- if (_r_str_hash (ptr_rule->pname) == rule_hash)
- return ptr_rule_object;
- }
+ if (_r_str_hash (ptr_rule->name) == rule_hash)
+ return ptr_rule;
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
return NULL;
@@ -272,10 +281,10 @@ PITEM_NETWORK _app_getnetworkitem (SIZE_T network_hash)
{
if (network_map.find (network_hash) != network_map.end ())
{
- PVOID ptr = network_map[network_hash];
+ PVOID pdata = network_map.at (network_hash);
- if (ptr)
- return (PITEM_NETWORK)_r_obj_reference (ptr);
+ if (pdata)
+ return (PITEM_NETWORK)_r_obj_reference (pdata);
}
return NULL;
@@ -301,8 +310,13 @@ SIZE_T _app_getnetworkapp (SIZE_T network_hash)
PITEM_LOG _app_getlogitem (SIZE_T idx)
{
- if (idx != INVALID_SIZE_T && idx < log_arr.size () && log_arr.at (idx) != NULL)
- return (PITEM_LOG)_r_obj_reference (log_arr.at (idx));
+ if (idx != INVALID_SIZE_T && idx < log_arr.size ())
+ {
+ PVOID pdata = log_arr.at (idx);
+
+ if (pdata)
+ return (PITEM_LOG)_r_obj_reference (pdata);
+ }
return NULL;
}
@@ -325,58 +339,53 @@ SIZE_T _app_getlogapp (SIZE_T idx)
COLORREF _app_getappcolor (INT listview_id, SIZE_T app_hash)
{
- rstring color_value;
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
-
- if (!ptr_app_object)
+ if (!ptr_app)
return 0;
+ LPCWSTR colorValue = NULL;
+
BOOLEAN is_profilelist = (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_RULES_CUSTOM);
BOOLEAN is_networklist = (listview_id >= IDC_NETWORK && listview_id <= IDC_LOG);
BOOLEAN is_editorlist = (listview_id == IDC_RULE_APPS_ID);
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ if (app.ConfigGetBoolean (L"IsHighlightInvalid", TRUE, L"colors") && !_app_isappexists (ptr_app))
+ colorValue = L"ColorInvalid";
- if (ptr_app)
- {
- if (app.ConfigGetBoolean (L"IsHighlightInvalid", TRUE, L"colors") && !_app_isappexists (ptr_app))
- color_value = L"ColorInvalid";
+ else if (app.ConfigGetBoolean (L"IsHighlightTimer", TRUE, L"colors") && _app_istimeractive (ptr_app))
+ colorValue = L"ColorTimer";
- else if (app.ConfigGetBoolean (L"IsHighlightTimer", TRUE, L"colors") && _app_istimeractive (ptr_app))
- color_value = L"ColorTimer";
+ else if (!is_networklist && !ptr_app->is_silent && app.ConfigGetBoolean (L"IsHighlightConnection", TRUE, L"colors") && _app_isapphaveconnection (app_hash))
+ colorValue = L"ColorConnection";
- else if (!is_networklist && !ptr_app->is_silent && app.ConfigGetBoolean (L"IsHighlightConnection", TRUE, L"colors") && _app_isapphaveconnection (app_hash))
- color_value = L"ColorConnection";
+ else if (app.ConfigGetBoolean (L"IsHighlightSigned", TRUE, L"colors") && !ptr_app->is_silent && app.ConfigGetBoolean (L"IsCertificatesEnabled", FALSE) && ptr_app->is_signed)
+ colorValue = L"ColorSigned";
- else if (app.ConfigGetBoolean (L"IsHighlightSigned", TRUE, L"colors") && !ptr_app->is_silent && app.ConfigGetBoolean (L"IsCertificatesEnabled", FALSE) && ptr_app->is_signed)
- color_value = L"ColorSigned";
+ else if ((!is_profilelist || !app.ConfigGetBoolean (L"IsEnableSpecialGroup", TRUE)) && (app.ConfigGetBoolean (L"IsHighlightSpecial", TRUE, L"colors") && _app_isapphaverule (app_hash)))
+ colorValue = L"ColorSpecial";
- else if ((!is_profilelist || !app.ConfigGetBoolean (L"IsEnableSpecialGroup", TRUE)) && (app.ConfigGetBoolean (L"IsHighlightSpecial", TRUE, L"colors") && _app_isapphaverule (app_hash)))
- color_value = L"ColorSpecial";
+ else if (is_profilelist && app.ConfigGetBoolean (L"IsHighlightSilent", TRUE, L"colors") && ptr_app->is_silent)
+ colorValue = L"ColorSilent";
- else if (is_profilelist && app.ConfigGetBoolean (L"IsHighlightSilent", TRUE, L"colors") && ptr_app->is_silent)
- color_value = L"ColorSilent";
+ else if (!is_profilelist && !is_editorlist && app.ConfigGetBoolean (L"IsHighlightService", TRUE, L"colors") && ptr_app->type == DataAppService)
+ colorValue = L"ColorService";
- else if (!is_profilelist && !is_editorlist && app.ConfigGetBoolean (L"IsHighlightService", TRUE, L"colors") && ptr_app->type == DataAppService)
- color_value = L"ColorService";
+ else if (!is_profilelist && !is_editorlist && app.ConfigGetBoolean (L"IsHighlightPackage", TRUE, L"colors") && ptr_app->type == DataAppUWP)
+ colorValue = L"ColorPackage";
- else if (!is_profilelist && !is_editorlist && app.ConfigGetBoolean (L"IsHighlightPackage", TRUE, L"colors") && ptr_app->type == DataAppUWP)
- color_value = L"ColorPackage";
+ else if (app.ConfigGetBoolean (L"IsHighlightPico", TRUE, L"colors") && ptr_app->type == DataAppPico)
+ colorValue = L"ColorPico";
- else if (app.ConfigGetBoolean (L"IsHighlightPico", TRUE, L"colors") && ptr_app->type == DataAppPico)
- color_value = L"ColorPico";
+ else if (app.ConfigGetBoolean (L"IsHighlightSystem", TRUE, L"colors") && ptr_app->is_system)
+ colorValue = L"ColorSystem";
- else if (app.ConfigGetBoolean (L"IsHighlightSystem", TRUE, L"colors") && ptr_app->is_system)
- color_value = L"ColorSystem";
- }
+ _r_obj_dereference (ptr_app);
- _r_obj2_dereference (ptr_app_object);
+ if (colorValue)
+ return _app_getcolorvalue (_r_str_hash (colorValue));
- if (color_value.IsEmpty ())
- return 0;
-
- return _app_getcolorvalue (_r_str_hash (color_value.GetString ()));
+ return 0;
}
VOID _app_freeapplication (SIZE_T app_hash)
@@ -386,48 +395,44 @@ VOID _app_freeapplication (SIZE_T app_hash)
INT index = INVALID_INT;
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
index += 1;
- if (!p)
+ if (!*it)
continue;
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule)
+ if (ptr_rule->type == DataRuleCustom)
{
- if (ptr_rule->type == DataRuleCustom)
+ if (ptr_rule->apps->find (app_hash) != ptr_rule->apps->end ())
{
- if (ptr_rule->apps.find (app_hash) != ptr_rule->apps.end ())
+ ptr_rule->apps->erase (app_hash);
+
+ if (ptr_rule->is_enabled && ptr_rule->apps->empty ())
{
- ptr_rule->apps.erase (app_hash);
+ ptr_rule->is_enabled = FALSE;
+ ptr_rule->is_haveerrors = FALSE;
+ }
- if (ptr_rule->is_enabled && ptr_rule->apps.empty ())
+ INT rule_listview_id = _app_getlistview_id (ptr_rule->type);
+
+ if (rule_listview_id)
+ {
+ INT item_pos = _app_getposition (app.GetHWND (), rule_listview_id, index);
+
+ if (item_pos != INVALID_INT)
{
- ptr_rule->is_enabled = FALSE;
- ptr_rule->is_haveerrors = FALSE;
- }
-
- INT rule_listview_id = _app_getlistview_id (ptr_rule->type);
-
- if (rule_listview_id)
- {
- INT item_pos = _app_getposition (app.GetHWND (), rule_listview_id, index);
-
- if (item_pos != INVALID_INT)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
- _app_setruleiteminfo (app.GetHWND (), rule_listview_id, item_pos, ptr_rule, FALSE);
- _r_fastlock_releaseshared (&lock_checkbox);
- }
+ _r_fastlock_acquireshared (&lock_checkbox);
+ _app_setruleiteminfo (app.GetHWND (), rule_listview_id, item_pos, ptr_rule, FALSE);
+ _r_fastlock_releaseshared (&lock_checkbox);
}
}
}
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
apps.erase (app_hash);
@@ -435,59 +440,54 @@ VOID _app_freeapplication (SIZE_T app_hash)
VOID _app_getcount (PITEM_STATUS ptr_status)
{
- for (auto &p : apps)
- {
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
+ PITEM_APP ptr_app;
+ PITEM_RULE ptr_rule;
+ SIZE_T app_hash;
+ BOOLEAN is_used;
- if (!ptr_app_object)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
+ {
+ if (!it->second)
continue;
- SIZE_T app_hash = p.first;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ app_hash = it->first;
+ ptr_app = (PITEM_APP)_r_obj_reference (it->second);
+ is_used = _app_isappused (ptr_app, app_hash);
- if (ptr_app)
- {
- BOOLEAN is_used = _app_isappused (ptr_app, app_hash);
+ if (_app_istimeractive (ptr_app))
+ ptr_status->apps_timer_count += 1;
- if (_app_istimeractive (ptr_app))
- ptr_status->apps_timer_count += 1;
+ if (!ptr_app->is_undeletable && (!_app_isappexists (ptr_app) || !is_used) && !(ptr_app->type == DataAppService || ptr_app->type == DataAppUWP))
+ ptr_status->apps_unused_count += 1;
- if (!ptr_app->is_undeletable && (!_app_isappexists (ptr_app) || !is_used) && !(ptr_app->type == DataAppService || ptr_app->type == DataAppUWP))
- ptr_status->apps_unused_count += 1;
+ if (is_used)
+ ptr_status->apps_count += 1;
- if (is_used)
- ptr_status->apps_count += 1;
- }
-
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
- if (!p)
+ if (!*it)
continue;
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule)
+ if (ptr_rule->type == DataRuleCustom)
{
- if (ptr_rule->type == DataRuleCustom)
- {
- if (ptr_rule->is_enabled && !ptr_rule->apps.empty ())
- ptr_status->rules_global_count += 1;
+ if (ptr_rule->is_enabled && !ptr_rule->apps->empty ())
+ ptr_status->rules_global_count += 1;
- if (ptr_rule->is_readonly)
- ptr_status->rules_predefined_count += 1;
+ if (ptr_rule->is_readonly)
+ ptr_status->rules_predefined_count += 1;
- else
- ptr_status->rules_user_count += 1;
+ else
+ ptr_status->rules_user_count += 1;
- ptr_status->rules_count += 1;
- }
+ ptr_status->rules_count += 1;
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
@@ -521,215 +521,229 @@ INT _app_getruleicon (const PITEM_RULE ptr_rule)
COLORREF _app_getrulecolor (INT listview_id, SIZE_T rule_idx)
{
- PR_OBJECT ptr_rule_object = _app_getrulebyid (rule_idx);
+ PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
- if (!ptr_rule_object)
+ if (!ptr_rule)
return 0;
- rstring color_value;
+ LPCWSTR colorValue = NULL;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ if (app.ConfigGetBoolean (L"IsHighlightInvalid", TRUE, L"colors") && ptr_rule->is_enabled && ptr_rule->is_haveerrors)
+ colorValue = L"ColorInvalid";
- if (ptr_rule)
- {
- if (app.ConfigGetBoolean (L"IsHighlightInvalid", TRUE, L"colors") && ptr_rule->is_enabled && ptr_rule->is_haveerrors)
- color_value = L"ColorInvalid";
+ else if (app.ConfigGetBoolean (L"IsHighlightSpecial", TRUE, L"colors") && !ptr_rule->apps->empty ())
+ colorValue = L"ColorSpecial";
- else if (app.ConfigGetBoolean (L"IsHighlightSpecial", TRUE, L"colors") && !ptr_rule->apps.empty ())
- color_value = L"ColorSpecial";
- }
+ _r_obj_dereference (ptr_rule);
- _r_obj2_dereference (ptr_rule_object);
+ if (colorValue)
+ return _app_getcolorvalue (_r_str_hash (colorValue));
- if (color_value.IsEmpty ())
- return 0;
-
- return _app_getcolorvalue (_r_str_hash (color_value.GetString ()));
+ return 0;
}
-rstring _app_gettooltip (HWND hwnd, LPNMLVGETINFOTIP lpnmlv)
+PR_STRING _app_gettooltip (HWND hwnd, LPNMLVGETINFOTIP lpnmlv)
{
- rstring result;
+ PR_STRING string = NULL;
INT listview_id = PtrToInt ((PVOID)lpnmlv->hdr.idFrom);
BOOLEAN is_appslist = (listview_id >= IDC_APPS_PROFILE && listview_id <= IDC_APPS_UWP);
+ BOOLEAN is_ruleslist = (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM);
if (is_appslist || listview_id == IDC_RULE_APPS_ID)
{
LPARAM lparam = _r_listview_getitemlparam (hwnd, listview_id, lpnmlv->iItem);
- PR_OBJECT ptr_app_object = _app_getappitem (lparam);
+ PITEM_APP ptr_app = _app_getappitem (lparam);
+ PR_STRING displayName = NULL;
- if (ptr_app_object)
+ if (ptr_app)
{
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ string = _r_format_string (L"%s\r\n", _r_obj_getstring (!_r_str_isempty (ptr_app->real_path) ? ptr_app->real_path : (!_r_str_isempty (ptr_app->display_name) ? ptr_app->display_name : ptr_app->original_path)));
- if (ptr_app)
+ // app information
{
- result.Format (L"%s\r\n", (!_r_str_isempty (ptr_app->real_path) ? ptr_app->real_path : (!_r_str_isempty (ptr_app->display_name) ? ptr_app->display_name : ptr_app->original_path)));
+ PR_STRING infoString;
- // app information
+ infoString = _r_obj_createstringbuilder (256 * sizeof (WCHAR));
+
+ if (ptr_app->type == DataAppRegular)
{
- rstring app_info;
+ PR_STRING versionString = _app_getversioninfo (lparam, ptr_app);
- if (ptr_app->type == DataAppRegular)
+ if (versionString)
{
- PR_OBJECT ptr_version_object = _app_getversioninfo (lparam, ptr_app);
+ if (!_r_str_isempty (versionString))
+ _r_string_appendformat (&infoString, SZ_TAB L"%s\r\n", versionString->Buffer);
- if (ptr_version_object)
- {
- if (ptr_version_object->pdata)
- app_info.AppendFormat (SZ_TAB L"%s\r\n", (LPCWSTR)ptr_version_object->pdata);
-
- _r_obj2_dereference (ptr_version_object);
- }
+ _r_obj_dereference (versionString);
}
- else if (ptr_app->type == DataAppService)
+ }
+ else if (ptr_app->type == DataAppService)
+ {
+ if (_app_item_get (ptr_app->type, lparam, &displayName, NULL, NULL, NULL))
{
- rstring display_name;
+ _r_string_appendformat (&infoString, SZ_TAB L"%s" SZ_TAB_CRLF L"%s\r\n", _r_obj_getstringorempty (ptr_app->original_path), _r_obj_getstringorempty (displayName));
- if (_app_item_get (ptr_app->type, lparam, &display_name, NULL, NULL, NULL))
- app_info.AppendFormat (SZ_TAB L"%s" SZ_TAB_CRLF L"%s\r\n", ptr_app->original_path, display_name.GetString ());
+ if (displayName)
+ _r_obj_dereference (displayName);
}
- else if (ptr_app->type == DataAppUWP)
+ }
+ else if (ptr_app->type == DataAppUWP)
+ {
+ if (_app_item_get (ptr_app->type, lparam, &displayName, NULL, NULL, NULL))
{
- rstring display_name;
+ _r_string_appendformat (&infoString, SZ_TAB L"%s\r\n", _r_obj_getstringorempty (displayName));
- if (_app_item_get (ptr_app->type, lparam, &display_name, NULL, NULL, NULL))
- app_info.AppendFormat (SZ_TAB L"%s\r\n", display_name.GetString ());
- }
-
- // signature information
- if (app.ConfigGetBoolean (L"IsCertificatesEnabled", FALSE) && ptr_app->is_signed)
- {
- PR_OBJECT ptr_signature_object = _app_getsignatureinfo (lparam, ptr_app);
-
- if (ptr_signature_object)
- {
- if (ptr_signature_object->pdata)
- app_info.AppendFormat (SZ_TAB L"%s: %s\r\n", app.LocaleString (IDS_SIGNATURE, NULL).GetString (), (LPCWSTR)ptr_signature_object->pdata);
-
- _r_obj2_dereference (ptr_signature_object);
- }
- }
-
- if (!app_info.IsEmpty ())
- {
- app_info.InsertFormat (0, L"%s:\r\n", app.LocaleString (IDS_FILE, NULL).GetString ());
- result.Append (app_info);
+ if (displayName)
+ _r_obj_dereference (displayName);
}
}
- // app timer
- if (_app_istimeractive (ptr_app))
- result.AppendFormat (L"%s:" SZ_TAB_CRLF L"%s\r\n", app.LocaleString (IDS_TIMELEFT, NULL).GetString (), _r_fmt_interval (ptr_app->timer - _r_unixtime_now (), 3).GetString ());
-
- // app rules
+ // signature information
+ if (app.ConfigGetBoolean (L"IsCertificatesEnabled", FALSE) && ptr_app->is_signed)
{
- rstring app_rules = _app_appexpandrules (lparam, SZ_TAB_CRLF);
+ PR_STRING signatureString = _app_getsignatureinfo (lparam, ptr_app);
- if (!app_rules.IsEmpty ())
+ if (signatureString)
{
- app_rules.InsertFormat (0, L"%s:" SZ_TAB_CRLF, app.LocaleString (IDS_RULE, NULL).GetString ());
- app_rules.Append (L"\r\n");
+ if (!_r_str_isempty (signatureString))
+ _r_string_appendformat (&infoString, SZ_TAB L"%s: %s\r\n", app.LocaleString (IDS_SIGNATURE), signatureString->Buffer);
- result.Append (app_rules);
+ _r_obj_dereference (signatureString);
}
}
- // app notes
+ if (!_r_str_isempty (infoString))
{
- rstring app_notes;
+ _r_string_insertformat (&infoString, 0, L"%s:\r\n", app.LocaleString (IDS_FILE));
+ _r_string_append (&string, infoString->Buffer);
+ }
- // app type
- if (ptr_app->type == DataAppNetwork)
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_NETWORK, NULL).GetString ());
+ _r_obj_dereference (infoString);
+ }
- else if (ptr_app->type == DataAppPico)
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_PICO, NULL).GetString ());
+ // app timer
+ if (_app_istimeractive (ptr_app))
+ {
+ WCHAR intervalString[128];
+ _r_format_interval (intervalString, RTL_NUMBER_OF (intervalString), ptr_app->timer - _r_unixtime_now (), 3);
- else if (!is_appslist && ptr_app->type == DataAppService)
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_SERVICE, NULL).GetString ());
+ _r_string_appendformat (&string, L"%s:" SZ_TAB_CRLF L"%s\r\n", app.LocaleString (IDS_TIMELEFT), intervalString);
+ }
- else if (!is_appslist && ptr_app->type == DataAppUWP)
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_PACKAGE, NULL).GetString ());
+ // app rules
+ {
+ PR_STRING appRulesString = _app_appexpandrules (lparam, SZ_TAB_CRLF);
- // app settings
- if (ptr_app->is_system)
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_SYSTEM, NULL).GetString ());
+ if (appRulesString)
+ {
+ if (!_r_str_isempty (appRulesString))
+ _r_string_appendformat (&string, L"%s:" SZ_TAB_CRLF L"%s\r\n", app.LocaleString (IDS_RULE), appRulesString->Buffer);
- if (_app_isapphaveconnection (lparam))
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_CONNECTION, NULL).GetString ());
-
- if (is_appslist && ptr_app->is_silent)
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_SILENT, NULL).GetString ());
-
- if (!_app_isappexists (ptr_app))
- app_notes.AppendFormat (SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_INVALID, NULL).GetString ());
-
- if (!app_notes.IsEmpty ())
- {
- app_notes.InsertFormat (0, L"%s:\r\n", app.LocaleString (IDS_NOTES, NULL).GetString ());
- result.Append (app_notes);
- }
+ _r_obj_dereference (appRulesString);
}
}
- _r_obj2_dereference (ptr_app_object);
+ // app notes
+ {
+ PR_STRING notesString;
+
+ notesString = _r_obj_createstringbuilder (256 * sizeof (WCHAR));
+
+ // app type
+ if (ptr_app->type == DataAppNetwork)
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_NETWORK));
+
+ else if (ptr_app->type == DataAppPico)
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_PICO));
+
+ else if (!is_appslist && ptr_app->type == DataAppService)
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_SERVICE));
+
+ else if (!is_appslist && ptr_app->type == DataAppUWP)
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_PACKAGE));
+
+ // app settings
+ if (ptr_app->is_system)
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_SYSTEM));
+
+ if (_app_isapphaveconnection (lparam))
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_CONNECTION));
+
+ if (is_appslist && ptr_app->is_silent)
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_SILENT));
+
+ if (!_app_isappexists (ptr_app))
+ _r_string_appendformat (¬esString, SZ_TAB L"%s\r\n", app.LocaleString (IDS_HIGHLIGHT_INVALID));
+
+ if (!_r_str_isempty (notesString))
+ {
+ _r_string_insertformat (¬esString, 0, L"%s:\r\n", app.LocaleString (IDS_NOTES));
+ _r_string_append2 (&string, notesString);
+ }
+
+ _r_obj_dereference (notesString);
+ }
+
+ _r_obj_dereference (ptr_app);
}
}
- else if (listview_id >= IDC_RULES_BLOCKLIST && listview_id <= IDC_RULES_CUSTOM)
+ else if (is_ruleslist)
{
LPARAM lparam = _r_listview_getitemlparam (hwnd, listview_id, lpnmlv->iItem);
- PR_OBJECT ptr_rule_object = _app_getrulebyid (lparam);
+ PITEM_RULE ptr_rule = _app_getrulebyid (lparam);
- if (ptr_rule_object)
+ if (ptr_rule)
{
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ LPCWSTR empty;
- if (ptr_rule)
+ PR_STRING ruleRemoteString = NULL;
+ PR_STRING ruleLocalString = NULL;
+
+ empty = app.LocaleString (IDS_STATUS_EMPTY);
+
+ if (!_r_str_isempty (ptr_rule->rule_remote))
+ ruleRemoteString = _r_obj_reference (ptr_rule->rule_remote);
+
+ if (!_r_str_isempty (ptr_rule->rule_local))
+ ruleLocalString = _r_obj_reference (ptr_rule->rule_local);
+
+ // rule information
+ string = _r_format_string (L"%s (#%" TEXT (PR_SIZE_T) L")\r\n%s (" SZ_DIRECTION_REMOTE L"):\r\n%s%s\r\n%s (" SZ_DIRECTION_LOCAL L"):\r\n%s%s",
+ _r_obj_getstringordefault (ptr_rule->name, empty),
+ lparam,
+ app.LocaleString (IDS_RULE),
+ SZ_TAB,
+ _r_obj_getstringordefault (ruleRemoteString, empty),
+ app.LocaleString (IDS_RULE),
+ SZ_TAB,
+ _r_obj_getstringordefault (ruleLocalString, empty)
+ );
+
+ SAFE_DELETE_REFERENCE (ruleRemoteString);
+ SAFE_DELETE_REFERENCE (ruleLocalString);
+
+ // rule apps
+ if (ptr_rule->is_forservices || !ptr_rule->apps->empty ())
{
- rstring empty = app.LocaleString (IDS_STATUS_EMPTY, NULL);
+ PR_STRING ruleAppsString = _app_rulesexpandapps (ptr_rule, TRUE, SZ_TAB_CRLF);
- rstring rule_remote = ptr_rule->prule_remote;
- rstring rule_local = ptr_rule->prule_local;
-
- if (!rule_remote.IsEmpty ())
- rule_remote.Replace (DIVIDER_RULE, SZ_TAB_CRLF);
-
- else
- rule_remote = empty;
-
- if (!rule_local.IsEmpty ())
- rule_local.Replace (DIVIDER_RULE, SZ_TAB_CRLF);
-
- else
- rule_local = empty;
-
- // rule information
- result.Format (L"%s (#%" TEXT (PR_SIZE_T) L")\r\n%s:\r\n%s%s\r\n%s:\r\n%s%s", ptr_rule->pname, lparam, app.LocaleString (IDS_RULE, L" (" SZ_DIRECTION_REMOTE L")").GetString (), SZ_TAB, rule_remote.GetString (), app.LocaleString (IDS_RULE, L" (" SZ_DIRECTION_LOCAL L")").GetString (), SZ_TAB, rule_local.GetString ());
-
- // rule apps
- if (ptr_rule->is_forservices || !ptr_rule->apps.empty ())
- result.AppendFormat (L"\r\n%s:\r\n%s%s", app.LocaleString (IDS_TAB_APPS, NULL).GetString (), SZ_TAB, _app_rulesexpandapps (ptr_rule, TRUE, SZ_TAB_CRLF).GetString ());
-
- // rule notes
+ if (ruleAppsString)
{
- rstring buffer;
+ if (!_r_str_isempty (ruleAppsString))
+ _r_string_appendformat (&string, L"\r\n%s:\r\n%s%s", app.LocaleString (IDS_TAB_APPS), SZ_TAB, ruleAppsString->Buffer);
- if (ptr_rule->is_readonly && ptr_rule->type == DataRuleCustom)
- {
- buffer.AppendFormat (SZ_TAB L"%s\r\n", SZ_RULE_INTERNAL_TITLE);
- }
-
- if (!buffer.IsEmpty ())
- {
- buffer.InsertFormat (0, L"\r\n%s:\r\n", app.LocaleString (IDS_NOTES, NULL).GetString ());
- result.Append (buffer);
- }
+ _r_obj_dereference (ruleAppsString);
}
}
- _r_obj2_dereference (ptr_rule_object);
+ // rule notes
+ if (ptr_rule->is_readonly && ptr_rule->type == DataRuleCustom)
+ {
+ _r_string_appendformat (&string, SZ_TAB L"\r\n%s:\r\n" SZ_TAB L"%s\r\n", app.LocaleString (IDS_NOTES), SZ_RULE_INTERNAL_TITLE);
+ }
+
+ _r_obj_dereference (ptr_rule);
}
}
else if (listview_id == IDC_NETWORK)
@@ -739,26 +753,30 @@ rstring _app_gettooltip (HWND hwnd, LPNMLVGETINFOTIP lpnmlv)
if (ptr_network)
{
- LPWSTR local_fmt = NULL;
- LPWSTR remote_fmt = NULL;
+ LPCWSTR empty;
- _app_formataddress (ptr_network->af, 0, &ptr_network->local_addr, ptr_network->local_port, &local_fmt, 0);
- _app_formataddress (ptr_network->af, 0, &ptr_network->remote_addr, ptr_network->remote_port, &remote_fmt, 0);
+ PR_STRING localAddressString;
+ PR_STRING remoteAddressString;
- result.Format (L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s",
- (!_r_str_isempty (ptr_network->path) ? ptr_network->path : SZ_EMPTY),
- app.LocaleString (IDS_ADDRESS, L" (" SZ_DIRECTION_LOCAL L")").GetString (),
- !_r_str_isempty (local_fmt) ? local_fmt : SZ_EMPTY,
- app.LocaleString (IDS_ADDRESS, L" (" SZ_DIRECTION_REMOTE L")").GetString (),
- !_r_str_isempty (remote_fmt) ? remote_fmt : SZ_EMPTY,
- app.LocaleString (IDS_PROTOCOL, NULL).GetString (),
- _app_getprotoname (ptr_network->protocol, ptr_network->af, NULL).GetString (),
- app.LocaleString (IDS_STATE, NULL).GetString (),
- _app_getconnectionstatusname (ptr_network->state, SZ_EMPTY).GetString ()
+ empty = app.LocaleString (IDS_STATUS_EMPTY);
+
+ localAddressString = _app_formataddress (ptr_network->af, 0, &ptr_network->local_addr, ptr_network->local_port, 0);
+ remoteAddressString = _app_formataddress (ptr_network->af, 0, &ptr_network->remote_addr, ptr_network->remote_port, 0);
+
+ string = _r_format_string (L"%s\r\n%s (" SZ_DIRECTION_LOCAL L"):\r\n" SZ_TAB L"%s\r\n%s (" SZ_DIRECTION_REMOTE L"):\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s",
+ _r_obj_getstringordefault (ptr_network->path, empty),
+ app.LocaleString (IDS_ADDRESS),
+ _r_obj_getstringordefault (localAddressString, empty),
+ app.LocaleString (IDS_ADDRESS),
+ _r_obj_getstringordefault (remoteAddressString, empty),
+ app.LocaleString (IDS_PROTOCOL),
+ _app_getprotoname (ptr_network->protocol, ptr_network->af, empty),
+ app.LocaleString (IDS_STATE),
+ _app_getconnectionstatusname (ptr_network->state, empty)
);
- SAFE_DELETE_MEMORY (local_fmt);
- SAFE_DELETE_MEMORY (remote_fmt);
+ SAFE_DELETE_REFERENCE (localAddressString);
+ SAFE_DELETE_REFERENCE (remoteAddressString);
_r_obj_dereference (ptr_network);
}
@@ -771,42 +789,60 @@ rstring _app_gettooltip (HWND hwnd, LPNMLVGETINFOTIP lpnmlv)
if (ptr_log)
{
- LPWSTR local_fmt = NULL;
- LPWSTR remote_fmt = NULL;
+ WCHAR dateString[256];
- _app_formataddress (ptr_log->af, 0, &ptr_log->local_addr, ptr_log->local_port, &local_fmt, 0);
- _app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, ptr_log->remote_port, &remote_fmt, 0);
+ LPCWSTR empty;
- result.Format (L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s",
- (!_r_str_isempty (ptr_log->path) ? ptr_log->path : SZ_EMPTY),
- app.LocaleString (IDS_DATE, NULL).GetString (),
- _r_fmt_dateex (ptr_log->timestamp, FDTF_LONGDATE | FDTF_LONGTIME).GetString (),
- app.LocaleString (IDS_ADDRESS, L" (" SZ_DIRECTION_LOCAL L")").GetString (),
- !_r_str_isempty (local_fmt) ? local_fmt : SZ_EMPTY,
- app.LocaleString (IDS_ADDRESS, L" (" SZ_DIRECTION_REMOTE L")").GetString (),
- !_r_str_isempty (remote_fmt) ? remote_fmt : SZ_EMPTY,
- app.LocaleString (IDS_PROTOCOL, NULL).GetString (),
- _app_getprotoname (ptr_log->protocol, ptr_log->af, NULL).GetString (),
- app.LocaleString (IDS_FILTER, NULL).GetString (),
- _app_getfiltername (NULL, ptr_log->filter_name, SZ_EMPTY).GetString (),
- app.LocaleString (IDS_DIRECTION, NULL).GetString (),
- _app_getdirectionname (ptr_log->direction, ptr_log->is_loopback, TRUE).GetString (),
- app.LocaleString (IDS_STATE, NULL).GetString (),
- (ptr_log->is_allow ? SZ_STATE_ALLOW : SZ_STATE_BLOCK)
+ PR_STRING localAddressString;
+ PR_STRING remoteAddressString;
+ PR_STRING directionString;
+
+ _r_format_dateex (dateString, RTL_NUMBER_OF (dateString), ptr_log->timestamp, FDTF_LONGDATE | FDTF_LONGTIME);
+
+ empty = app.LocaleString (IDS_STATUS_EMPTY);
+
+ localAddressString = _app_formataddress (ptr_log->af, 0, &ptr_log->local_addr, ptr_log->local_port, 0);
+ remoteAddressString = _app_formataddress (ptr_log->af, 0, &ptr_log->remote_addr, ptr_log->remote_port, 0);
+ directionString = _app_getdirectionname (ptr_log->direction, ptr_log->is_loopback, TRUE);
+
+ string = _r_format_string (L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s (" SZ_DIRECTION_LOCAL L"):\r\n" SZ_TAB L"%s\r\n%s (" SZ_DIRECTION_REMOTE L"):\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s\r\n%s:\r\n" SZ_TAB L"%s",
+ _r_obj_getstringordefault (ptr_log->path, empty),
+ app.LocaleString (IDS_DATE),
+ dateString,
+ app.LocaleString (IDS_ADDRESS),
+ _r_obj_getstringordefault (localAddressString, empty),
+ app.LocaleString (IDS_ADDRESS),
+ _r_obj_getstringordefault (remoteAddressString, empty),
+ app.LocaleString (IDS_PROTOCOL),
+ _app_getprotoname (ptr_log->protocol, ptr_log->af, empty),
+ app.LocaleString (IDS_FILTER),
+ _r_obj_getstringordefault (ptr_log->filter_name, empty),
+ app.LocaleString (IDS_DIRECTION),
+ _r_obj_getstringorempty (directionString),
+ app.LocaleString (IDS_STATE),
+ (ptr_log->is_allow ? SZ_STATE_ALLOW : SZ_STATE_BLOCK)
);
- SAFE_DELETE_MEMORY (local_fmt);
- SAFE_DELETE_MEMORY (remote_fmt);
+ SAFE_DELETE_REFERENCE (localAddressString);
+ SAFE_DELETE_REFERENCE (remoteAddressString);
+ SAFE_DELETE_REFERENCE (directionString);
_r_obj_dereference (ptr_log);
}
}
else if (listview_id == IDC_RULE_REMOTE_ID || listview_id == IDC_RULE_LOCAL_ID)
{
- result = _r_listview_getitemtext (hwnd, listview_id, lpnmlv->iItem, 0);
+ PR_STRING itemText = _r_listview_getitemtext (hwnd, listview_id, lpnmlv->iItem, 0);
+
+ if (itemText)
+ {
+ string = _r_obj_reference (itemText);
+
+ _r_obj_dereference (itemText);
+ }
}
- return result;
+ return string;
}
VOID _app_setappiteminfo (HWND hwnd, INT listview_id, INT item, SIZE_T app_hash, PITEM_APP ptr_app)
@@ -816,8 +852,12 @@ VOID _app_setappiteminfo (HWND hwnd, INT listview_id, INT item, SIZE_T app_hash,
_app_getappicon (ptr_app, TRUE, &ptr_app->icon_id, NULL);
- _r_listview_setitem (hwnd, listview_id, item, 0, ptr_app->display_name, ptr_app->icon_id, _app_getappgroup (app_hash, ptr_app));
- _r_listview_setitem (hwnd, listview_id, item, 1, _r_fmt_dateex (ptr_app->timestamp, FDTF_SHORTDATE | FDTF_SHORTTIME).GetString ());
+ _r_listview_setitem (hwnd, listview_id, item, 0, _r_obj_getstringordefault (ptr_app->display_name, SZ_EMPTY), ptr_app->icon_id, _app_getappgroup (app_hash, ptr_app));
+
+ WCHAR dateString[256];
+ _r_format_dateex (dateString, RTL_NUMBER_OF (dateString), ptr_app->timestamp, FDTF_SHORTDATE | FDTF_SHORTTIME);
+
+ _r_listview_setitem (hwnd, listview_id, item, 1, dateString);
_r_listview_setitemcheck (hwnd, listview_id, item, ptr_app->is_enabled);
}
@@ -827,38 +867,66 @@ VOID _app_setruleiteminfo (HWND hwnd, INT listview_id, INT item, PITEM_RULE ptr_
if (!listview_id || item == INVALID_INT)
return;
- _r_listview_setitem (hwnd, listview_id, item, 0, ptr_rule->is_readonly && ptr_rule->type == DataRuleCustom ? _r_fmt (L"%s" SZ_RULE_INTERNAL_MENU, ptr_rule->pname).GetString () : ptr_rule->pname, _app_getruleicon (ptr_rule), _app_getrulegroup (ptr_rule));
- _r_listview_setitem (hwnd, listview_id, item, 1, ptr_rule->protocol ? _app_getprotoname (ptr_rule->protocol, AF_UNSPEC, NULL).GetString () : app.LocaleString (IDS_ANY, NULL).GetString ());
- _r_listview_setitem (hwnd, listview_id, item, 2, _app_getdirectionname (ptr_rule->direction, FALSE, TRUE).GetString ());
+ INT ruleIconId;
+ INT ruleGroupId;
+
+ ruleIconId = _app_getruleicon (ptr_rule);
+ ruleGroupId = _app_getrulegroup (ptr_rule);
+
+ LPCWSTR ruleNamePtr = NULL;
+ WCHAR ruleName[RULE_NAME_CCH_MAX];
+ PR_STRING directionString;
+
+ if (!_r_str_isempty (ptr_rule->name))
+ {
+ if (ptr_rule->is_readonly && ptr_rule->type == DataRuleCustom)
+ {
+ _r_str_printf (ruleName, RTL_NUMBER_OF (ruleName), L"%s" SZ_RULE_INTERNAL_MENU, ptr_rule->name->Buffer);
+ ruleNamePtr = ruleName;
+ }
+ else
+ {
+ ruleNamePtr = ptr_rule->name->Buffer;
+ }
+ }
+
+ directionString = _app_getdirectionname (ptr_rule->direction, FALSE, TRUE);
+
+ _r_listview_setitem (hwnd, listview_id, item, 0, ruleNamePtr, ruleIconId, ruleGroupId);
+ _r_listview_setitem (hwnd, listview_id, item, 1, ptr_rule->protocol ? _app_getprotoname (ptr_rule->protocol, AF_UNSPEC, NULL) : app.LocaleString (IDS_ANY));
+ _r_listview_setitem (hwnd, listview_id, item, 2, _r_obj_getstringorempty (directionString));
_r_listview_setitemcheck (hwnd, listview_id, item, ptr_rule->is_enabled);
+ if (directionString)
+ _r_obj_dereference (directionString);
+
if (include_apps)
{
- for (auto &p : ptr_rule->apps)
- {
- SIZE_T app_hash = p.first;
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
+ SIZE_T app_hash;
+ PITEM_APP ptr_app;
+ INT app_listview_id;
+ INT item_pos;
- if (!ptr_app_object)
+ for (auto it = ptr_rule->apps->begin (); it != ptr_rule->apps->end (); ++it)
+ {
+ app_hash = it->first;
+ ptr_app = _app_getappitem (app_hash);
+
+ if (!ptr_app)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ app_listview_id = _app_getlistview_id (ptr_app->type);
- if (ptr_app)
+ if (app_listview_id)
{
- INT app_listview_id = _app_getlistview_id (ptr_app->type);
+ item_pos = _app_getposition (app.GetHWND (), app_listview_id, app_hash);
- if (app_listview_id)
- {
- INT item_pos = _app_getposition (app.GetHWND (), app_listview_id, app_hash);
-
- if (item_pos != INVALID_INT)
- _app_setappiteminfo (hwnd, app_listview_id, item_pos, app_hash, ptr_app);
- }
+ if (item_pos != INVALID_INT)
+ _app_setappiteminfo (hwnd, app_listview_id, item_pos, app_hash, ptr_app);
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
}
@@ -867,39 +935,41 @@ VOID _app_ruleenable (PITEM_RULE ptr_rule, BOOLEAN is_enable)
{
ptr_rule->is_enabled = is_enable;
- if (ptr_rule->is_readonly && !_r_str_isempty (ptr_rule->pname))
+ if (ptr_rule->is_readonly && !_r_str_isempty (ptr_rule->name))
{
- SIZE_T rule_hash = _r_str_hash (ptr_rule->pname);
+ PVOID pdata;
+ PITEM_RULE_CONFIG ptr_config;
+ SIZE_T rule_hash = _r_str_hash (ptr_rule->name);
if (rule_hash)
{
if (rules_config.find (rule_hash) != rules_config.end ())
{
- PITEM_RULE_CONFIG ptr_config;
- PVOID ptr = rules_config[rule_hash];
+ pdata = rules_config[rule_hash];
- if (ptr && (ptr_config = (PITEM_RULE_CONFIG)_r_obj_reference (ptr)))
+ if (pdata)
{
+ ptr_config = (PITEM_RULE_CONFIG)_r_obj_reference (pdata);
ptr_config->is_enabled = is_enable;
_r_obj_dereference (ptr_config);
}
else
{
- PITEM_RULE_CONFIG ptr_config = (PITEM_RULE_CONFIG)_r_obj_allocateex (sizeof (ITEM_RULE_CONFIG), &_app_dereferenceruleconfig);
+ ptr_config = (PITEM_RULE_CONFIG)_r_obj_allocateex (sizeof (ITEM_RULE_CONFIG), &_app_dereferenceruleconfig);
ptr_config->is_enabled = is_enable;
- _r_str_alloc (&ptr_config->pname, _r_str_length (ptr_rule->pname), ptr_rule->pname);
+ ptr_config->name = _r_obj_createstring2 (ptr_rule->name);
rules_config[rule_hash] = ptr_config;
}
}
else
{
- PITEM_RULE_CONFIG ptr_config = (PITEM_RULE_CONFIG)_r_obj_allocateex (sizeof (ITEM_RULE_CONFIG), &_app_dereferenceruleconfig);
+ ptr_config = (PITEM_RULE_CONFIG)_r_obj_allocateex (sizeof (ITEM_RULE_CONFIG), &_app_dereferenceruleconfig);
ptr_config->is_enabled = is_enable;
- _r_str_alloc (&ptr_config->pname, _r_str_length (ptr_rule->pname), ptr_rule->pname);
+ ptr_config->name = _r_obj_createstring2 (ptr_rule->name);
rules_config[rule_hash] = ptr_config;
}
@@ -911,9 +981,9 @@ VOID _app_ruleenable2 (PITEM_RULE ptr_rule, BOOLEAN is_enable)
{
ptr_rule->is_enabled = is_enable;
- if (ptr_rule->is_readonly && !_r_str_isempty (ptr_rule->pname))
+ if (ptr_rule->is_readonly && !_r_str_isempty (ptr_rule->name))
{
- SIZE_T rule_hash = _r_str_hash (ptr_rule->pname);
+ SIZE_T rule_hash = _r_str_hash (ptr_rule->name);
if (rule_hash)
{
@@ -957,16 +1027,21 @@ BOOLEAN _app_ruleblocklistsetchange (PITEM_RULE ptr_rule, INT new_state)
BOOLEAN _app_ruleblocklistsetstate (PITEM_RULE ptr_rule, INT spy_state, INT update_state, INT extra_state)
{
- if (ptr_rule->type != DataRuleBlocklist)
+ if (ptr_rule->type != DataRuleBlocklist || _r_str_isempty (ptr_rule->name))
return FALSE;
- if (_r_str_compare_length (ptr_rule->pname, L"spy_", 4) == 0)
+ LPCWSTR ruleName = ptr_rule->name->Buffer;
+
+ if (!ruleName)
+ return FALSE;
+
+ if (_r_str_compare_length (ruleName, L"spy_", 4) == 0)
return _app_ruleblocklistsetchange (ptr_rule, spy_state);
- else if (_r_str_compare_length (ptr_rule->pname, L"update_", 7) == 0)
+ else if (_r_str_compare_length (ruleName, L"update_", 7) == 0)
return _app_ruleblocklistsetchange (ptr_rule, update_state);
- else if (_r_str_compare_length (ptr_rule->pname, L"extra_", 6) == 0)
+ else if (_r_str_compare_length (ruleName, L"extra_", 6) == 0)
return _app_ruleblocklistsetchange (ptr_rule, extra_state);
// fallback: block rules with other names by default!
@@ -975,32 +1050,31 @@ BOOLEAN _app_ruleblocklistsetstate (PITEM_RULE ptr_rule, INT spy_state, INT upda
VOID _app_ruleblocklistset (HWND hwnd, INT spy_state, INT update_state, INT extra_state, BOOLEAN is_instantapply)
{
- OBJECTS_VEC rules;
+ OBJECTS_RULE_VECTOR rules;
INT listview_id = _app_getlistview_id (DataRuleBlocklist);
SIZE_T changes_count = 0;
INT index = INVALID_INT; // negative initial value is required for correct array indexing
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
index += 1;
- if (!p)
+ if (!*it)
continue;
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (!ptr_rule || ptr_rule->type != DataRuleBlocklist)
+ if (ptr_rule->type != DataRuleBlocklist)
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
continue;
}
if (!_app_ruleblocklistsetstate (ptr_rule, spy_state, update_state, extra_state))
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
continue;
}
@@ -1021,11 +1095,11 @@ VOID _app_ruleblocklistset (HWND hwnd, INT spy_state, INT update_state, INT extr
if (is_instantapply)
{
- rules.push_back (ptr_rule_object); // be freed later!
+ rules.emplace_back (ptr_rule); // be freed later!
continue;
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
if (changes_count)
@@ -1043,114 +1117,116 @@ VOID _app_ruleblocklistset (HWND hwnd, INT spy_state, INT update_state, INT extr
HANDLE hengine = _wfp_getenginehandle ();
if (hengine)
- _wfp_create4filters (hengine, rules, __LINE__);
+ _wfp_create4filters (hengine, &rules, __LINE__);
- _app_freeobjects_vec (rules);
+ _app_freerules_vec (&rules);
}
_app_profile_save (NULL); // required!
}
}
-rstring _app_appexpandrules (SIZE_T app_hash, LPCWSTR delimeter)
+PR_STRING _app_appexpandrules (SIZE_T app_hash, LPCWSTR delimeter)
{
- rstring result;
+ PR_STRING string;
- for (auto &p : rules_arr)
+ string = _r_obj_createstringbuilder (256 * sizeof (WCHAR));
+
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
- if (!p)
+ if (!*it)
continue;
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule)
+ if (ptr_rule->is_enabled && ptr_rule->type == DataRuleCustom && ptr_rule->apps->find (app_hash) != ptr_rule->apps->end ())
{
- if (ptr_rule->is_enabled && ptr_rule->type == DataRuleCustom && ptr_rule->apps.find (app_hash) != ptr_rule->apps.end ())
+ if (!_r_str_isempty (ptr_rule->name))
{
- if (!_r_str_isempty (ptr_rule->pname))
- {
- result.Append (ptr_rule->pname);
+ _r_string_append2 (&string, ptr_rule->name);
- if (ptr_rule->is_readonly)
- result.Append (SZ_RULE_INTERNAL_MENU);
+ if (ptr_rule->is_readonly)
+ _r_string_append (&string, SZ_RULE_INTERNAL_MENU);
- result.Append (delimeter);
- }
+ _r_string_append (&string, delimeter);
}
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
- if (!result.IsEmpty ())
- _r_str_trim (result, delimeter);
+ _r_str_trim (string, delimeter);
- return result;
+ if (_r_str_isempty (string))
+ {
+ _r_obj_dereference (string);
+ return NULL;
+ }
+
+ return string;
}
-rstring _app_rulesexpandapps (const PITEM_RULE ptr_rule, BOOLEAN is_fordisplay, LPCWSTR delimeter)
+PR_STRING _app_rulesexpandapps (const PITEM_RULE ptr_rule, BOOLEAN is_fordisplay, LPCWSTR delimeter)
{
- rstring result;
+ PR_STRING string;
+
+ string = _r_obj_createstringbuilder (256 * sizeof (WCHAR));
if (is_fordisplay && ptr_rule->is_forservices)
{
- static rstring svchost_path = _r_path_expand (PATH_SVCHOST);
-
- result.AppendFormat (L"%s%s", PROC_SYSTEM_NAME, delimeter);
- result.AppendFormat (L"%s%s", svchost_path.GetString (), delimeter);
+ _r_string_appendformat (&string, L"%s%s%s%s", PROC_SYSTEM_NAME, delimeter, _r_obj_getstring (config.svchost_path), delimeter);
}
- for (auto &p : ptr_rule->apps)
+ for (auto it = ptr_rule->apps->begin (); it != ptr_rule->apps->end (); ++it)
{
- PR_OBJECT ptr_app_object = _app_getappitem (p.first);
+ PITEM_APP ptr_app = _app_getappitem (it->first);
- if (!ptr_app_object)
+ if (!ptr_app)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
-
- if (ptr_app)
+ if (is_fordisplay)
{
- if (is_fordisplay)
+ if (ptr_app->type == DataAppUWP || ptr_app->type == DataAppService)
{
- if (ptr_app->type == DataAppUWP || ptr_app->type == DataAppService)
- {
- if (!_r_str_isempty (ptr_app->display_name))
- result.Append (ptr_app->display_name);
- }
- else
- {
- if (!_r_str_isempty (ptr_app->original_path))
- result.Append (ptr_app->original_path);
- }
+ if (!_r_str_isempty (ptr_app->display_name))
+ _r_string_append2 (&string, ptr_app->display_name);
}
else
{
if (!_r_str_isempty (ptr_app->original_path))
- result.Append (ptr_app->original_path);
+ _r_string_append2 (&string, ptr_app->original_path);
}
-
- result.Append (delimeter);
+ }
+ else
+ {
+ if (!_r_str_isempty (ptr_app->original_path))
+ _r_string_append2 (&string, ptr_app->original_path);
}
- _r_obj2_dereference (ptr_app_object);
+ _r_string_append (&string, delimeter);
+
+ _r_obj_dereference (ptr_app);
}
- if (!result.IsEmpty ())
- _r_str_trim (result, delimeter);
+ _r_str_trim (string, delimeter);
- return result;
+ if (_r_str_isempty (string))
+ {
+ _r_obj_dereference (string);
+ return NULL;
+ }
+
+ return string;
}
BOOLEAN _app_isappfound (SIZE_T app_hash)
{
- return apps.find (app_hash) != apps.end ();
+ return app_hash && apps.find (app_hash) != apps.end ();
}
BOOLEAN _app_isapphelperfound (SIZE_T app_hash)
{
- return apps_helper.find (app_hash) != apps_helper.end ();
+ return app_hash && apps_helper.find (app_hash) != apps_helper.end ();
}
BOOLEAN _app_isapphaveconnection (SIZE_T app_hash)
@@ -1158,13 +1234,13 @@ BOOLEAN _app_isapphaveconnection (SIZE_T app_hash)
if (!app_hash)
return FALSE;
- for (auto &p : network_map)
+ for (auto it = network_map.begin (); it != network_map.end (); ++it)
{
- PITEM_NETWORK ptr_network = (PITEM_NETWORK)_r_obj_reference (p.second);
-
- if (!ptr_network)
+ if (!it->second)
continue;
+ PITEM_NETWORK ptr_network = (PITEM_NETWORK)_r_obj_reference (it->second);
+
if (ptr_network->app_hash == app_hash)
{
if (ptr_network->is_connection)
@@ -1182,33 +1258,29 @@ BOOLEAN _app_isapphaveconnection (SIZE_T app_hash)
BOOLEAN _app_isapphavedrive (INT letter)
{
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (!ptr_app)
+ if (!_r_str_isempty (ptr_app->original_path))
{
- _r_obj2_dereference (ptr_app_object);
- continue;
- }
+ INT drive_id = PathGetDriveNumber (ptr_app->original_path->Buffer);
- INT drive_id = PathGetDriveNumber (ptr_app->original_path);
-
- if ((drive_id != INVALID_INT && drive_id == letter) || ptr_app->type == DataAppDevice)
- {
- if (ptr_app->is_enabled || _app_isapphaverule (p.first))
+ if ((drive_id != INVALID_INT && drive_id == letter) || ptr_app->type == DataAppDevice)
{
- _r_obj2_dereference (ptr_app_object);
- return TRUE;
+ if (ptr_app->is_enabled || _app_isapphaverule (app_hash))
+ {
+ _r_obj_dereference (ptr_app);
+ return TRUE;
+ }
}
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
return FALSE;
@@ -1219,21 +1291,20 @@ BOOLEAN _app_isapphaverule (SIZE_T app_hash)
if (!app_hash)
return FALSE;
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
- if (!p)
+ if (!*it)
continue;
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule && ptr_rule->is_enabled && ptr_rule->type == DataRuleCustom && ptr_rule->apps.find (app_hash) != ptr_rule->apps.end ())
+ if (ptr_rule->is_enabled && ptr_rule->type == DataRuleCustom && ptr_rule->apps->find (app_hash) != ptr_rule->apps->end ())
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
return TRUE;
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
return FALSE;
@@ -1259,7 +1330,7 @@ BOOLEAN _app_isappexists (const PITEM_APP ptr_app)
return TRUE;
else if (ptr_app->type == DataAppRegular)
- return !_r_str_isempty (ptr_app->real_path) && _r_fs_exists (ptr_app->real_path);
+ return !_r_str_isempty (ptr_app->real_path) && _r_fs_exists (ptr_app->real_path->Buffer);
else if (ptr_app->type == DataAppService || ptr_app->type == DataAppUWP)
return _app_item_get (ptr_app->type, _r_str_hash (ptr_app->original_path), NULL, NULL, NULL, NULL);
@@ -1269,30 +1340,28 @@ BOOLEAN _app_isappexists (const PITEM_APP ptr_app)
BOOLEAN _app_isrulehost (LPCWSTR rule)
{
- PNET_ADDRESS_INFO pni = (PNET_ADDRESS_INFO)_r_mem_allocatezero (sizeof (NET_ADDRESS_INFO));
+ NET_ADDRESS_INFO addressInfo;
+ memset (&addressInfo, 0, sizeof (NET_ADDRESS_INFO));
USHORT port;
BYTE prefix_length;
DWORD types = NET_STRING_NAMED_ADDRESS | NET_STRING_NAMED_SERVICE;
- DWORD code = ParseNetworkString (rule, types, pni, &port, &prefix_length);
-
- _r_mem_free (pni);
+ DWORD code = ParseNetworkString (rule, types, &addressInfo, &port, &prefix_length);
return (code == ERROR_SUCCESS);
}
BOOLEAN _app_isruleip (LPCWSTR rule)
{
- PNET_ADDRESS_INFO pni = (PNET_ADDRESS_INFO)_r_mem_allocatezero (sizeof (NET_ADDRESS_INFO));
+ NET_ADDRESS_INFO addressInfo;
+ memset (&addressInfo, 0, sizeof (NET_ADDRESS_INFO));
USHORT port;
BYTE prefix_length;
DWORD types = NET_STRING_IP_ADDRESS | NET_STRING_IP_SERVICE | NET_STRING_IP_NETWORK | NET_STRING_IP_ADDRESS_NO_SCOPE | NET_STRING_IP_SERVICE_NO_SCOPE;
- DWORD code = ParseNetworkString (rule, types, pni, &port, &prefix_length);
-
- _r_mem_free (pni);
+ DWORD code = ParseNetworkString (rule, types, &addressInfo, &port, &prefix_length);
return (code == ERROR_SUCCESS);
}
@@ -1326,7 +1395,7 @@ BOOLEAN _app_isrulevalidchars (LPCWSTR rule)
{
BOOLEAN is_valid = FALSE;
- for (auto &chr : valid_chars)
+ for (auto chr : valid_chars)
{
if (rule[i] == chr)
{
@@ -1376,7 +1445,7 @@ BOOLEAN _app_profile_load_check (LPCWSTR path, ENUM_TYPE_XML type, BOOLEAN is_st
VOID _app_profile_load_fallback ()
{
if (!_app_isappfound (config.my_hash))
- _app_addapplication (NULL, app.GetBinaryPath (), 0, 0, 0, FALSE, TRUE);
+ _app_addapplication (NULL, app.GetAppBinaryPath (), 0, 0, 0, FALSE, TRUE);
_app_setappinfo (config.my_hash, InfoIsUndeletable, TRUE);
@@ -1387,7 +1456,7 @@ VOID _app_profile_load_fallback ()
_app_addapplication (NULL, PROC_SYSTEM_NAME, 0, 0, 0, FALSE, FALSE);
if (!_app_isappfound (config.svchost_hash))
- _app_addapplication (NULL, _r_path_expand (PATH_SVCHOST).GetString (), 0, 0, 0, FALSE, FALSE);
+ _app_addapplication (NULL, _r_obj_getstring (config.svchost_path), 0, 0, 0, FALSE, FALSE);
_app_setappinfo (config.ntoskrnl_hash, InfoIsUndeletable, TRUE);
_app_setappinfo (config.svchost_hash, InfoIsUndeletable, TRUE);
@@ -1408,25 +1477,44 @@ VOID _app_profile_load_helper (pugi::xml_node& root, ENUM_TYPE_DATA type, UINT v
}
else if (type == DataRuleBlocklist || type == DataRuleSystem || type == DataRuleCustom)
{
- PITEM_RULE ptr_rule = new ITEM_RULE;
-
- SIZE_T rule_hash = _r_str_hash (item.attribute (L"name").as_string ());
-
+ PITEM_RULE ptr_rule;
PITEM_RULE_CONFIG ptr_config = NULL;
+ SIZE_T rule_hash;
+ BOOLEAN is_internal;
- // allocate required memory
+ ptr_rule = (PITEM_RULE)_r_obj_allocateex (sizeof (ITEM_RULE), &_app_dereferencerule);
+
+ // initialize stl
+ ptr_rule->apps = new HASHER_MAP;
+ ptr_rule->guids = new GUIDS_VEC;
+
+ // set rule name
+ if (!item.attribute (L"name").empty ())
{
- rstring attr_name = item.attribute (L"name").as_string ();
- rstring attr_rule_remote = item.attribute (L"rule").as_string ();
- rstring attr_rule_local = item.attribute (L"rule_local").as_string ();
+ ptr_rule->name = _r_obj_createstring (item.attribute (L"name").as_string ());
- SIZE_T name_length = min (attr_name.GetLength (), RULE_NAME_CCH_MAX);
- SIZE_T rule_remote_length = min (attr_rule_remote.GetLength (), RULE_RULE_CCH_MAX);
- SIZE_T rule_local_length = min (attr_rule_local.GetLength (), RULE_RULE_CCH_MAX);
+ if (_r_obj_getstringlength (ptr_rule->name) > RULE_NAME_CCH_MAX)
+ _r_string_setsize (ptr_rule->name, RULE_NAME_CCH_MAX * sizeof (WCHAR));
- _r_str_alloc (&ptr_rule->pname, name_length, attr_name.GetString ());
- _r_str_alloc (&ptr_rule->prule_remote, rule_remote_length, attr_rule_remote.GetString ());
- _r_str_alloc (&ptr_rule->prule_local, rule_local_length, attr_rule_local.GetString ());
+ rule_hash = _r_str_hash (ptr_rule->name);
+ }
+
+ // set rule destination
+ if (!item.attribute (L"rule").empty ())
+ {
+ ptr_rule->rule_remote = _r_obj_createstring (item.attribute (L"rule").as_string ());
+
+ if (_r_obj_getstringlength (ptr_rule->rule_remote) > RULE_RULE_CCH_MAX)
+ _r_string_setsize (ptr_rule->rule_remote, RULE_RULE_CCH_MAX * sizeof (WCHAR));
+ }
+
+ // set rule source
+ if (!item.attribute (L"rule_local").empty ())
+ {
+ ptr_rule->rule_local = _r_obj_createstring (item.attribute (L"rule_local").as_string ());
+
+ if (_r_obj_getstringlength (ptr_rule->rule_local) > RULE_RULE_CCH_MAX)
+ _r_string_setsize (ptr_rule->rule_local, RULE_RULE_CCH_MAX * sizeof (WCHAR));
}
ptr_rule->direction = (FWP_DIRECTION)item.attribute (L"dir").as_int ();
@@ -1451,12 +1539,16 @@ VOID _app_profile_load_helper (pugi::xml_node& root, ENUM_TYPE_DATA type, UINT v
ptr_rule->is_enabled = item.attribute (L"is_enabled").as_bool ();
if (type == DataRuleBlocklist)
+ {
_app_ruleblocklistsetstate (ptr_rule, blocklist_spy_state, blocklist_update_state, blocklist_extra_state);
+ }
else
+ {
ptr_rule->is_enabled_default = ptr_rule->is_enabled; // set default value for rule
+ }
// load rules config
- BOOLEAN is_internal = (type == DataRuleBlocklist || type == DataRuleSystem);
+ is_internal = (type == DataRuleBlocklist || type == DataRuleSystem);
if (is_internal)
{
@@ -1472,62 +1564,91 @@ VOID _app_profile_load_helper (pugi::xml_node& root, ENUM_TYPE_DATA type, UINT v
// load apps
{
- rstring apps_rule = item.attribute (L"apps").as_string ();
+ PR_STRING ruleApps;
- if (is_internal && ptr_config && !_r_str_isempty (ptr_config->papps))
+ ruleApps = _r_obj_createstringbuilder (256 * sizeof (WCHAR));
+
+ if (!item.attribute (L"apps").empty ())
+ _r_string_append (&ruleApps, item.attribute (L"apps").as_string ());
+
+ if (is_internal && ptr_config && !_r_str_isempty (ptr_config->apps))
{
- if (apps_rule.IsEmpty ())
- apps_rule = ptr_config->papps;
-
+ if (!_r_str_isempty (ruleApps))
+ {
+ _r_string_appendformat (&ruleApps, L"%s%s", DIVIDER_APP, ptr_config->apps->Buffer);
+ }
else
- apps_rule.AppendFormat (L"%s%s", DIVIDER_APP, ptr_config->papps);
+ {
+ _r_string_append2 (&ruleApps, ptr_config->apps);
+ }
}
if (ptr_config)
_r_obj_dereference (ptr_config);
- if (!apps_rule.IsEmpty ())
+ if (!_r_str_isempty (ruleApps))
{
if (version < XML_PROFILE_VER_3)
- _r_str_replace (apps_rule.GetBuffer (), DIVIDER_RULE[0], DIVIDER_APP[0]); // for compat with old profiles
+ _r_str_replacechar (ruleApps->Buffer, DIVIDER_RULE[0], DIVIDER_APP[0]); // for compat with old profiles
- rstringvec rvc;
- _r_str_split (apps_rule.GetString (), apps_rule.GetLength (), DIVIDER_APP[0], rvc);
+ R_STRINGREF remainingPart;
+ PR_STRING appPath;
+ PR_STRING expandedPath;
+ SIZE_T app_hash;
- for (auto& p : rvc)
+ _r_stringref_initializeex (&remainingPart, ruleApps->Buffer, ruleApps->Length);
+
+ while (remainingPart.Length != 0)
{
- _r_str_trim (p, DIVIDER_TRIM);
+ appPath = _r_str_splitatchar (&remainingPart, &remainingPart, DIVIDER_APP[0], TRUE);
- rstring app_path = _r_path_expand (p.GetString ());
- SIZE_T app_hash = _r_str_hash (app_path.GetString ());
-
- if (app_hash)
+ if (appPath)
{
- if (item.attribute (L"is_services").as_bool () && (app_hash == config.ntoskrnl_hash || app_hash == config.svchost_hash))
- continue;
+ expandedPath = _r_str_expandenvironmentstring (appPath);
- if (!_app_isappfound (app_hash))
- app_hash = _app_addapplication (NULL, app_path.GetString (), 0, 0, 0, FALSE, FALSE);
+ if (expandedPath)
+ _r_obj_movereference (&appPath, expandedPath);
- if (ptr_rule->type == DataRuleSystem)
- _app_setappinfo (app_hash, InfoIsUndeletable, TRUE);
+ if (appPath)
+ {
+ app_hash = _r_str_hash (appPath);
- ptr_rule->apps[app_hash] = TRUE;
+ if (app_hash)
+ {
+ if (item.attribute (L"is_services").as_bool () && (app_hash == config.ntoskrnl_hash || app_hash == config.svchost_hash))
+ {
+ _r_obj_dereference (appPath);
+ continue;
+ }
+
+ if (!_app_isappfound (app_hash))
+ app_hash = _app_addapplication (NULL, _r_obj_getstring (appPath), 0, 0, 0, FALSE, FALSE);
+
+ if (ptr_rule->type == DataRuleSystem)
+ _app_setappinfo (app_hash, InfoIsUndeletable, TRUE);
+
+ ptr_rule->apps->emplace (app_hash, TRUE);
+ }
+
+ _r_obj_dereference (appPath);
+ }
}
}
}
+
+ _r_obj_dereference (ruleApps);
}
- rules_arr.push_back (_r_obj2_allocateex (ptr_rule, &_app_dereferencerule));
+ rules_arr.emplace_back (ptr_rule);
}
else if (type == DataRulesConfig)
{
- rstring rule_name = item.attribute (L"name").as_string ();
+ LPCWSTR rule_name = item.attribute (L"name").as_string ();
- if (rule_name.IsEmpty ())
+ if (_r_str_isempty (rule_name))
continue;
- SIZE_T rule_hash = _r_str_hash (rule_name.GetString ());
+ SIZE_T rule_hash = _r_str_hash (rule_name);
if (rule_hash && rules_config.find (rule_hash) == rules_config.end ())
{
@@ -1535,13 +1656,11 @@ VOID _app_profile_load_helper (pugi::xml_node& root, ENUM_TYPE_DATA type, UINT v
ptr_config->is_enabled = item.attribute (L"is_enabled").as_bool ();
- rstring attr_apps = item.attribute (L"apps").as_string ();
+ ptr_config->name = _r_obj_createstring (rule_name);
+ ptr_config->apps = _r_obj_createstring (item.attribute (L"apps").as_string ());
if (version < XML_PROFILE_VER_3)
- _r_str_replace (attr_apps.GetBuffer (), DIVIDER_RULE[0], DIVIDER_APP[0]); // for compat with old profiles
-
- _r_str_alloc (&ptr_config->pname, rule_name.GetLength (), rule_name.GetString ());
- _r_str_alloc (&ptr_config->papps, attr_apps.GetLength (), attr_apps.GetString ());
+ _r_str_replacechar (ptr_config->apps->Buffer, DIVIDER_RULE[0], DIVIDER_APP[0]); // for compat with old profiles
rules_config[rule_hash] = ptr_config;
}
@@ -1584,7 +1703,7 @@ VOID _app_profile_load_internal (LPCWSTR path, LPCWSTR path_backup, time_t* ptim
// show only syntax, memory and i/o errors...
if (!load_original && load_original.status != pugi::status_file_not_found && load_original.status != pugi::status_no_document_element)
- app.LogError (L"pugi::load_file", 0, _r_fmt (L"status: %d,offset: %" TEXT (PR_PTRDIFF) L",text: %hs,file: %s", load_original.status, load_original.offset, load_original.description (), path).GetString (), UID);
+ app.LogErrorV (UID, L"pugi::load_file", 0, L"status: %d,offset: %" TEXT (PR_PTRDIFF) L",text: %hs,file: %s", load_original.status, load_original.offset, load_original.description (), path);
if (load_original && root)
{
@@ -1624,16 +1743,16 @@ VOID _app_profile_load (HWND hwnd, LPCWSTR path_custom)
_r_fastlock_acquireexclusive (&lock_apply);
// clear apps
- _app_freeobjects_map (apps, 0);
+ _app_freeapps_map (&apps);
// clear services/uwp apps
- _app_freeappshelper_map (apps_helper);
+ _app_freeappshelper_map (&apps_helper);
// clear rules config
- _app_freerulesconfig_map (rules_config);
+ _app_freerulesconfig_map (&rules_config);
// clear rules
- _app_freeobjects_vec (rules_arr);
+ _app_freerules_vec (&rules_arr);
// generate uwp apps list (win8+)
if (_r_sys_validversion (6, 2))
@@ -1658,7 +1777,7 @@ VOID _app_profile_load (HWND hwnd, LPCWSTR path_custom)
{
// show only syntax, memory and i/o errors...
if (result.status != pugi::status_file_not_found && result.status != pugi::status_no_document_element)
- app.LogError (L"pugi::load_file", 0, _r_fmt (L"status: %d,offset: %" TEXT (PR_PTRDIFF) L",text: %hs,file: %s", result.status, result.offset, result.description (), !_r_str_isempty (path_custom) ? path_custom : config.profile_path).GetString (), UID);
+ app.LogErrorV (UID, L"pugi::load_file", 0, L"status: %d,offset: %" TEXT (PR_PTRDIFF) L",text: %hs,file: %s", result.status, result.offset, result.description (), !_r_str_isempty (path_custom) ? path_custom : config.profile_path);
}
else
{
@@ -1703,47 +1822,48 @@ VOID _app_profile_load (HWND hwnd, LPCWSTR path_custom)
time_t current_time = _r_unixtime_now ();
// add apps
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- SIZE_T app_hash = p.first;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ SIZE_T app_hash = it->first;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app)
+ INT listview_id = _app_getlistview_id (ptr_app->type);
+
+ if (listview_id)
{
- INT listview_id = _app_getlistview_id (ptr_app->type);
+ _r_fastlock_acquireshared (&lock_checkbox);
- if (listview_id)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
+ _r_listview_additem (hwnd, listview_id, 0, 0, _r_obj_getstringordefault (ptr_app->display_name, SZ_EMPTY), ptr_app->icon_id, _app_getappgroup (app_hash, ptr_app), app_hash);
+ _app_setappiteminfo (hwnd, listview_id, 0, app_hash, ptr_app);
- _r_listview_additem (hwnd, listview_id, 0, 0, ptr_app->display_name, ptr_app->icon_id, _app_getappgroup (app_hash, ptr_app), app_hash);
- _app_setappiteminfo (hwnd, listview_id, 0, app_hash, ptr_app);
-
- _r_fastlock_releaseshared (&lock_checkbox);
- }
-
- // install timer
- if (ptr_app->timer)
- _app_timer_set (hwnd, ptr_app, ptr_app->timer - current_time);
+ _r_fastlock_releaseshared (&lock_checkbox);
}
- _r_obj2_dereference (ptr_app_object);
+ // install timer
+ if (ptr_app->timer)
+ _app_timer_set (hwnd, ptr_app, ptr_app->timer - current_time);
+
+ _r_obj_dereference (ptr_app);
}
// add services and store apps
- for (auto &p : apps_helper)
+ for (auto it = apps_helper.begin (); it != apps_helper.end (); ++it)
{
- PITEM_APP_HELPER ptr_app_item = (PITEM_APP_HELPER)_r_obj_reference (p.second);
-
- if (!ptr_app_item)
+ if (!it->second)
continue;
- _app_addapplication (hwnd, ptr_app_item->internal_name, ptr_app_item->timestamp, 0, 0, FALSE, FALSE);
+ PITEM_APP_HELPER ptr_app_item = (PITEM_APP_HELPER)_r_obj_reference (it->second);
+
+ if (_r_str_isempty (ptr_app_item->internal_name))
+ {
+ _r_obj_dereference (ptr_app_item);
+ continue;
+ }
+
+ _app_addapplication (hwnd, ptr_app_item->internal_name->Buffer, ptr_app_item->timestamp, 0, 0, FALSE, FALSE);
_r_obj_dereference (ptr_app_item);
}
@@ -1751,29 +1871,26 @@ VOID _app_profile_load (HWND hwnd, LPCWSTR path_custom)
// add rules
for (SIZE_T i = 0; i < rules_arr.size (); i++)
{
- PR_OBJECT ptr_rule_object = _r_obj2_reference (rules_arr.at (i));
+ PVOID pdata = rules_arr.at (i);
- if (!ptr_rule_object)
+ if (!pdata)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (pdata);
- if (ptr_rule)
+ INT listview_id = _app_getlistview_id (ptr_rule->type);
+
+ if (listview_id)
{
- INT listview_id = _app_getlistview_id (ptr_rule->type);
+ _r_fastlock_acquireshared (&lock_checkbox);
- if (listview_id)
- {
- _r_fastlock_acquireshared (&lock_checkbox);
+ _r_listview_additem (hwnd, listview_id, 0, 0, _r_obj_getstringordefault (ptr_rule->name, SZ_EMPTY), _app_getruleicon (ptr_rule), _app_getrulegroup (ptr_rule), i);
+ _app_setruleiteminfo (hwnd, listview_id, 0, ptr_rule, FALSE);
- _r_listview_additem (hwnd, listview_id, 0, 0, ptr_rule->pname, _app_getruleicon (ptr_rule), _app_getrulegroup (ptr_rule), i);
- _app_setruleiteminfo (hwnd, listview_id, 0, ptr_rule, FALSE);
-
- _r_fastlock_releaseshared (&lock_checkbox);
- }
+ _r_fastlock_releaseshared (&lock_checkbox);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
@@ -1812,76 +1929,60 @@ VOID _app_profile_save (LPCWSTR path_custom)
// save apps
if (root_apps)
{
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app)
+ if (_r_str_isempty (ptr_app->original_path) || (!_app_isappused (ptr_app, it->first) && (ptr_app->type == DataAppService || ptr_app->type == DataAppUWP)))
{
- if (!ptr_app->original_path)
- {
- _r_obj2_dereference (ptr_app_object);
- continue;
- }
-
- if (!_app_isappused (ptr_app, p.first) && (ptr_app->type == DataAppService || ptr_app->type == DataAppUWP))
- {
- _r_obj2_dereference (ptr_app_object);
- continue;
- }
-
- pugi::xml_node item = root_apps.append_child (L"item");
-
- if (item)
- {
- item.append_attribute (L"path").set_value (ptr_app->original_path);
-
- if (ptr_app->timestamp)
- item.append_attribute (L"timestamp").set_value (ptr_app->timestamp);
-
- // set timer (if presented)
- if (ptr_app->timer && _app_istimeractive (ptr_app))
- item.append_attribute (L"timer").set_value (ptr_app->timer);
-
- // ffu!
- if (ptr_app->profile)
- item.append_attribute (L"profile").set_value (ptr_app->profile);
-
- if (ptr_app->is_silent)
- item.append_attribute (L"is_silent").set_value (ptr_app->is_silent);
-
- if (ptr_app->is_enabled)
- item.append_attribute (L"is_enabled").set_value (ptr_app->is_enabled);
- }
+ _r_obj_dereference (ptr_app);
+ continue;
}
- _r_obj2_dereference (ptr_app_object);
+ pugi::xml_node item = root_apps.append_child (L"item");
+
+ if (item)
+ {
+ item.append_attribute (L"path").set_value (ptr_app->original_path->Buffer);
+
+ if (ptr_app->timestamp)
+ item.append_attribute (L"timestamp").set_value (ptr_app->timestamp);
+
+ // set timer (if presented)
+ if (ptr_app->timer && _app_istimeractive (ptr_app))
+ item.append_attribute (L"timer").set_value (ptr_app->timer);
+
+ // ffu!
+ if (ptr_app->profile)
+ item.append_attribute (L"profile").set_value (ptr_app->profile);
+
+ if (ptr_app->is_silent)
+ item.append_attribute (L"is_silent").set_value (ptr_app->is_silent);
+
+ if (ptr_app->is_enabled)
+ item.append_attribute (L"is_enabled").set_value (ptr_app->is_enabled);
+ }
+
+ _r_obj_dereference (ptr_app);
}
}
// save user rules
if (root_rules_custom)
{
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
- if (!p)
+ if (!*it)
continue;
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (!ptr_rule_object)
- continue;
-
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
-
- if (!ptr_rule || ptr_rule->is_readonly || _r_str_isempty (ptr_rule->pname))
+ if (ptr_rule->is_readonly || _r_str_isempty (ptr_rule->name))
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
continue;
}
@@ -1889,13 +1990,13 @@ VOID _app_profile_save (LPCWSTR path_custom)
if (item)
{
- item.append_attribute (L"name").set_value (ptr_rule->pname);
+ item.append_attribute (L"name").set_value (ptr_rule->name->Buffer);
- if (!_r_str_isempty (ptr_rule->prule_remote))
- item.append_attribute (L"rule").set_value (ptr_rule->prule_remote);
+ if (!_r_str_isempty (ptr_rule->rule_remote))
+ item.append_attribute (L"rule").set_value (ptr_rule->rule_remote->Buffer);
- if (!_r_str_isempty (ptr_rule->prule_local))
- item.append_attribute (L"rule_local").set_value (ptr_rule->prule_local);
+ if (!_r_str_isempty (ptr_rule->rule_local))
+ item.append_attribute (L"rule_local").set_value (ptr_rule->rule_local->Buffer);
// ffu!
if (ptr_rule->profile)
@@ -1911,12 +2012,17 @@ VOID _app_profile_save (LPCWSTR path_custom)
item.append_attribute (L"version").set_value (ptr_rule->af);
// add apps attribute
- if (!ptr_rule->apps.empty ())
+ if (!ptr_rule->apps->empty ())
{
- rstring rule_apps = _app_rulesexpandapps (ptr_rule, FALSE, DIVIDER_APP);
+ PR_STRING rule_apps = _app_rulesexpandapps (ptr_rule, FALSE, DIVIDER_APP);
- if (!rule_apps.IsEmpty ())
- item.append_attribute (L"apps").set_value (rule_apps.GetString ());
+ if (rule_apps)
+ {
+ if (!_r_str_isempty (rule_apps))
+ item.append_attribute (L"apps").set_value (rule_apps->Buffer);
+
+ _r_obj_dereference (rule_apps);
+ }
}
if (ptr_rule->is_block)
@@ -1926,67 +2032,70 @@ VOID _app_profile_save (LPCWSTR path_custom)
item.append_attribute (L"is_enabled").set_value (ptr_rule->is_enabled);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
// save rules config
if (root_rule_config)
{
- for (auto &p : rules_config)
+ for (auto it = rules_config.begin (); it != rules_config.end (); ++it)
{
- PITEM_RULE_CONFIG ptr_config = (PITEM_RULE_CONFIG)_r_obj_reference (p.second);
-
- if (!ptr_config)
+ if (!it->second)
continue;
- if (_r_str_isempty (ptr_config->pname))
+ PITEM_RULE_CONFIG ptr_config = (PITEM_RULE_CONFIG)_r_obj_reference (it->second);
+
+ if (_r_str_isempty (ptr_config->name))
{
_r_obj_dereference (ptr_config);
continue;
}
- rstring rule_apps;
+ PR_STRING rule_apps = NULL;
BOOLEAN is_enabled_default = ptr_config->is_enabled;
{
- SIZE_T rule_hash = _r_str_hash (ptr_config->pname);
- PR_OBJECT ptr_rule_object = _app_getrulebyhash (rule_hash);
+ SIZE_T rule_hash = _r_str_hash (ptr_config->name);
+ PITEM_RULE ptr_rule = _app_getrulebyhash (rule_hash);
- if (ptr_rule_object)
+ if (ptr_rule)
{
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ is_enabled_default = ptr_rule->is_enabled_default;
- if (ptr_rule)
+ if (ptr_rule->type == DataRuleCustom && !ptr_rule->apps->empty ())
{
- is_enabled_default = ptr_rule->is_enabled_default;
-
- if (ptr_rule->type == DataRuleCustom && !ptr_rule->apps.empty ())
- rule_apps = _app_rulesexpandapps (ptr_rule, FALSE, DIVIDER_APP);
+ rule_apps = _app_rulesexpandapps (ptr_rule, FALSE, DIVIDER_APP);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
// skip saving untouched configuration
- if (ptr_config->is_enabled == is_enabled_default)
+ if (ptr_config->is_enabled == is_enabled_default && _r_str_isempty (rule_apps))
{
- if (rule_apps.IsEmpty ())
- {
- _r_obj_dereference (ptr_config);
- continue;
- }
+ if (rule_apps)
+ _r_obj_clearreference (&rule_apps);
+
+ _r_obj_dereference (ptr_config);
+
+ continue;
}
pugi::xml_node item = root_rule_config.append_child (L"item");
if (item)
{
- item.append_attribute (L"name").set_value (ptr_config->pname);
+ item.append_attribute (L"name").set_value (ptr_config->name->Buffer);
- if (!rule_apps.IsEmpty ())
- item.append_attribute (L"apps").set_value (rule_apps.GetString ());
+ if (rule_apps)
+ {
+ if (!_r_str_isempty (rule_apps))
+ item.append_attribute (L"apps").set_value (rule_apps->Buffer);
+
+ _r_obj_clearreference (&rule_apps);
+ }
item.append_attribute (L"is_enabled").set_value (ptr_config->is_enabled);
}
diff --git a/src/profile.hpp b/src/profile.hpp
index dce5fe05..6f7334f8 100644
--- a/src/profile.hpp
+++ b/src/profile.hpp
@@ -8,10 +8,10 @@ BOOLEAN _app_setappinfo (SIZE_T app_hash, ENUM_INFO_DATA info_key, LONG_PTR info
SIZE_T _app_addapplication (HWND hwnd, LPCWSTR path, time_t timestamp, time_t timer, time_t last_notify, BOOLEAN is_silent, BOOLEAN is_enabled);
-PR_OBJECT _app_getappitem (SIZE_T app_hash);
+PITEM_APP _app_getappitem (SIZE_T app_hash);
PITEM_APP_HELPER _app_getapphelperitem (SIZE_T app_hash);
-PR_OBJECT _app_getrulebyid (SIZE_T idx);
-PR_OBJECT _app_getrulebyhash (SIZE_T rule_hash);
+PITEM_RULE _app_getrulebyid (SIZE_T idx);
+PITEM_RULE _app_getrulebyhash (SIZE_T rule_hash);
PITEM_NETWORK _app_getnetworkitem (SIZE_T network_hash);
SIZE_T _app_getnetworkapp (SIZE_T network_hash);
PITEM_LOG _app_getlogitem (SIZE_T idx);
@@ -27,7 +27,7 @@ INT _app_getrulegroup (const PITEM_RULE ptr_rule);
INT _app_getruleicon (const PITEM_RULE ptr_rule);
COLORREF _app_getrulecolor (INT listview_id, SIZE_T rule_idx);
-rstring _app_gettooltip (HWND hwnd, LPNMLVGETINFOTIP lpnmlv);
+PR_STRING _app_gettooltip (HWND hwnd, LPNMLVGETINFOTIP lpnmlv);
VOID _app_setappiteminfo (HWND hwnd, INT listview_id, INT item, SIZE_T app_hash, PITEM_APP ptr_app);
VOID _app_setruleiteminfo (HWND hwnd, INT listview_id, INT item, PITEM_RULE ptr_rule, BOOLEAN include_apps);
@@ -39,8 +39,8 @@ BOOLEAN _app_ruleblocklistsetchange (PITEM_RULE ptr_rule, INT new_state);
BOOLEAN _app_ruleblocklistsetstate (PITEM_RULE ptr_rule, INT spy_state, INT update_state, INT extra_state);
VOID _app_ruleblocklistset (HWND hwnd, INT spy_state, INT update_state, INT extra_state, BOOLEAN is_instantapply);
-rstring _app_appexpandrules (SIZE_T app_hash, LPCWSTR delimeter);
-rstring _app_rulesexpandapps (const PITEM_RULE ptr_rule, BOOLEAN is_fordisplay, LPCWSTR delimeter);
+PR_STRING _app_appexpandrules (SIZE_T app_hash, LPCWSTR delimeter);
+PR_STRING _app_rulesexpandapps (const PITEM_RULE ptr_rule, BOOLEAN is_fordisplay, LPCWSTR delimeter);
BOOLEAN _app_isappfound (SIZE_T app_hash);
BOOLEAN _app_isapphelperfound (SIZE_T app_hash);
diff --git a/src/wfp.cpp b/src/wfp.cpp
index 2d79a8ee..16c273b7 100644
--- a/src/wfp.cpp
+++ b/src/wfp.cpp
@@ -15,12 +15,15 @@ ENUM_INSTALL_TYPE _wfp_isproviderinstalled (HANDLE hengine)
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\services\\BFE\\Parameters\\Policy\\Persistent\\Provider", 0, KEY_READ, &hkey) == ERROR_SUCCESS)
{
- static rstring guidString = _r_str_fromguid ((LPGUID)&GUID_WfpProvider);
+ static PR_STRING guidString = _r_str_fromguid ((LPGUID)&GUID_WfpProvider);
- if (RegQueryValueEx (hkey, guidString.GetString (), NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ if (guidString)
{
- RegCloseKey (hkey);
- return InstallEnabled;
+ if (RegQueryValueEx (hkey, guidString->Buffer, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ {
+ RegCloseKey (hkey);
+ return InstallEnabled;
+ }
}
RegCloseKey (hkey);
@@ -46,12 +49,15 @@ ENUM_INSTALL_TYPE _wfp_issublayerinstalled (HANDLE hengine)
if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, L"SYSTEM\\CurrentControlSet\\services\\BFE\\Parameters\\Policy\\Persistent\\SubLayer", 0, KEY_READ, &hkey) == ERROR_SUCCESS)
{
- static rstring guidString = _r_str_fromguid ((LPGUID)&GUID_WfpSublayer);
+ static PR_STRING guidString = _r_str_fromguid ((LPGUID)&GUID_WfpSublayer);
- if (RegQueryValueEx (hkey, guidString.GetString (), NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ if (guidString)
{
- RegCloseKey (hkey);
- return InstallEnabled;
+ if (RegQueryValueEx (hkey, guidString->Buffer, NULL, NULL, NULL, NULL) == ERROR_SUCCESS)
+ {
+ RegCloseKey (hkey);
+ return InstallEnabled;
+ }
}
RegCloseKey (hkey);
@@ -101,7 +107,7 @@ HANDLE _wfp_getenginehandle ()
if (code != ERROR_SUCCESS)
{
- app.LogError (L"FwpmEngineOpen", code, NULL, UID);
+ app.LogError (UID, L"FwpmEngineOpen", code, NULL);
}
else
{
@@ -181,7 +187,7 @@ BOOLEAN _wfp_initialize (HANDLE hengine, BOOLEAN is_full)
is_intransact = FALSE;
}
- app.LogError (L"FwpmProviderAdd", code, NULL, UID);
+ app.LogError (UID, L"FwpmProviderAdd", code, NULL);
result = FALSE;
goto DoExit;
@@ -216,7 +222,7 @@ BOOLEAN _wfp_initialize (HANDLE hengine, BOOLEAN is_full)
is_intransact = FALSE;
}
- app.LogError (L"FwpmSubLayerAdd", code, NULL, UID);
+ app.LogError (UID, L"FwpmSubLayerAdd", code, NULL);
result = FALSE;
goto DoExit;
@@ -261,7 +267,7 @@ BOOLEAN _wfp_initialize (HANDLE hengine, BOOLEAN is_full)
if (code != ERROR_SUCCESS)
{
- app.LogError (L"FwpmEngineSetOption", code, L"FWPM_ENGINE_COLLECT_NET_EVENTS", 0);
+ app.LogError (0, L"FwpmEngineSetOption", code, L"FWPM_ENGINE_COLLECT_NET_EVENTS");
}
else
{
@@ -281,7 +287,7 @@ BOOLEAN _wfp_initialize (HANDLE hengine, BOOLEAN is_full)
code = FwpmEngineSetOption (hengine, FWPM_ENGINE_NET_EVENT_MATCH_ANY_KEYWORDS, &val);
if (code != ERROR_SUCCESS)
- app.LogError (L"FwpmEngineSetOption", code, L"FWPM_ENGINE_NET_EVENT_MATCH_ANY_KEYWORDS", 0);
+ app.LogError (0, L"FwpmEngineSetOption", code, L"FWPM_ENGINE_NET_EVENT_MATCH_ANY_KEYWORDS");
// enables the connection monitoring feature and starts logging creation and deletion events (and notifying any subscribers)
if (app.ConfigGetBoolean (L"IsMonitorIPSecConnections", TRUE))
@@ -292,7 +298,7 @@ BOOLEAN _wfp_initialize (HANDLE hengine, BOOLEAN is_full)
code = FwpmEngineSetOption (hengine, FWPM_ENGINE_MONITOR_IPSEC_CONNECTIONS, &val);
if (code != ERROR_SUCCESS)
- app.LogError (L"FwpmEngineSetOption", code, L"FWPM_ENGINE_MONITOR_IPSEC_CONNECTIONS", 0);
+ app.LogError (0, L"FwpmEngineSetOption", code, L"FWPM_ENGINE_MONITOR_IPSEC_CONNECTIONS");
}
}
@@ -312,7 +318,7 @@ BOOLEAN _wfp_initialize (HANDLE hengine, BOOLEAN is_full)
code = FwpmEngineSetOption (hengine, FWPM_ENGINE_PACKET_QUEUING, &val);
if (code != ERROR_SUCCESS)
- app.LogError (L"FwpmEngineSetOption", code, L"FWPM_ENGINE_PACKET_QUEUING", 0);
+ app.LogError (0, L"FwpmEngineSetOption", code, L"FWPM_ENGINE_PACKET_QUEUING");
}
}
@@ -364,7 +370,7 @@ VOID _wfp_uninitialize (HANDLE hengine, BOOLEAN is_full)
// destroy callouts (deprecated)
{
- LPGUID callouts[] = {
+ LPCGUID callouts[] = {
&GUID_WfpOutboundCallout4_DEPRECATED,
&GUID_WfpOutboundCallout6_DEPRECATED,
&GUID_WfpInboundCallout4_DEPRECATED,
@@ -373,21 +379,21 @@ VOID _wfp_uninitialize (HANDLE hengine, BOOLEAN is_full)
&GUID_WfpListenCallout6_DEPRECATED
};
- for (auto &callout_id : callouts)
- FwpmCalloutDeleteByKey (hengine, callout_id);
+ for (SIZE_T i = 0; i < RTL_NUMBER_OF (callouts); i++)
+ FwpmCalloutDeleteByKey (hengine, callouts[i]);
}
// destroy sublayer
code = FwpmSubLayerDeleteByKey (hengine, &GUID_WfpSublayer);
if (code != ERROR_SUCCESS && code != FWP_E_SUBLAYER_NOT_FOUND)
- app.LogError (L"FwpmSubLayerDeleteByKey", code, NULL, UID);
+ app.LogError (UID, L"FwpmSubLayerDeleteByKey", code, NULL);
// destroy provider
code = FwpmProviderDeleteByKey (hengine, &GUID_WfpProvider);
if (code != ERROR_SUCCESS && code != FWP_E_PROVIDER_NOT_FOUND)
- app.LogError (L"FwpmProviderDeleteByKey", code, NULL, UID);
+ app.LogError (UID, L"FwpmProviderDeleteByKey", code, NULL);
if (is_intransact)
_wfp_transact_commit (hengine, __LINE__);
@@ -413,8 +419,8 @@ VOID _wfp_installfilters (HANDLE hengine)
// restore filters security
if (filters_count)
{
- for (auto &filter_id : filter_all)
- _app_setsecurityinfoforfilter (hengine, &filter_id, FALSE, __LINE__);
+ for (auto it = filter_all.begin (); it != filter_all.end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), FALSE, __LINE__);
}
BOOLEAN is_intransact = _wfp_transact_start (hengine, __LINE__);
@@ -422,8 +428,8 @@ VOID _wfp_installfilters (HANDLE hengine)
// destroy all filters
if (filters_count)
{
- for (auto &p : filter_all)
- _wfp_deletefilter (hengine, &p);
+ for (auto it = filter_all.begin (); it != filter_all.end (); ++it)
+ _wfp_deletefilter (hengine, &(*it));
}
// apply internal rules
@@ -431,61 +437,57 @@ VOID _wfp_installfilters (HANDLE hengine)
// apply apps rules
{
- OBJECTS_VEC rules;
+ OBJECTS_APP_VECTOR rules;
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app && ptr_app->is_enabled)
+ if (ptr_app->is_enabled)
{
- rules.push_back (ptr_app_object);
+ rules.emplace_back (ptr_app);
}
else
{
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
if (!rules.empty ())
{
- _wfp_create3filters (hengine, rules, __LINE__, is_intransact);
- _app_freeobjects_vec (rules);
+ _wfp_create3filters (hengine, &rules, __LINE__, is_intransact);
+ _app_freeapps_vec (&rules);
}
}
// apply blocklist/system/user rules
{
- OBJECTS_VEC rules;
+ OBJECTS_RULE_VECTOR rules;
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
-
- if (!ptr_rule_object)
+ if (!*it)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule && ptr_rule->is_enabled)
+ if (ptr_rule->is_enabled)
{
- rules.push_back (ptr_rule_object);
+ rules.emplace_back (ptr_rule);
}
else
{
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
if (!rules.empty ())
{
- _wfp_create4filters (hengine, rules, __LINE__, is_intransact);
- _app_freeobjects_vec (rules);
+ _wfp_create4filters (hengine, &rules, __LINE__, is_intransact);
+ _app_freerules_vec (&rules);
}
}
@@ -499,8 +501,8 @@ VOID _wfp_installfilters (HANDLE hengine)
{
if (_wfp_dumpfilters (hengine, &GUID_WfpProvider, &filter_all))
{
- for (auto &filter_id : filter_all)
- _app_setsecurityinfoforfilter (hengine, &filter_id, is_secure, __LINE__);
+ for (auto it = filter_all.begin (); it != filter_all.end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), is_secure, __LINE__);
}
}
@@ -519,7 +521,7 @@ BOOLEAN _wfp_transact_start (HANDLE hengine, UINT line)
if (code != ERROR_SUCCESS)
{
- app.LogError (L"FwpmTransactionBegin", code, _r_fmt (L"#%d", line).GetString (), UID);
+ app.LogErrorV (UID, L"FwpmTransactionBegin", code, L"#%" TEXT (PRIu32), line);
return FALSE;
}
@@ -534,7 +536,7 @@ BOOLEAN _wfp_transact_commit (HANDLE hengine, UINT line)
{
FwpmTransactionAbort (hengine);
- app.LogError (L"FwpmTransactionCommit", code, _r_fmt (L"#%d", line).GetString (), UID);
+ app.LogErrorV (UID, L"FwpmTransactionCommit", code, L"#%" TEXT (PRIu32), line);
return FALSE;
}
@@ -542,13 +544,19 @@ BOOLEAN _wfp_transact_commit (HANDLE hengine, UINT line)
return TRUE;
}
-BOOLEAN _wfp_deletefilter (HANDLE hengine, const LPGUID pfilter_id)
+BOOLEAN _wfp_deletefilter (HANDLE hengine, LPCGUID pfilter_id)
{
DWORD code = FwpmFilterDeleteByKey (hengine, pfilter_id);
if (code != ERROR_SUCCESS && code != FWP_E_FILTER_NOT_FOUND)
{
- app.LogError (L"FwpmFilterDeleteByKey", code, _r_str_fromguid (pfilter_id).GetString (), UID);
+ PR_STRING guidString = _r_str_fromguid ((LPGUID)pfilter_id);
+
+ app.LogError (UID, L"FwpmFilterDeleteByKey", code, _r_obj_getstringordefault (guidString, SZ_EMPTY));
+
+ if (guidString)
+ _r_obj_dereference (guidString);
+
return FALSE;
}
@@ -558,12 +566,13 @@ BOOLEAN _wfp_deletefilter (HANDLE hengine, const LPGUID pfilter_id)
DWORD _wfp_createfilter (HANDLE hengine, LPCWSTR name, FWPM_FILTER_CONDITION* lpcond, UINT32 count, UINT8 weight, const GUID* layer_id, const GUID* callout_id, FWP_ACTION_TYPE action, UINT32 flags, GUIDS_VEC* ptr_filters)
{
FWPM_FILTER filter = {0};
-
WCHAR fltr_name[128];
- _r_str_copy (fltr_name, RTL_NUMBER_OF (fltr_name), APP_NAME);
-
WCHAR fltr_desc[128];
- _r_str_copy (fltr_desc, RTL_NUMBER_OF (fltr_desc), _r_str_isempty (name) ? SZ_EMPTY : name);
+ ULONG code;
+ UINT64 filter_id;
+
+ _r_str_copy (fltr_name, RTL_NUMBER_OF (fltr_name), APP_NAME);
+ _r_str_copy (fltr_desc, RTL_NUMBER_OF (fltr_desc), name ? name : SZ_EMPTY);
filter.displayData.name = fltr_name;
filter.displayData.description = fltr_desc;
@@ -603,17 +612,16 @@ DWORD _wfp_createfilter (HANDLE hengine, LPCWSTR name, FWPM_FILTER_CONDITION* lp
filter.action.type = action;
- UINT64 filter_id;
- DWORD code = FwpmFilterAdd (hengine, &filter, NULL, &filter_id);
+ code = FwpmFilterAdd (hengine, &filter, NULL, &filter_id);
if (code == ERROR_SUCCESS)
{
if (ptr_filters)
- ptr_filters->push_back (filter.filterKey);
+ ptr_filters->emplace_back (filter.filterKey);
}
else
{
- app.LogError (L"FwpmFilterAdd", code, fltr_desc, UID);
+ app.LogError (UID, L"FwpmFilterAdd", code, fltr_desc);
}
return code;
@@ -625,41 +633,31 @@ VOID _wfp_clearfilter_ids ()
filter_ids.clear ();
// clear apps filters
- for (auto &p : apps)
+ for (auto it = apps.begin (); it != apps.end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p.second);
-
- if (!ptr_app_object)
+ if (!it->second)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (it->second);
- if (ptr_app)
- {
- ptr_app->is_haveerrors = FALSE;
- ptr_app->guids.clear ();
- }
+ ptr_app->is_haveerrors = FALSE;
+ ptr_app->guids->clear ();
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
// clear rules filters
- for (auto &p : rules_arr)
+ for (auto it = rules_arr.begin (); it != rules_arr.end (); ++it)
{
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
-
- if (!ptr_rule_object)
+ if (!*it)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule)
- {
- ptr_rule->is_haveerrors = FALSE;
- ptr_rule->guids.clear ();
- }
+ ptr_rule->is_haveerrors = FALSE;
+ ptr_rule->guids->clear ();
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
@@ -673,29 +671,29 @@ VOID _wfp_destroyfilters (HANDLE hengine)
_r_fastlock_acquireshared (&lock_transaction);
if (_wfp_dumpfilters (hengine, &GUID_WfpProvider, &filter_all))
- _wfp_destroyfilters_array (hengine, filter_all, __LINE__);
+ _wfp_destroyfilters_array (hengine, &filter_all, __LINE__);
_r_fastlock_releaseshared (&lock_transaction);
}
-BOOLEAN _wfp_destroyfilters_array (HANDLE hengine, GUIDS_VEC& ptr_filters, UINT line)
+BOOLEAN _wfp_destroyfilters_array (HANDLE hengine, GUIDS_VEC* ptr_filters, UINT line)
{
- if (ptr_filters.empty ())
+ if (ptr_filters->empty ())
return FALSE;
BOOLEAN is_enabled = _app_initinterfacestate (app.GetHWND (), FALSE);
_r_fastlock_acquireshared (&lock_transaction);
- for (auto &filter_id : ptr_filters)
- _app_setsecurityinfoforfilter (hengine, &filter_id, FALSE, line);
+ for (auto it = ptr_filters->begin (); it != ptr_filters->end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), FALSE, line);
BOOLEAN is_intransact = _wfp_transact_start (hengine, line);
- for (auto &filter_id : ptr_filters)
- _wfp_deletefilter (hengine, &filter_id);
+ for (auto it = ptr_filters->begin (); it != ptr_filters->end (); ++it)
+ _wfp_deletefilter (hengine, &(*it));
- ptr_filters.clear ();
+ ptr_filters->clear ();
if (is_intransact)
_wfp_transact_commit (hengine, line);
@@ -707,7 +705,7 @@ BOOLEAN _wfp_destroyfilters_array (HANDLE hengine, GUIDS_VEC& ptr_filters, UINT
return TRUE;
}
-BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LPCWSTR rule_remote, LPCWSTR rule_local, UINT8 protocol, ADDRESS_FAMILY af, FWP_DIRECTION dir, UINT8 weight, FWP_ACTION_TYPE action, UINT32 flag, GUIDS_VEC* pmfarr)
+BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, PR_STRING rule_remote, PR_STRING rule_local, UINT8 protocol, ADDRESS_FAMILY af, FWP_DIRECTION dir, UINT8 weight, FWP_ACTION_TYPE action, UINT32 flag, GUIDS_VEC* pmfarr)
{
UINT32 count = 0;
FWPM_FILTER_CONDITION fwfc[8] = {0};
@@ -734,31 +732,22 @@ BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LP
// set path condition
if (app_hash)
{
- PR_OBJECT ptr_app_object = _app_getappitem (app_hash);
-
- if (!ptr_app_object)
- {
- app.LogError (TEXT (__FUNCTION__), 0, _r_fmt (L"App \"%" TEXT (PR_SIZE_T) L"\" not found!", app_hash).GetString (), 0);
- return FALSE;
- }
-
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = _app_getappitem (app_hash);
if (!ptr_app)
{
- app.LogError (TEXT (__FUNCTION__), 0, _r_fmt (L"App \"%" TEXT (PR_SIZE_T) L"\" not found!", app_hash).GetString (), 0);
- _r_obj2_dereference (ptr_app_object);
-
+ app.LogErrorV (0, TEXT (__FUNCTION__), 0, L"App \"%" TEXT (PR_SIZE_T) L"\" not found!", app_hash);
return FALSE;
}
-
if (ptr_app->type == DataAppService) // windows service
{
PVOID pdata = NULL;
- if (_app_item_get (ptr_app->type, app_hash, NULL, NULL, NULL, &pdata) && ByteBlobAlloc (pdata, RtlLengthSecurityDescriptor (pdata), &bSid))
+ if (_app_item_get (ptr_app->type, app_hash, NULL, NULL, NULL, &pdata))
{
+ ByteBlobAlloc (pdata, RtlLengthSecurityDescriptor (pdata), &bSid);
+
fwfc[count].fieldKey = FWPM_CONDITION_ALE_USER_ID;
fwfc[count].matchType = FWP_MATCH_EQUAL;
fwfc[count].conditionValue.type = FWP_SECURITY_DESCRIPTOR_TYPE;
@@ -768,11 +757,8 @@ BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LP
}
else
{
- ByteBlobFree (&bPath);
- ByteBlobFree (&bSid);
-
- app.LogError (TEXT (__FUNCTION__), 0, ptr_app->display_name, 0);
- _r_obj2_dereference (ptr_app_object);
+ app.LogError (0, TEXT (__FUNCTION__), 0, _r_obj_getstring (ptr_app->display_name));
+ _r_obj_dereference (ptr_app);
return FALSE;
}
@@ -792,15 +778,15 @@ BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LP
}
else
{
- app.LogError (TEXT (__FUNCTION__), 0, ptr_app->display_name, 0);
- _r_obj2_dereference (ptr_app_object);
+ app.LogError (0, TEXT (__FUNCTION__), 0, _r_obj_getstring (ptr_app->display_name));
+ _r_obj_dereference (ptr_app);
return FALSE;
}
}
else
{
- LPCWSTR path = ptr_app->original_path;
+ LPCWSTR path = _r_obj_getstring (ptr_app->original_path);
DWORD code = _FwpmGetAppIdFromFileName1 (path, &bPath, ptr_app->type);
if (code == ERROR_SUCCESS)
@@ -814,25 +800,24 @@ BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LP
}
else
{
- ByteBlobFree (&bSid);
ByteBlobFree (&bPath);
// do not log file not found to error log
if (code != ERROR_FILE_NOT_FOUND && code != ERROR_PATH_NOT_FOUND)
- app.LogError (L"FwpmGetAppIdFromFileName", code, path, 0);
+ app.LogError (0, L"FwpmGetAppIdFromFileName", code, path);
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
return FALSE;
}
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
// set ip/port condition
{
- LPCWSTR rules[] = {
+ PR_STRING rules[] = {
rule_remote,
rule_local
};
@@ -924,19 +909,26 @@ BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LP
ByteBlobFree (&bSid);
ByteBlobFree (&bPath);
- rstringvec rvc;
- _r_str_split (addr.host, INVALID_SIZE_T, DIVIDER_RULE[0], rvc);
+ PR_STRING hostPart;
+ R_STRINGREF remainingPart;
- if (rvc.empty ())
+ _r_stringref_initialize (&remainingPart, addr.host);
+
+ while (remainingPart.Length != 0)
{
- return FALSE;
- }
- else
- {
- for (auto &p : rvc)
+ hostPart = _r_str_splitatchar (&remainingPart, &remainingPart, DIVIDER_RULE[0], TRUE);
+
+ if (hostPart)
{
- if (!_wfp_createrulefilter (hengine, name, app_hash, p.GetString (), NULL, protocol, af, dir, weight, action, flag, pmfarr))
+ if (!_wfp_createrulefilter (hengine, name, app_hash, hostPart, NULL, protocol, af, dir, weight, action, flag, pmfarr))
+ {
+ ByteBlobFree (&bSid);
+ ByteBlobFree (&bPath);
+
return FALSE;
+ }
+
+ _r_obj_dereference (hostPart);
}
}
@@ -1030,9 +1022,9 @@ BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LP
return TRUE;
}
-BOOLEAN _wfp_create4filters (HANDLE hengine, const OBJECTS_VEC& ptr_rules, UINT line, BOOLEAN is_intransact)
+BOOLEAN _wfp_create4filters (HANDLE hengine, OBJECTS_RULE_VECTOR* ptr_rules, UINT line, BOOLEAN is_intransact)
{
- if (ptr_rules.empty ())
+ if (ptr_rules->empty ())
return FALSE;
BOOLEAN is_enabled = _app_initinterfacestate (app.GetHWND (), FALSE);
@@ -1040,123 +1032,125 @@ BOOLEAN _wfp_create4filters (HANDLE hengine, const OBJECTS_VEC& ptr_rules, UINT
if (!is_intransact && _wfp_isfiltersapplying ())
is_intransact = TRUE;
- GUIDS_VEC ids;
+ GUIDS_VEC guids;
if (!is_intransact)
{
- for (auto &p : ptr_rules)
+ for (auto it = ptr_rules->begin (); it != ptr_rules->end (); ++it)
{
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
-
- if (!ptr_rule_object)
+ if (!*it)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule)
+ if (!ptr_rule->guids->empty ())
{
- if (!ptr_rule->guids.empty ())
- {
- ids.insert (ids.end (), ptr_rule->guids.begin (), ptr_rule->guids.end ());
- ptr_rule->guids.clear ();
- }
+ guids.insert (guids.end (), ptr_rule->guids->begin (), ptr_rule->guids->end ());
+ ptr_rule->guids->clear ();
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
- for (auto &filter_id : ids)
- _app_setsecurityinfoforfilter (hengine, &filter_id, FALSE, line);
+ for (auto it = guids.begin (); it != guids.end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), FALSE, line);
_r_fastlock_acquireshared (&lock_transaction);
is_intransact = !_wfp_transact_start (hengine, line);
}
- for (auto &p : ids)
- _wfp_deletefilter (hengine, &p);
+ for (auto it = guids.begin (); it != guids.end (); ++it)
+ _wfp_deletefilter (hengine, &(*it));
- for (auto &p : ptr_rules)
+ PITEM_RULE ptr_rule;
+ R_STRINGREF remoteRemainingPart;
+ R_STRINGREF localRemainingPart;
+ PR_STRING ruleRemoteString;
+ PR_STRING ruleLocalString;
+ LPCWSTR ruleNamePtr;
+
+ for (auto it = ptr_rules->begin (); it != ptr_rules->end (); ++it)
{
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
-
- if (!ptr_rule_object)
+ if (!*it)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule)
+ ptr_rule->is_haveerrors = FALSE;
+ ptr_rule->guids->clear ();
+
+ if (!ptr_rule->is_enabled)
{
- GUIDS_VEC guids;
- BOOLEAN is_haveerrors = FALSE;
-
- if (ptr_rule->is_enabled)
- {
- rstringvec rule_remote_arr;
- _r_str_split (ptr_rule->prule_remote, INVALID_SIZE_T, DIVIDER_RULE[0], rule_remote_arr);
-
- rstringvec rule_local_arr;
- _r_str_split (ptr_rule->prule_local, INVALID_SIZE_T, DIVIDER_RULE[0], rule_local_arr);
-
- SIZE_T rules_remote_length = rule_remote_arr.size ();
- SIZE_T rules_local_length = rule_local_arr.size ();
-
- SIZE_T count = max (1, max (rules_remote_length, rules_local_length));
-
- for (SIZE_T j = 0; j < count; j++)
- {
- rstring rule_remote;
- rstring rule_local;
-
- // sync remote rules and local rules
- if (!rule_remote_arr.empty () && rules_remote_length > j)
- {
- rule_remote = std::move (rule_remote_arr.at (j));
- _r_str_trim (rule_remote, DIVIDER_TRIM);
- }
-
- // sync local rules and remote rules
- if (!rule_local_arr.empty () && rules_local_length > j)
- {
- rule_local = std::move (rule_local_arr.at (j));
- _r_str_trim (rule_local, DIVIDER_TRIM);
- }
-
- // apply rules for services hosts
- if (ptr_rule->is_forservices)
- {
- if (!_wfp_createrulefilter (hengine, ptr_rule->pname, config.ntoskrnl_hash, rule_remote.GetString (), rule_local.GetString (), ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, &guids))
- is_haveerrors = TRUE;
-
- if (!_wfp_createrulefilter (hengine, ptr_rule->pname, config.svchost_hash, rule_remote.GetString (), rule_local.GetString (), ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, &guids))
- is_haveerrors = TRUE;
- }
-
- if (!ptr_rule->apps.empty ())
- {
- for (auto &papps : ptr_rule->apps)
- {
- if (ptr_rule->is_forservices && (papps.first == config.ntoskrnl_hash || papps.first == config.svchost_hash))
- continue;
-
- if (!_wfp_createrulefilter (hengine, ptr_rule->pname, papps.first, rule_remote.GetString (), rule_local.GetString (), ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, &guids))
- is_haveerrors = TRUE;
- }
- }
- else
- {
- if (!_wfp_createrulefilter (hengine, ptr_rule->pname, 0, rule_remote.GetString (), rule_local.GetString (), ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, &guids))
- is_haveerrors = TRUE;
- }
- }
- }
-
- ptr_rule->is_haveerrors = is_haveerrors;
-
- ptr_rule->guids.clear ();
- ptr_rule->guids = std::move (guids);
+ _r_obj_dereference (ptr_rule);
+ continue;
}
- _r_obj2_dereference (ptr_rule_object);
+ ruleNamePtr = _r_obj_getstringorempty (ptr_rule->name);
+
+ ruleRemoteString = NULL;
+ ruleLocalString = NULL;
+
+ if (!_r_str_isempty (ptr_rule->rule_remote))
+ ruleRemoteString = _r_str_splitatchar (&ptr_rule->rule_remote->sr, &remoteRemainingPart, DIVIDER_RULE[0], TRUE);
+ else
+ _r_obj_initializeemptystringref (&remoteRemainingPart);
+
+ if (!_r_str_isempty (ptr_rule->rule_local))
+ ruleLocalString = _r_str_splitatchar (&ptr_rule->rule_local->sr, &localRemainingPart, DIVIDER_RULE[0], TRUE);
+ else
+ _r_obj_initializeemptystringref (&localRemainingPart);
+
+ while (TRUE)
+ {
+ // apply rules for services hosts
+ if (ptr_rule->is_forservices)
+ {
+ if (!_wfp_createrulefilter (hengine, ruleNamePtr, config.ntoskrnl_hash, ruleRemoteString, ruleLocalString, ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, ptr_rule->guids))
+ ptr_rule->is_haveerrors = TRUE;
+
+ if (!_wfp_createrulefilter (hengine, ruleNamePtr, config.svchost_hash, ruleRemoteString, ruleLocalString, ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, ptr_rule->guids))
+ ptr_rule->is_haveerrors = TRUE;
+ }
+
+ if (!ptr_rule->apps->empty ())
+ {
+ for (auto it = ptr_rule->apps->begin (); it != ptr_rule->apps->end (); ++it)
+ {
+ if (ptr_rule->is_forservices && (it->first == config.ntoskrnl_hash || it->first == config.svchost_hash))
+ continue;
+
+ if (!_wfp_createrulefilter (hengine, ruleNamePtr, it->first, ruleRemoteString, ruleLocalString, ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, ptr_rule->guids))
+ ptr_rule->is_haveerrors = TRUE;
+ }
+ }
+ else
+ {
+ if (!_wfp_createrulefilter (hengine, ruleNamePtr, 0, ruleRemoteString, ruleLocalString, ptr_rule->protocol, ptr_rule->af, ptr_rule->direction, ptr_rule->weight, ptr_rule->is_block ? FWP_ACTION_BLOCK : FWP_ACTION_PERMIT, 0, ptr_rule->guids))
+ ptr_rule->is_haveerrors = TRUE;
+ }
+
+ if (remoteRemainingPart.Length == 0 && localRemainingPart.Length == 0)
+ break;
+
+ if (remoteRemainingPart.Length != 0)
+ {
+ SAFE_DELETE_REFERENCE (ruleRemoteString);
+
+ ruleRemoteString = _r_str_splitatchar (&remoteRemainingPart, &remoteRemainingPart, DIVIDER_RULE[0], TRUE);
+ }
+
+ if (localRemainingPart.Length != 0)
+ {
+ SAFE_DELETE_REFERENCE (ruleLocalString);
+
+ ruleLocalString = _r_str_splitatchar (&localRemainingPart, &localRemainingPart, DIVIDER_RULE[0], TRUE);
+ }
+ }
+
+ SAFE_DELETE_REFERENCE (ruleRemoteString);
+ SAFE_DELETE_REFERENCE (ruleLocalString);
+
+ _r_obj_dereference (ptr_rule);
}
if (!is_intransact)
@@ -1167,22 +1161,20 @@ BOOLEAN _wfp_create4filters (HANDLE hengine, const OBJECTS_VEC& ptr_rules, UINT
if (is_secure)
{
- for (auto &p : ptr_rules)
+ for (auto it = ptr_rules->begin (); it != ptr_rules->end (); ++it)
{
- PR_OBJECT ptr_rule_object = _r_obj2_reference (p);
-
- if (!ptr_rule_object)
+ if (!*it)
continue;
- PITEM_RULE ptr_rule = (PITEM_RULE)ptr_rule_object->pdata;
+ PITEM_RULE ptr_rule = (PITEM_RULE)_r_obj_reference (*it);
- if (ptr_rule && ptr_rule->is_enabled)
+ if (ptr_rule->is_enabled)
{
- for (auto &filter_id : ptr_rule->guids)
- _app_setsecurityinfoforfilter (hengine, &filter_id, is_secure, line);
+ for (auto it2 = ptr_rule->guids->begin (); it2 != ptr_rule->guids->end (); ++it2)
+ _app_setsecurityinfoforfilter (hengine, &(*it2), is_secure, line);
}
- _r_obj2_dereference (ptr_rule_object);
+ _r_obj_dereference (ptr_rule);
}
}
@@ -1194,9 +1186,9 @@ BOOLEAN _wfp_create4filters (HANDLE hengine, const OBJECTS_VEC& ptr_rules, UINT
return TRUE;
}
-BOOLEAN _wfp_create3filters (HANDLE hengine, const OBJECTS_VEC& ptr_apps, UINT line, BOOLEAN is_intransact)
+BOOLEAN _wfp_create3filters (HANDLE hengine, OBJECTS_APP_VECTOR* ptr_apps, UINT line, BOOLEAN is_intransact)
{
- if (ptr_apps.empty ())
+ if (ptr_apps->empty ())
return FALSE;
BOOLEAN is_enabled = _app_initinterfacestate (app.GetHWND (), FALSE);
@@ -1205,67 +1197,53 @@ BOOLEAN _wfp_create3filters (HANDLE hengine, const OBJECTS_VEC& ptr_apps, UINT l
if (!is_intransact && _wfp_isfiltersapplying ())
is_intransact = TRUE;
- GUIDS_VEC ids;
+ GUIDS_VEC guids;
if (!is_intransact)
{
- for (auto &p : ptr_apps)
+ for (auto it = ptr_apps->begin (); it != ptr_apps->end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p);
-
- if (!ptr_app_object)
+ if (!*it)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (*it);
- if (ptr_app)
+ if (!ptr_app->guids->empty ())
{
- if (!ptr_app->guids.empty ())
- {
- ids.insert (ids.end (), ptr_app->guids.begin (), ptr_app->guids.end ());
- ptr_app->guids.clear ();
- }
+ guids.insert (guids.end (), ptr_app->guids->begin (), ptr_app->guids->end ());
+ ptr_app->guids->clear ();
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
- for (auto &filter_id : ids)
- _app_setsecurityinfoforfilter (hengine, &filter_id, FALSE, line);
+ for (auto it = guids.begin (); it != guids.end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), FALSE, line);
_r_fastlock_acquireshared (&lock_transaction);
is_intransact = !_wfp_transact_start (hengine, line);
}
- for (auto &filter_id : ids)
- _wfp_deletefilter (hengine, &filter_id);
-
- for (auto &p : ptr_apps)
+ if (!guids.empty ())
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p);
+ for (auto it = guids.begin (); it != guids.end (); ++it)
+ _wfp_deletefilter (hengine, &(*it));
+ }
- if (!ptr_app_object)
+ for (auto it = ptr_apps->begin (); it != ptr_apps->end (); ++it)
+ {
+ if (!*it)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (*it);
- if (ptr_app)
+ if (ptr_app->is_enabled)
{
- GUIDS_VEC guids;
-
- if (ptr_app->is_enabled)
- {
- if (!_wfp_createrulefilter (hengine, ptr_app->display_name, _r_str_hash (ptr_app->original_path), NULL, NULL, 0, AF_UNSPEC, FWP_DIRECTION_MAX, FILTER_WEIGHT_APPLICATION, action, 0, &guids))
- ptr_app->is_haveerrors = TRUE;
- }
-
- ptr_app->guids.clear ();
-
- if (!guids.empty ())
- ptr_app->guids = std::move (guids);
+ if (!_wfp_createrulefilter (hengine, _r_obj_getstring (ptr_app->display_name), _r_str_hash (ptr_app->original_path), NULL, NULL, 0, AF_UNSPEC, FWP_DIRECTION_MAX, FILTER_WEIGHT_APPLICATION, action, 0, ptr_app->guids))
+ ptr_app->is_haveerrors = TRUE;
}
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
if (!is_intransact)
@@ -1276,22 +1254,17 @@ BOOLEAN _wfp_create3filters (HANDLE hengine, const OBJECTS_VEC& ptr_apps, UINT l
if (is_secure)
{
- for (auto &p : ptr_apps)
+ for (auto it = ptr_apps->begin (); it != ptr_apps->end (); ++it)
{
- PR_OBJECT ptr_app_object = _r_obj2_reference (p);
-
- if (!ptr_app_object)
+ if (!*it)
continue;
- PITEM_APP ptr_app = (PITEM_APP)ptr_app_object->pdata;
+ PITEM_APP ptr_app = (PITEM_APP)_r_obj_reference (*it);
- if (ptr_app)
- {
- for (auto &filter_id : ptr_app->guids)
- _app_setsecurityinfoforfilter (hengine, &filter_id, is_secure, line);
- }
+ for (auto it2 = ptr_app->guids->begin (); it2 != ptr_app->guids->end (); ++it2)
+ _app_setsecurityinfoforfilter (hengine, &(*it2), is_secure, line);
- _r_obj2_dereference (ptr_app_object);
+ _r_obj_dereference (ptr_app);
}
}
@@ -1312,8 +1285,11 @@ BOOLEAN _wfp_create2filters (HANDLE hengine, UINT line, BOOLEAN is_intransact)
if (!is_intransact)
{
- for (auto &filter_id : filter_ids)
- _app_setsecurityinfoforfilter (hengine, &filter_id, FALSE, line);
+ if (!filter_ids.empty ())
+ {
+ for (auto it = filter_ids.begin (); it != filter_ids.end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), FALSE, line);
+ }
_r_fastlock_acquireshared (&lock_transaction);
is_intransact = !_wfp_transact_start (hengine, line);
@@ -1321,8 +1297,8 @@ BOOLEAN _wfp_create2filters (HANDLE hengine, UINT line, BOOLEAN is_intransact)
if (!filter_ids.empty ())
{
- for (auto &p : filter_ids)
- _wfp_deletefilter (hengine, &p);
+ for (auto it = filter_ids.begin (); it != filter_ids.end (); ++it)
+ _wfp_deletefilter (hengine, &(*it));
filter_ids.clear ();
}
@@ -1392,18 +1368,21 @@ BOOLEAN _wfp_create2filters (HANDLE hengine, UINT line, BOOLEAN is_intransact)
L"ff00::/8"
};
+ FWP_V4_ADDR_AND_MASK addr4 = {0};
+ FWP_V6_ADDR_AND_MASK addr6 = {0};
+ ITEM_ADDRESS addr;
+ PR_STRING ruleString;
+
for (SIZE_T i = 0; i < RTL_NUMBER_OF (ip_list); i++)
{
- FWP_V4_ADDR_AND_MASK addr4 = {0};
- FWP_V6_ADDR_AND_MASK addr6 = {0};
-
- ITEM_ADDRESS addr;
RtlSecureZeroMemory (&addr, sizeof (addr));
addr.paddr4 = &addr4;
addr.paddr6 = &addr6;
- if (_app_parserulestring (ip_list[i], &addr))
+ ruleString = _r_obj_createstring (ip_list[i]);
+
+ if (_app_parserulestring (ruleString, &addr))
{
fwfc[1].matchType = FWP_MATCH_EQUAL;
@@ -1438,6 +1417,8 @@ BOOLEAN _wfp_create2filters (HANDLE hengine, UINT line, BOOLEAN is_intransact)
_wfp_createfilter (hengine, NULL, fwfc, 2, FILTER_WEIGHT_HIGHEST_IMPORTANT, &FWPM_LAYER_ALE_RESOURCE_ASSIGNMENT_V6, NULL, FWP_ACTION_PERMIT, 0, &filter_ids);
}
}
+
+ _r_obj_dereference (ruleString);
}
}
@@ -1580,8 +1561,8 @@ BOOLEAN _wfp_create2filters (HANDLE hengine, UINT line, BOOLEAN is_intransact)
if (is_secure)
{
- for (auto &filter_id : filter_ids)
- _app_setsecurityinfoforfilter (hengine, &filter_id, is_secure, line);
+ for (auto it = filter_ids.begin (); it != filter_ids.end (); ++it)
+ _app_setsecurityinfoforfilter (hengine, &(*it), is_secure, line);
}
_r_fastlock_releaseshared (&lock_transaction);
@@ -1592,7 +1573,7 @@ BOOLEAN _wfp_create2filters (HANDLE hengine, UINT line, BOOLEAN is_intransact)
return TRUE;
}
-SIZE_T _wfp_dumpfilters (HANDLE hengine, const GUID* pprovider_id, GUIDS_VEC* ptr_filters)
+SIZE_T _wfp_dumpfilters (HANDLE hengine, LPCGUID pprovider_id, GUIDS_VEC* ptr_filters)
{
ptr_filters->clear ();
@@ -1603,7 +1584,7 @@ SIZE_T _wfp_dumpfilters (HANDLE hengine, const GUID* pprovider_id, GUIDS_VEC* pt
if (code != ERROR_SUCCESS)
{
- app.LogError (L"FwpmFilterCreateEnumHandle", code, NULL, 0);
+ app.LogError (0, L"FwpmFilterCreateEnumHandle", code, NULL);
return 0;
}
else
@@ -1614,7 +1595,7 @@ SIZE_T _wfp_dumpfilters (HANDLE hengine, const GUID* pprovider_id, GUIDS_VEC* pt
if (code != ERROR_SUCCESS)
{
- app.LogError (L"FwpmFilterEnum", code, NULL, 0);
+ app.LogError (0, L"FwpmFilterEnum", code, NULL);
}
else
{
@@ -1625,7 +1606,7 @@ SIZE_T _wfp_dumpfilters (HANDLE hengine, const GUID* pprovider_id, GUIDS_VEC* pt
FWPM_FILTER* pfilter = matchingFwpFilter[i];
if (pfilter && pfilter->providerKey && RtlEqualMemory (pfilter->providerKey, pprovider_id, sizeof (GUID)))
- ptr_filters->push_back (pfilter->filterKey);
+ ptr_filters->emplace_back (pfilter->filterKey);
}
FwpmFreeMemory ((PVOID*)&matchingFwpFilter);
@@ -1665,7 +1646,7 @@ BOOLEAN _mps_firewallapi (PBOOLEAN pis_enabled, PBOOLEAN pis_enable)
{
*pis_enabled = FALSE;
- for (auto &type : profileTypes)
+ for (auto type : profileTypes)
{
VARIANT_BOOL bIsEnabled = FALSE;
@@ -1686,21 +1667,24 @@ BOOLEAN _mps_firewallapi (PBOOLEAN pis_enabled, PBOOLEAN pis_enable)
if (pis_enable)
{
- for (auto &type : profileTypes)
+ for (auto type : profileTypes)
{
hr = pNetFwPolicy2->put_FirewallEnabled (type, *pis_enable ? VARIANT_TRUE : VARIANT_FALSE);
if (SUCCEEDED (hr))
+ {
result = TRUE;
-
+ }
else
- app.LogError (L"put_FirewallEnabled", hr, _r_fmt (L"%d", type).GetString (), 0);
+ {
+ app.LogErrorV (0, L"put_FirewallEnabled", hr, L"%d", type);
+ }
}
}
}
else
{
- app.LogError (L"CoCreateInstance", hr, L"INetFwPolicy2", 0);
+ app.LogError (0, L"CoCreateInstance", hr, L"INetFwPolicy2");
}
if (pNetFwPolicy2)
@@ -1722,7 +1706,7 @@ VOID _mps_changeconfig2 (BOOLEAN is_enable)
if (!scm)
{
- app.LogError (L"OpenSCManager", GetLastError (), NULL, 0);
+ app.LogError (0, L"OpenSCManager", GetLastError (), NULL);
}
else
{
@@ -1733,7 +1717,7 @@ VOID _mps_changeconfig2 (BOOLEAN is_enable)
BOOLEAN is_started = FALSE;
- for (auto &name : ServiceNames)
+ for (auto name : ServiceNames)
{
SC_HANDLE sc = OpenService (scm, name, SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_STOP);
@@ -1742,7 +1726,7 @@ VOID _mps_changeconfig2 (BOOLEAN is_enable)
DWORD code = GetLastError ();
if (code != ERROR_ACCESS_DENIED)
- app.LogError (L"OpenService", code, name, 0);
+ app.LogError (0, L"OpenService", code, name);
}
else
{
@@ -1755,7 +1739,7 @@ VOID _mps_changeconfig2 (BOOLEAN is_enable)
}
if (!ChangeServiceConfig (sc, SERVICE_NO_CHANGE, is_enable ? SERVICE_AUTO_START : SERVICE_DISABLED, SERVICE_NO_CHANGE, NULL, NULL, NULL, NULL, NULL, NULL, NULL))
- app.LogError (L"ChangeServiceConfig", GetLastError (), name, 0);
+ app.LogError (0, L"ChangeServiceConfig", GetLastError (), name);
CloseServiceHandle (sc);
}
@@ -1764,13 +1748,13 @@ VOID _mps_changeconfig2 (BOOLEAN is_enable)
// start services
if (is_enable)
{
- for (auto &name : ServiceNames)
+ for (auto name : ServiceNames)
{
SC_HANDLE sc = OpenService (scm, name, SERVICE_QUERY_STATUS | SERVICE_START);
if (!sc)
{
- app.LogError (L"OpenService", GetLastError (), name, 0);
+ app.LogError (0, L"OpenService", GetLastError (), name);
}
else
{
@@ -1779,14 +1763,14 @@ VOID _mps_changeconfig2 (BOOLEAN is_enable)
if (!QueryServiceStatusEx (sc, SC_STATUS_PROCESS_INFO, (LPBYTE)&ssp, sizeof (ssp), &dwBytesNeeded))
{
- app.LogError (L"QueryServiceStatusEx", GetLastError (), name, 0);
+ app.LogError (0, L"QueryServiceStatusEx", GetLastError (), name);
}
else
{
if (ssp.dwCurrentState != SERVICE_RUNNING)
{
if (!StartService (sc, 0, NULL))
- app.LogError (L"StartService", GetLastError (), name, 0);
+ app.LogError (0, L"StartService", GetLastError (), name);
}
CloseServiceHandle (sc);
@@ -1805,23 +1789,23 @@ VOID _mps_changeconfig2 (BOOLEAN is_enable)
DWORD _FwpmGetAppIdFromFileName1 (LPCWSTR path, FWP_BYTE_BLOB** lpblob, ENUM_TYPE_DATA type)
{
- if (_r_str_isempty (path) || !lpblob)
- return ERROR_BAD_ARGUMENTS;
+ DWORD code = ERROR_FILE_NOT_FOUND;
- rstring path_buff;
+ PR_STRING originalPath = _r_obj_createstring (path);
+ PR_STRING ntPath = NULL;
if (type == DataAppRegular || type == DataAppNetwork || type == DataAppService)
{
- path_buff = path;
-
- if (_r_str_hash (path_buff.GetString ()) == config.ntoskrnl_hash)
+ if (_r_str_hash (_r_obj_getstring (originalPath)) == config.ntoskrnl_hash)
{
- if (ByteBlobAlloc ((PVOID)path_buff.GetString (), (path_buff.GetLength () + 1) * sizeof (WCHAR), lpblob))
- return ERROR_SUCCESS;
+ ByteBlobAlloc (_r_obj_getstring (originalPath), _r_obj_getstringsize (originalPath) + sizeof (UNICODE_NULL), lpblob);
+ code = ERROR_SUCCESS;
+
+ goto DoExit;
}
else
{
- DWORD code = _r_path_ntpathfromdos (path_buff);
+ code = _r_path_ntpathfromdos (path, &ntPath);
// file is inaccessible or not found, maybe low-level driver preventing file access?
// try another way!
@@ -1833,58 +1817,67 @@ DWORD _FwpmGetAppIdFromFileName1 (LPCWSTR path, FWP_BYTE_BLOB** lpblob, ENUM_TYP
{
if (PathIsRelative (path))
{
- return code;
+ goto DoExit;
}
else
{
+ WCHAR pathRoot[128];
+ WCHAR pathSkipRoot[512];
+
// file path (root)
- WCHAR path_root[MAX_PATH];
- _r_str_copy (path_root, RTL_NUMBER_OF (path_root), path);
- PathStripToRoot (path_root);
+ _r_str_copy (pathRoot, RTL_NUMBER_OF (pathRoot), path);
+ PathStripToRoot (pathRoot);
// file path (without root)
- WCHAR path_noroot[MAX_PATH];
- _r_str_copy (path_noroot, RTL_NUMBER_OF (path_noroot), PathSkipRoot (path));
+ _r_str_copy (pathSkipRoot, RTL_NUMBER_OF (pathSkipRoot), PathSkipRoot (path));
+ _r_str_tolower (pathSkipRoot); // lower is important!
- path_buff = path_root;
- code = _r_path_ntpathfromdos (path_buff);
+ code = _r_path_ntpathfromdos (pathRoot, &ntPath);
if (code != ERROR_SUCCESS)
- return code;
+ goto DoExit;
- path_buff.Append (path_noroot);
-
- _r_str_tolower (path_buff.GetBuffer ()); // lower is important!
+ _r_obj_movereference (&originalPath, _r_format_string (L"%s%c%s", _r_obj_getstring (ntPath), OBJ_NAME_PATH_SEPARATOR, pathSkipRoot));
}
}
- else if (code != ERROR_SUCCESS)
+ else if (code == ERROR_SUCCESS)
{
- return code;
+ _r_obj_movereference (&originalPath, ntPath);
+ ntPath = NULL;
+ }
+ else
+ {
+ goto DoExit;
+
}
- if (ByteBlobAlloc ((PVOID)path_buff.GetString (), (path_buff.GetLength () + 1) * sizeof (WCHAR), lpblob))
- return ERROR_SUCCESS;
+ ByteBlobAlloc (_r_obj_getstring (originalPath), _r_obj_getstringsize (originalPath) + sizeof (UNICODE_NULL), lpblob);
}
}
else if (type == DataAppPico || type == DataAppDevice)
{
- path_buff = path;
-
if (type == DataAppDevice)
- _r_str_tolower (path_buff.GetBuffer ()); // lower is important!
+ _r_str_tolower (originalPath); // lower is important!
- if (ByteBlobAlloc ((PVOID)path_buff.GetString (), (path_buff.GetLength () + 1) * sizeof (WCHAR), lpblob))
- return ERROR_SUCCESS;
+ ByteBlobAlloc (_r_obj_getstring (originalPath), _r_obj_getstringsize (originalPath) + sizeof (UNICODE_NULL), lpblob);
+ code = ERROR_SUCCESS;
+
+ goto DoExit;
}
- return ERROR_FILE_NOT_FOUND;
+DoExit:
+
+ if (originalPath)
+ _r_obj_dereference (originalPath);
+
+ if (ntPath)
+ _r_obj_dereference (ntPath);
+
+ return code;
}
-BOOLEAN ByteBlobAlloc (PVOID pdata, SIZE_T length, FWP_BYTE_BLOB** lpblob)
+VOID ByteBlobAlloc (LPCVOID pdata, SIZE_T length, FWP_BYTE_BLOB** lpblob)
{
- if (!pdata || !length || !lpblob)
- return FALSE;
-
FWP_BYTE_BLOB* pblob = (FWP_BYTE_BLOB*)_r_mem_allocatezero (sizeof (FWP_BYTE_BLOB));
pblob->data = (UINT8*)_r_mem_allocatezero (length);
@@ -1893,8 +1886,6 @@ BOOLEAN ByteBlobAlloc (PVOID pdata, SIZE_T length, FWP_BYTE_BLOB** lpblob)
RtlCopyMemory (pblob->data, pdata, length);
*lpblob = pblob;
-
- return TRUE;
}
VOID ByteBlobFree (FWP_BYTE_BLOB** lpblob)
diff --git a/src/wfp.hpp b/src/wfp.hpp
index 6a989e94..4707b7bd 100644
--- a/src/wfp.hpp
+++ b/src/wfp.hpp
@@ -19,25 +19,25 @@ VOID _wfp_installfilters (HANDLE hengine);
BOOLEAN _wfp_transact_start (HANDLE hengine, UINT line);
BOOLEAN _wfp_transact_commit (HANDLE hengine, UINT line);
-BOOLEAN _wfp_deletefilter (HANDLE hengine, const LPGUID pfilter_id);
+BOOLEAN _wfp_deletefilter (HANDLE hengine, LPCGUID pfilter_id);
DWORD _wfp_createfilter (HANDLE hengine, LPCWSTR name, FWPM_FILTER_CONDITION* lpcond, UINT32 count, UINT8 weight, const GUID* layer_id, const GUID* callout_id, FWP_ACTION_TYPE action, UINT32 flags, GUIDS_VEC* ptr_filters);
VOID _wfp_clearfilter_ids ();
VOID _wfp_destroyfilters (HANDLE hengine);
-BOOLEAN _wfp_destroyfilters_array (HANDLE hengine, GUIDS_VEC& ptr_filters, UINT line);
+BOOLEAN _wfp_destroyfilters_array (HANDLE hengine, GUIDS_VEC* ptr_filters, UINT line);
-BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, LPCWSTR rule_remote, LPCWSTR rule_local, UINT8 protocol, ADDRESS_FAMILY af, FWP_DIRECTION dir, UINT8 weight, FWP_ACTION_TYPE action, UINT32 flag, GUIDS_VEC* pmfarr);
+BOOLEAN _wfp_createrulefilter (HANDLE hengine, LPCWSTR name, SIZE_T app_hash, PR_STRING rule_remote, PR_STRING rule_local, UINT8 protocol, ADDRESS_FAMILY af, FWP_DIRECTION dir, UINT8 weight, FWP_ACTION_TYPE action, UINT32 flag, GUIDS_VEC* pmfarr);
-BOOLEAN _wfp_create4filters (HANDLE hengine, const OBJECTS_VEC& ptr_rules, UINT line, BOOLEAN is_intransact = FALSE);
-BOOLEAN _wfp_create3filters (HANDLE hengine, const OBJECTS_VEC& ptr_apps, UINT line, BOOLEAN is_intransact = FALSE);
+BOOLEAN _wfp_create4filters (HANDLE hengine, OBJECTS_RULE_VECTOR* ptr_rules, UINT line, BOOLEAN is_intransact = FALSE);
+BOOLEAN _wfp_create3filters (HANDLE hengine, OBJECTS_APP_VECTOR* ptr_apps, UINT line, BOOLEAN is_intransact = FALSE);
BOOLEAN _wfp_create2filters (HANDLE hengine, UINT line, BOOLEAN is_intransact = FALSE);
-SIZE_T _wfp_dumpfilters (HANDLE hengine, const GUID* pprovider_id, GUIDS_VEC* ptr_filters);
+SIZE_T _wfp_dumpfilters (HANDLE hengine, LPCGUID pprovider_id, GUIDS_VEC* ptr_filters);
BOOLEAN _mps_firewallapi (PBOOLEAN pis_enabled, const PBOOLEAN pis_enable);
VOID _mps_changeconfig2 (BOOLEAN is_enable);
DWORD _FwpmGetAppIdFromFileName1 (LPCWSTR path, FWP_BYTE_BLOB** lpblob, ENUM_TYPE_DATA type);
-BOOLEAN ByteBlobAlloc (const PVOID pdata, SIZE_T length, FWP_BYTE_BLOB** lpblob);
+VOID ByteBlobAlloc (LPCVOID pdata, SIZE_T length, FWP_BYTE_BLOB** lpblob);
VOID ByteBlobFree (FWP_BYTE_BLOB** lpblob);