mirror of
https://github.com/henrypp/simplewall.git
synced 2026-10-22 02:52:54 -05:00
lock network table
This commit is contained in:
4 files changed
+33
-11
No files matched your search
@@ -57,6 +57,7 @@ DECLSPEC_SELECTANY R_SPINLOCK lock_apply;
|
||||
DECLSPEC_SELECTANY R_SPINLOCK lock_checkbox;
|
||||
DECLSPEC_SELECTANY R_SPINLOCK lock_logbusy;
|
||||
DECLSPEC_SELECTANY R_SPINLOCK lock_logthread;
|
||||
DECLSPEC_SELECTANY R_SPINLOCK lock_network;
|
||||
DECLSPEC_SELECTANY R_SPINLOCK lock_profile;
|
||||
DECLSPEC_SELECTANY R_SPINLOCK lock_transaction;
|
||||
|
||||
|
||||
+25
-9
@@ -1669,7 +1669,7 @@ BOOLEAN _app_isvalidconnection (ADDRESS_FAMILY af, LPCVOID paddr)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
VOID _app_generate_connections (_Inout_ PR_HASHTABLE result_map, _Inout_ PR_HASHTABLE checker_map)
|
||||
{
|
||||
_r_obj_clearhashtable (checker_map);
|
||||
|
||||
@@ -1705,7 +1705,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
|
||||
network.network_hash = _app_getnetworkhash (AF_INET, tcp4_table->table[i].dwOwningPid, &remote_addr, tcp4_table->table[i].dwRemotePort, &local_addr, tcp4_table->table[i].dwLocalPort, IPPROTO_TCP, tcp4_table->table[i].dwState);
|
||||
|
||||
if (_r_obj_findhashtable (network_map, network.network_hash))
|
||||
if (_r_obj_findhashtable (result_map, network.network_hash))
|
||||
{
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
|
||||
|
||||
@@ -1734,7 +1734,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
network.is_connection = TRUE;
|
||||
}
|
||||
|
||||
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
|
||||
_r_spinlock_acquireexclusive (&lock_network);
|
||||
|
||||
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
|
||||
|
||||
_r_spinlock_releaseexclusive (&lock_network);
|
||||
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
|
||||
}
|
||||
@@ -1762,7 +1766,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
|
||||
network.network_hash = _app_getnetworkhash (AF_INET6, tcp6_table->table[i].dwOwningPid, tcp6_table->table[i].ucRemoteAddr, tcp6_table->table[i].dwRemotePort, tcp6_table->table[i].ucLocalAddr, tcp6_table->table[i].dwLocalPort, IPPROTO_TCP, tcp6_table->table[i].dwState);
|
||||
|
||||
if (_r_obj_findhashtable (network_map, network.network_hash))
|
||||
if (_r_obj_findhashtable (result_map, network.network_hash))
|
||||
{
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
|
||||
|
||||
@@ -1791,7 +1795,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
network.is_connection = TRUE;
|
||||
}
|
||||
|
||||
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
|
||||
_r_spinlock_acquireexclusive (&lock_network);
|
||||
|
||||
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
|
||||
|
||||
_r_spinlock_releaseexclusive (&lock_network);
|
||||
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
|
||||
}
|
||||
@@ -1822,7 +1830,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
|
||||
network.network_hash = _app_getnetworkhash (AF_INET, udp4_table->table[i].dwOwningPid, NULL, 0, &local_addr, udp4_table->table[i].dwLocalPort, IPPROTO_UDP, 0);
|
||||
|
||||
if (_r_obj_findhashtable (network_map, network.network_hash))
|
||||
if (_r_obj_findhashtable (result_map, network.network_hash))
|
||||
{
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
|
||||
|
||||
@@ -1843,7 +1851,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
if (_app_isvalidconnection (network.af, &network.local_addr))
|
||||
network.is_connection = TRUE;
|
||||
|
||||
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
|
||||
_r_spinlock_acquireexclusive (&lock_network);
|
||||
|
||||
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
|
||||
|
||||
_r_spinlock_releaseexclusive (&lock_network);
|
||||
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
|
||||
}
|
||||
@@ -1871,7 +1883,7 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
|
||||
network.network_hash = _app_getnetworkhash (AF_INET6, udp6_table->table[i].dwOwningPid, NULL, 0, udp6_table->table[i].ucLocalAddr, udp6_table->table[i].dwLocalPort, IPPROTO_UDP, 0);
|
||||
|
||||
if (_r_obj_findhashtable (network_map, network.network_hash))
|
||||
if (_r_obj_findhashtable (result_map, network.network_hash))
|
||||
{
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 0);
|
||||
|
||||
@@ -1892,7 +1904,11 @@ VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map)
|
||||
if (_app_isvalidconnection (network.af, &network.local_addr6))
|
||||
network.is_connection = TRUE;
|
||||
|
||||
_r_obj_addhashtableitem (network_map, network.network_hash, &network);
|
||||
_r_spinlock_acquireexclusive(&lock_network);
|
||||
|
||||
_r_obj_addhashtableitem (result_map, network.network_hash, &network);
|
||||
|
||||
_r_spinlock_releaseexclusive (&lock_network);
|
||||
|
||||
_app_addcachetable (checker_map, network.network_hash, NULL, 1);
|
||||
}
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ PR_STRING _app_getdirectionname (_In_ FWP_DIRECTION direction, _In_ BOOLEAN is_l
|
||||
|
||||
COLORREF _app_getcolorvalue (_In_ SIZE_T color_hash);
|
||||
|
||||
VOID _app_generate_connections (_Inout_ PR_HASHTABLE checker_map);
|
||||
VOID _app_generate_connections (_Inout_ PR_HASHTABLE result_map, _Inout_ PR_HASHTABLE checker_map);
|
||||
VOID _app_generate_packages ();
|
||||
VOID _app_generate_services ();
|
||||
|
||||
|
||||
+6
-1
@@ -79,7 +79,7 @@ THREAD_API NetworkMonitorThread (_In_ PVOID lparam)
|
||||
|
||||
while (TRUE)
|
||||
{
|
||||
_app_generate_connections (checker_map);
|
||||
_app_generate_connections (network_map, checker_map);
|
||||
|
||||
is_highlighting_enabled = _r_config_getboolean (L"IsEnableHighlighting", TRUE) && _r_config_getbooleanex (L"IsHighlightConnection", TRUE, L"colors");
|
||||
current_listview_id = (INT)_r_tab_getitemlparam (hwnd, IDC_TAB, -1);
|
||||
@@ -168,8 +168,12 @@ THREAD_API NetworkMonitorThread (_In_ PVOID lparam)
|
||||
|
||||
SIZE_T app_hash = _app_getnetworkapp (network_hash);
|
||||
|
||||
_r_spinlock_acquireexclusive (&lock_network);
|
||||
|
||||
_r_obj_removehashtableentry (network_map, network_hash);
|
||||
|
||||
_r_spinlock_releaseexclusive (&lock_network);
|
||||
|
||||
// redraw listview item
|
||||
if (app_hash)
|
||||
{
|
||||
@@ -1695,6 +1699,7 @@ VOID _app_initialize ()
|
||||
_r_spinlock_initialize (&lock_checkbox);
|
||||
_r_spinlock_initialize (&lock_logbusy);
|
||||
_r_spinlock_initialize (&lock_logthread);
|
||||
_r_spinlock_initialize (&lock_network);
|
||||
_r_spinlock_initialize (&lock_profile);
|
||||
_r_spinlock_initialize (&lock_transaction);
|
||||
|
||||
|
||||
Reference in new issue
Block a user