1.9.3
This commit is contained in:
parent
8391574061
commit
8399c6ad65
|
@ -9,6 +9,12 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||
|
||||
### Added
|
||||
- added setting to disable overlay icons
|
||||
- added ability to specify sandboxie.ini location in registry
|
||||
- open "HKLM\SYSTEM\CurrentControlSet\Services\SbieDrv" and set "IniPath"
|
||||
- use a for the path like "\??\C:\my_path\my_sandboxie.ini"
|
||||
|
||||
### Changed
|
||||
- improved hadling of dll injection failure
|
||||
|
||||
### Fixed
|
||||
- fixed issue with command lines [#2858](https://github.com/sandboxie-plus/Sandboxie/issues/2858)
|
||||
|
@ -16,6 +22,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||
|
||||
|
||||
|
||||
|
||||
## [1.9.2 / 5.64.2] - 2023-04-24
|
||||
|
||||
### Added
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* Copyright 2004-2020 Sandboxie Holdings, LLC
|
||||
* Copyright 2020-2021 David Xanatos, xanasoft.com
|
||||
* Copyright 2020-2023 David Xanatos, xanasoft.com
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
@ -64,7 +64,8 @@ typedef struct _CONF_DATA {
|
|||
#ifdef USE_CONF_MAP
|
||||
HASH_MAP sections_map;
|
||||
#endif
|
||||
BOOLEAN home; // TRUE if configuration read from Driver_Home_Path
|
||||
ULONG home; // 1 if configuration read from Driver_Home_Path
|
||||
WCHAR* path;
|
||||
ULONG encoding; // 0 - unicode, 1 - utf8, 2 - unicode (byte swapped)
|
||||
volatile ULONG use_count;
|
||||
|
||||
|
@ -203,7 +204,7 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
WCHAR linenum_str[32];
|
||||
ULONG path_len;
|
||||
WCHAR *path = NULL;
|
||||
BOOLEAN path_home;
|
||||
ULONG path_home;
|
||||
STREAM *stream = NULL;
|
||||
POOL *pool;
|
||||
|
||||
|
@ -212,29 +213,59 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
// or (Home Path)\Sandboxie.ini
|
||||
//
|
||||
|
||||
path_len = 32; // room for \SystemRoot
|
||||
if (path_len < wcslen(Driver_HomePathDos) * sizeof(WCHAR))
|
||||
path_len = wcslen(Driver_HomePathDos) * sizeof(WCHAR);
|
||||
path_len += 64; // room for \Sandboxie.ini
|
||||
path_len = 260 * sizeof(WCHAR);
|
||||
//path_len = 32; // room for \SystemRoot
|
||||
if (path_len < wcslen(Driver_HomePathDos) * sizeof(WCHAR) + 64)
|
||||
path_len = wcslen(Driver_HomePathDos) * sizeof(WCHAR) + 64;
|
||||
//path_len += 64; // room for \Sandboxie.ini
|
||||
|
||||
path = ExAllocatePoolWithTag(PagedPool, path_len, tzuk);
|
||||
if (! path)
|
||||
|
||||
pool = Pool_Create();
|
||||
if (! pool)
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
path = Mem_Alloc(pool, path_len);
|
||||
if (! path) {
|
||||
Pool_Delete(pool);
|
||||
return STATUS_INSUFFICIENT_RESOURCES;
|
||||
}
|
||||
|
||||
//
|
||||
// try open a custom configuration file, if set
|
||||
//
|
||||
|
||||
UNICODE_STRING IniPath = { 0, (USHORT)path_len - (4 * sizeof(WCHAR)), path };
|
||||
status = GetRegString(RTL_REGISTRY_ABSOLUTE, Driver_RegistryPath, L"IniPath", &IniPath);
|
||||
if (NT_SUCCESS(status)) {
|
||||
|
||||
if (path[0] != L'\\') {
|
||||
wmemmove(path + 4, path, (IniPath.Length / sizeof(WCHAR)) + 1);
|
||||
wmemcpy(path, L"\\??\\", 4);
|
||||
}
|
||||
|
||||
path_home = 2;
|
||||
status = Stream_Open(
|
||||
&stream, path,
|
||||
FILE_GENERIC_READ, 0, FILE_SHARE_READ, FILE_OPEN, 0);
|
||||
}
|
||||
|
||||
//
|
||||
// open the configuration file, try both places, home first
|
||||
//
|
||||
|
||||
path_home = TRUE; // = FALSE;
|
||||
RtlStringCbPrintfW(path, path_len, path_sandboxie, Driver_HomePathDos); // , SystemRoot);
|
||||
if (!NT_SUCCESS(status)) {
|
||||
|
||||
path_home = 1;
|
||||
RtlStringCbPrintfW(path, path_len, path_sandboxie, Driver_HomePathDos);
|
||||
|
||||
status = Stream_Open(
|
||||
&stream, path, FILE_GENERIC_READ, 0, FILE_SHARE_READ, FILE_OPEN, 0);
|
||||
}
|
||||
|
||||
if (status == STATUS_OBJECT_NAME_NOT_FOUND) {
|
||||
|
||||
path_home = FALSE; // = TRUE;
|
||||
RtlStringCbPrintfW(path, path_len, path_sandboxie, SystemRoot); // , Driver_HomePathDos);
|
||||
path_home = 0;
|
||||
RtlStringCbPrintfW(path, path_len, path_sandboxie, SystemRoot);
|
||||
|
||||
status = Stream_Open(
|
||||
&stream, path,
|
||||
|
@ -256,7 +287,7 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
}
|
||||
|
||||
if (! NT_SUCCESS(status)) {
|
||||
ExFreePoolWithTag(path, tzuk);
|
||||
Pool_Delete(pool);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -264,12 +295,6 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
// read data from the file
|
||||
//
|
||||
|
||||
pool = Pool_Create();
|
||||
if (! pool)
|
||||
status = STATUS_INSUFFICIENT_RESOURCES;
|
||||
|
||||
else {
|
||||
|
||||
data.pool = pool;
|
||||
List_Init(&data.sections);
|
||||
#ifdef USE_CONF_MAP
|
||||
|
@ -280,6 +305,10 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
map_resize(&data.sections_map, 16); // prepare some buckets for better performance
|
||||
#endif
|
||||
data.home = path_home;
|
||||
if (path_home == 2)
|
||||
data.path = Mem_AllocStringEx(data.pool, path, TRUE);
|
||||
else
|
||||
data.path = NULL;
|
||||
data.use_count = 0;
|
||||
|
||||
if (stream) {
|
||||
|
@ -292,7 +321,6 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
if (status == STATUS_END_OF_FILE)
|
||||
status = STATUS_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
if (stream) Stream_Close(stream);
|
||||
|
||||
|
@ -370,6 +398,7 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
}
|
||||
}
|
||||
|
||||
Mem_Free(path, path_len);
|
||||
if (pool)
|
||||
Pool_Delete(pool); // may be either data.pool or old Conf_Data.pool
|
||||
|
||||
|
@ -399,7 +428,6 @@ _FX NTSTATUS Conf_Read(ULONG session_id)
|
|||
}
|
||||
}
|
||||
|
||||
ExFreePoolWithTag(path, tzuk);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
@ -1225,7 +1253,8 @@ _FX const WCHAR *Conf_Get(
|
|||
// return "H" if configuration file was found in the Sandboxie
|
||||
// home directory, or "W" if it was found in Windows directory
|
||||
|
||||
value = (Conf_Data.home) ? Conf_H : Conf_W;
|
||||
if (Conf_Data.path) value = Conf_Data.path;
|
||||
else value = (Conf_Data.home) ? Conf_H : Conf_W;
|
||||
|
||||
} else if ((!have_section) && have_setting &&
|
||||
_wcsicmp(setting, L"IniEncoding") == 0) {
|
||||
|
@ -1426,6 +1455,7 @@ _FX NTSTATUS Conf_Api_Reload(PROCESS *proc, ULONG64 *parms)
|
|||
#endif
|
||||
|
||||
Conf_Data.home = FALSE;
|
||||
Conf_Data.path = NULL;
|
||||
Conf_Data.encoding = 0;
|
||||
|
||||
ExReleaseResourceLite(Conf_Lock);
|
||||
|
@ -1664,6 +1694,7 @@ _FX BOOLEAN Conf_Init(void)
|
|||
#endif
|
||||
|
||||
Conf_Data.home = FALSE;
|
||||
Conf_Data.path = NULL;
|
||||
Conf_Data.encoding = 0;
|
||||
|
||||
if (! Mem_GetLockResource(&Conf_Lock, TRUE))
|
||||
|
|
|
@ -2135,8 +2135,13 @@ bool SbieIniServer::GetIniPath(WCHAR **IniPath,
|
|||
*IsUTF8 = TRUE;
|
||||
}
|
||||
|
||||
LONG rc = SbieApi_QueryConfAsIs(NULL, L"IniLocation", 0, path, 8);
|
||||
if (rc == 0 && *path == L'H') {
|
||||
LONG rc = SbieApi_QueryConfAsIs(NULL, L"IniLocation", 0, path, 260 * sizeof(WCHAR));
|
||||
if (rc == 0 && *path == L'\\') {
|
||||
|
||||
if (wcsnicmp(path, L"\\??\\", 4) == 0)
|
||||
wmemmove(path, path + 4, wcslen(path)+1 - 4);
|
||||
}
|
||||
else if (rc == 0 && *path == L'H') {
|
||||
|
||||
//
|
||||
// Sandboxie.ini was last read from Sandboxie home directory
|
||||
|
|
Loading…
Reference in New Issue