mirror of
https://github.com/henrypp/simplewall.git
synced 2026-10-22 02:52:54 -05:00
add lock profile r/w
This commit is contained in:
3 files changed
+89
-75
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_profile;
|
||||
DECLSPEC_SELECTANY R_SPINLOCK lock_transaction;
|
||||
|
||||
// dropped events callback subscription (win7+)
|
||||
|
||||
+30
-63
@@ -548,45 +548,6 @@ VOID _app_getcount (_Inout_ PITEM_STATUS status)
|
||||
}
|
||||
}
|
||||
|
||||
INT _app_getappgroup (_In_ PITEM_APP ptr_app)
|
||||
{
|
||||
// apps with special rule
|
||||
if (_app_isapphaverule (ptr_app->app_hash, FALSE))
|
||||
return 1;
|
||||
|
||||
if (!ptr_app->is_enabled)
|
||||
return 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
INT _app_getnetworkgroup (_In_ PITEM_NETWORK ptr_network)
|
||||
{
|
||||
if (ptr_network->type == DataAppService)
|
||||
return 1;
|
||||
|
||||
if (ptr_network->type == DataAppUWP)
|
||||
return 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
INT _app_getrulegroup (_In_ PITEM_RULE ptr_rule)
|
||||
{
|
||||
if (!ptr_rule->is_enabled)
|
||||
return 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
INT _app_getruleicon (_In_ PITEM_RULE ptr_rule)
|
||||
{
|
||||
if (ptr_rule->is_block)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
COLORREF _app_getrulecolor (_In_ INT listview_id, _In_ SIZE_T rule_idx)
|
||||
{
|
||||
PITEM_RULE ptr_rule = _app_getrulebyid (rule_idx);
|
||||
@@ -1368,14 +1329,6 @@ BOOLEAN _app_isapphaverule (_In_ SIZE_T app_hash, _In_ BOOLEAN is_countdisabled)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN _app_isappused (_In_ PITEM_APP ptr_app)
|
||||
{
|
||||
if (ptr_app->is_enabled || ptr_app->is_silent || _app_isapphaverule (ptr_app->app_hash, TRUE))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN _app_isappexists (_In_ PITEM_APP ptr_app)
|
||||
{
|
||||
if (ptr_app->is_undeletable)
|
||||
@@ -1403,17 +1356,12 @@ VOID _app_openappdirectory (_In_ PITEM_APP ptr_app)
|
||||
if (path)
|
||||
{
|
||||
if (!_r_obj_isstringempty (path))
|
||||
_r_path_explore (path->buffer);
|
||||
_r_shell_openfile (path->buffer);
|
||||
|
||||
_r_obj_dereference (path);
|
||||
}
|
||||
}
|
||||
|
||||
BOOLEAN _app_profile_load_check_node (_In_ mxml_node_t* root_node, _In_ ENUM_TYPE_XML type)
|
||||
{
|
||||
return (_r_str_tointeger_a (mxmlElementGetAttr (root_node, "type")) == type);
|
||||
}
|
||||
|
||||
BOOLEAN _app_profile_load_check (_In_ LPCWSTR path, _In_ ENUM_TYPE_XML type)
|
||||
{
|
||||
HANDLE hfile = CreateFile (path, FILE_GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
@@ -1890,6 +1838,8 @@ VOID _app_profile_load (_In_opt_ HWND hwnd, _In_opt_ LPCWSTR path_custom)
|
||||
mxml_node_t *xml_node = NULL;
|
||||
mxml_node_t *root_node = NULL;
|
||||
|
||||
_r_spinlock_acquireshared (&lock_profile);
|
||||
|
||||
hfile = CreateFile (path_custom ? path_custom : config.profile_path, FILE_GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (_r_fs_isvalidhandle (hfile))
|
||||
@@ -1910,6 +1860,8 @@ VOID _app_profile_load (_In_opt_ HWND hwnd, _In_opt_ LPCWSTR path_custom)
|
||||
}
|
||||
}
|
||||
|
||||
_r_spinlock_releaseshared (&lock_profile);
|
||||
|
||||
if (!xml_node)
|
||||
{
|
||||
_r_log (Error, UID, L"mxmlLoadFd", GetLastError (), path_custom ? path_custom : config.profile_path);
|
||||
@@ -2077,14 +2029,6 @@ VOID _app_profile_save ()
|
||||
LONG64 current_time = 0;
|
||||
BOOLEAN is_backuprequired = FALSE;
|
||||
|
||||
hfile = CreateFile (config.profile_path, FILE_GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (!_r_fs_isvalidhandle (hfile))
|
||||
{
|
||||
_r_log (Error, UID, L"CreateFile", GetLastError (), config.profile_path);
|
||||
return;
|
||||
}
|
||||
|
||||
mxmlSetWrapMargin (0x2000);
|
||||
|
||||
current_time = _r_unixtime_now ();
|
||||
@@ -2239,10 +2183,33 @@ VOID _app_profile_save ()
|
||||
mxmlElementSetAttrf (item_node, "is_enabled", "%" PRIu8, ptr_config->is_enabled);
|
||||
}
|
||||
|
||||
mxmlSaveFd (xml_node, hfile, &_app_profile_save_callback);
|
||||
_r_spinlock_acquireexclusive (&lock_profile);
|
||||
|
||||
hfile = CreateFile (config.profile_path, FILE_GENERIC_READ | FILE_GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_DELETE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (!_r_fs_isvalidhandle (hfile))
|
||||
{
|
||||
_r_log (Error, UID, L"CreateFile", GetLastError (), config.profile_path);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GetLastError () == ERROR_ALREADY_EXISTS)
|
||||
{
|
||||
_r_fs_setpos (hfile, 2, FILE_BEGIN);
|
||||
|
||||
SetEndOfFile (hfile);
|
||||
|
||||
FlushFileBuffers (hfile);
|
||||
}
|
||||
|
||||
mxmlSaveFd (xml_node, hfile, &_app_profile_save_callback);
|
||||
|
||||
CloseHandle (hfile);
|
||||
}
|
||||
|
||||
mxmlDelete (xml_node);
|
||||
|
||||
CloseHandle (hfile);
|
||||
_r_spinlock_releaseexclusive (&lock_profile);
|
||||
|
||||
// make backup
|
||||
if (is_backuprequired)
|
||||
|
||||
+58
-12
@@ -46,12 +46,61 @@ COLORREF _app_getappcolor (_In_ INT listview_id, _In_ SIZE_T app_hash, _In_ BOOL
|
||||
|
||||
VOID _app_freeapplication (_In_ SIZE_T app_hash);
|
||||
|
||||
BOOLEAN _app_isappfromsystem (_In_ LPCWSTR path, _In_ SIZE_T app_hash);
|
||||
BOOLEAN _app_isapphaveconnection (_In_ SIZE_T app_hash);
|
||||
BOOLEAN _app_isapphavedrive (_In_ INT letter);
|
||||
BOOLEAN _app_isapphaverule (_In_ SIZE_T app_hash, _In_ BOOLEAN is_countdisabled);
|
||||
BOOLEAN _app_isappexists (_In_ PITEM_APP ptr_app);
|
||||
|
||||
FORCEINLINE BOOLEAN _app_isappused (_In_ PITEM_APP ptr_app)
|
||||
{
|
||||
if (ptr_app->is_enabled || ptr_app->is_silent || _app_isapphaverule (ptr_app->app_hash, TRUE))
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
VOID _app_getcount (_Inout_ PITEM_STATUS status);
|
||||
|
||||
INT _app_getappgroup (_In_ PITEM_APP ptr_app);
|
||||
INT _app_getnetworkgroup (_In_ PITEM_NETWORK ptr_network);
|
||||
INT _app_getrulegroup (_In_ PITEM_RULE ptr_rule);
|
||||
INT _app_getruleicon (_In_ PITEM_RULE ptr_rule);
|
||||
FORCEINLINE INT _app_getappgroup (_In_ PITEM_APP ptr_app)
|
||||
{
|
||||
// apps with special rule
|
||||
if (_app_isapphaverule (ptr_app->app_hash, FALSE))
|
||||
return 1;
|
||||
|
||||
if (!ptr_app->is_enabled)
|
||||
return 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
FORCEINLINE INT _app_getrulegroup (_In_ PITEM_RULE ptr_rule)
|
||||
{
|
||||
if (!ptr_rule->is_enabled)
|
||||
return 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
FORCEINLINE INT _app_getnetworkgroup (_In_ PITEM_NETWORK ptr_network)
|
||||
{
|
||||
if (ptr_network->type == DataAppService)
|
||||
return 1;
|
||||
|
||||
if (ptr_network->type == DataAppUWP)
|
||||
return 2;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
FORCEINLINE INT _app_getruleicon (_In_ PITEM_RULE ptr_rule)
|
||||
{
|
||||
if (ptr_rule->is_block)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
COLORREF _app_getrulecolor (_In_ INT listview_id, _In_ SIZE_T rule_idx);
|
||||
|
||||
_Ret_maybenull_
|
||||
@@ -75,18 +124,15 @@ PR_STRING _app_rulesexpandapps (_In_ PITEM_RULE ptr_rule, _In_ BOOLEAN is_fordis
|
||||
_Ret_maybenull_
|
||||
PR_STRING _app_rulesexpandrules (_In_ PR_STRING rule, _In_ LPCWSTR delimeter);
|
||||
|
||||
BOOLEAN _app_isappfromsystem (_In_ LPCWSTR path, _In_ SIZE_T app_hash);
|
||||
BOOLEAN _app_isapphaveconnection (_In_ SIZE_T app_hash);
|
||||
BOOLEAN _app_isapphavedrive (_In_ INT letter);
|
||||
BOOLEAN _app_isapphaverule (_In_ SIZE_T app_hash, _In_ BOOLEAN is_countdisabled);
|
||||
BOOLEAN _app_isappused (_In_ PITEM_APP ptr_app);
|
||||
BOOLEAN _app_isappexists (_In_ PITEM_APP ptr_app);
|
||||
|
||||
VOID _app_openappdirectory (_In_ PITEM_APP ptr_app);
|
||||
|
||||
//BOOLEAN _app_profile_load_check_node (_In_ mxml_node_t* root_node, _In_ ENUM_TYPE_XML type);
|
||||
BOOLEAN _app_profile_load_check (_In_ LPCWSTR path, _In_ ENUM_TYPE_XML type);
|
||||
|
||||
FORCEINLINE BOOLEAN _app_profile_load_check_node (_In_ mxml_node_t* root_node, _In_ ENUM_TYPE_XML type)
|
||||
{
|
||||
return (_r_str_tointeger_a (mxmlElementGetAttr (root_node, "type")) == type);
|
||||
}
|
||||
|
||||
VOID _app_profile_load_fallback ();
|
||||
//VOID _app_profile_load_helper (_In_ mxml_node_t* root_node, _In_ ENUM_TYPE_DATA type, _In_ UINT version);
|
||||
VOID _app_profile_load_internal (_In_ LPCWSTR path, _In_ LPCWSTR resource_name, _Inout_opt_ PLONG64 ptimestamp);
|
||||
|
||||
Reference in new issue
Block a user