commit
1a66a892f3
16
CHANGELOG.md
16
CHANGELOG.md
|
@ -3,13 +3,25 @@ All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
|
||||||
|
## [0.5.3b / 5.45.2] - 2021-01-02
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- added settings for the portable boxed root folder option
|
||||||
|
- added process name to resource log
|
||||||
|
- added command line column to the process view in the SandMan UI
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- fixed a few issues with group handling
|
||||||
|
- fixed issue with GetRawInputDeviceInfo when running a 32 bit program on a 64 bit system
|
||||||
|
- fixed issue when pressing apply in the "Resource Access" tab; the last edited value was not always applied
|
||||||
|
- fixed issue merging entries in resource access monitor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [0.5.3a / 5.45.2] - 2020-12-29
|
## [0.5.3a / 5.45.2] - 2020-12-29
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- added prompt to choose if links in the Sandman UI should be opened in a sandboxed or unsandboxed browser
|
- added prompt to choose if links in the SandMan UI should be opened in a sandboxed or unsandboxed browser
|
||||||
- added more recovery options
|
- added more recovery options
|
||||||
- added "ClosedClsid=" to block com objects from being used when they cause compatibility issues
|
- added "ClosedClsid=" to block com objects from being used when they cause compatibility issues
|
||||||
- added "ClsidTrace=*" option to trace COM usage
|
- added "ClsidTrace=*" option to trace COM usage
|
||||||
|
@ -25,7 +37,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- changed docs and update URLs to the new sandboxie-plus.com domain
|
- changed docs and update URLs to the new sandboxie-plus.com domain
|
||||||
- greately improved the setup script (thanks mpheath)
|
- greatly improved the setup script (thanks mpheath)
|
||||||
- "OpenClsid=" and "ClosedClsid=" now support specifying a program or group name
|
- "OpenClsid=" and "ClosedClsid=" now support specifying a program or group name
|
||||||
- by default, when started in portable mode, the sandbox folder will be located in the parent directory of the sandboxie instance
|
- by default, when started in portable mode, the sandbox folder will be located in the parent directory of the sandboxie instance
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,7 @@ Open Source release
|
||||||
- mpheath - help with inno setup
|
- mpheath - help with inno setup
|
||||||
|
|
||||||
### Translators
|
### Translators
|
||||||
|
- yuhao2348732 - ZH
|
||||||
- nkh0472 - CN
|
- nkh0472 - CN
|
||||||
- bastik-1001 - DE
|
- bastik-1001 - DE
|
||||||
- JNylson - PT
|
- JNylson - PT
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
Please see the individual modules for their respective licenses.
|
|
@ -5,6 +5,10 @@ bool CPanelView::m_SimpleFormat = false;
|
||||||
int CPanelView::m_MaxCellWidth = 0;
|
int CPanelView::m_MaxCellWidth = 0;
|
||||||
QString CPanelView::m_CellSeparator = "\t";
|
QString CPanelView::m_CellSeparator = "\t";
|
||||||
|
|
||||||
|
QString CPanelView::m_CopyCell = "Copy Cell";
|
||||||
|
QString CPanelView::m_CopyRow = "Copy Row";
|
||||||
|
QString CPanelView::m_CopyPanel = "Copy Panel";
|
||||||
|
|
||||||
CPanelView::CPanelView(QWidget *parent)
|
CPanelView::CPanelView(QWidget *parent)
|
||||||
:QWidget(parent)
|
:QWidget(parent)
|
||||||
{
|
{
|
||||||
|
@ -21,12 +25,12 @@ void CPanelView::AddPanelItemsToMenu(bool bAddSeparator)
|
||||||
{
|
{
|
||||||
if(bAddSeparator)
|
if(bAddSeparator)
|
||||||
m_pMenu->addSeparator();
|
m_pMenu->addSeparator();
|
||||||
m_pCopyCell = m_pMenu->addAction(tr("Copy Cell"), this, SLOT(OnCopyCell()));
|
m_pCopyCell = m_pMenu->addAction(m_CopyCell, this, SLOT(OnCopyCell()));
|
||||||
m_pCopyRow = m_pMenu->addAction(tr("Copy Row"), this, SLOT(OnCopyRow()));
|
m_pCopyRow = m_pMenu->addAction(m_CopyRow, this, SLOT(OnCopyRow()));
|
||||||
m_pCopyRow->setShortcut(QKeySequence::Copy);
|
m_pCopyRow->setShortcut(QKeySequence::Copy);
|
||||||
m_pCopyRow->setShortcutContext(Qt::WidgetWithChildrenShortcut);
|
m_pCopyRow->setShortcutContext(Qt::WidgetWithChildrenShortcut);
|
||||||
this->addAction(m_pCopyRow);
|
this->addAction(m_pCopyRow);
|
||||||
m_pCopyPanel = m_pMenu->addAction(tr("Copy Panel"), this, SLOT(OnCopyPanel()));
|
m_pCopyPanel = m_pMenu->addAction(m_CopyPanel, this, SLOT(OnCopyPanel()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPanelView::OnMenu(const QPoint& Point)
|
void CPanelView::OnMenu(const QPoint& Point)
|
||||||
|
@ -35,6 +39,7 @@ void CPanelView::OnMenu(const QPoint& Point)
|
||||||
|
|
||||||
m_pCopyCell->setEnabled(Index.isValid());
|
m_pCopyCell->setEnabled(Index.isValid());
|
||||||
m_pCopyRow->setEnabled(Index.isValid());
|
m_pCopyRow->setEnabled(Index.isValid());
|
||||||
|
m_pCopyPanel->setEnabled(true);
|
||||||
|
|
||||||
m_pMenu->popup(QCursor::pos());
|
m_pMenu->popup(QCursor::pos());
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,10 @@ public:
|
||||||
static void SetMaxCellWidth(int iMaxWidth) { m_MaxCellWidth = iMaxWidth; }
|
static void SetMaxCellWidth(int iMaxWidth) { m_MaxCellWidth = iMaxWidth; }
|
||||||
static void SetCellSeparator(const QString& Sep) { m_CellSeparator = Sep; }
|
static void SetCellSeparator(const QString& Sep) { m_CellSeparator = Sep; }
|
||||||
|
|
||||||
|
static QString m_CopyCell;
|
||||||
|
static QString m_CopyRow;
|
||||||
|
static QString m_CopyPanel;
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
virtual void OnMenu(const QPoint& Point);
|
virtual void OnMenu(const QPoint& Point);
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,10 @@
|
||||||
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
<ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
|
<ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
|
||||||
<Import Project="$(QtMsBuild)\qt_defaults.props" />
|
<Import Project="$(QtMsBuild)\qt_defaults.props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
|
|
@ -65,6 +65,10 @@
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
<PropertyGroup Label="UserMacros" />
|
<PropertyGroup Label="UserMacros" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -135,6 +139,7 @@
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<TargetMachine>MachineX86</TargetMachine>
|
<TargetMachine>MachineX86</TargetMachine>
|
||||||
<AdditionalOptions> /SUBSYSTEM:WINDOWS</AdditionalOptions>
|
<AdditionalOptions> /SUBSYSTEM:WINDOWS</AdditionalOptions>
|
||||||
|
<AdditionalDependencies>ntdll.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
|
|
@ -28,6 +28,8 @@ typedef long NTSTATUS;
|
||||||
#include "..\..\Sandboxie\common\win32_ntddk.h"
|
#include "..\..\Sandboxie\common\win32_ntddk.h"
|
||||||
#include <psapi.h> // For access to GetModuleFileNameEx
|
#include <psapi.h> // For access to GetModuleFileNameEx
|
||||||
|
|
||||||
|
#include <winnt.h>
|
||||||
|
|
||||||
//struct SBoxedProcess
|
//struct SBoxedProcess
|
||||||
//{
|
//{
|
||||||
//};
|
//};
|
||||||
|
@ -52,12 +54,114 @@ CBoxedProcess::~CBoxedProcess()
|
||||||
//delete m;
|
//delete m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef enum _PEB_OFFSET
|
||||||
|
{
|
||||||
|
PhpoCurrentDirectory,
|
||||||
|
PhpoDllPath,
|
||||||
|
PhpoImagePathName,
|
||||||
|
PhpoCommandLine,
|
||||||
|
PhpoWindowTitle,
|
||||||
|
PhpoDesktopInfo,
|
||||||
|
PhpoShellInfo,
|
||||||
|
PhpoRuntimeData,
|
||||||
|
PhpoTypeMask = 0xffff,
|
||||||
|
PhpoWow64 = 0x10000
|
||||||
|
} PEB_OFFSET;
|
||||||
|
|
||||||
|
typedef struct _STRING32
|
||||||
|
{
|
||||||
|
USHORT Length;
|
||||||
|
USHORT MaximumLength;
|
||||||
|
ULONG Buffer;
|
||||||
|
} UNICODE_STRING32, * PUNICODE_STRING32;
|
||||||
|
|
||||||
|
QString CBoxedProcess__GetPebString(HANDLE ProcessHandle, PEB_OFFSET Offset)
|
||||||
|
{
|
||||||
|
BOOL is64BitOperatingSystem = FALSE;
|
||||||
|
BOOL isWow64Process = FALSE;
|
||||||
|
#ifdef _WIN64
|
||||||
|
is64BitOperatingSystem = TRUE;
|
||||||
|
#else // ! _WIN64
|
||||||
|
IsWow64Process(GetCurrentProcess(), &isWow64Process);
|
||||||
|
is64BitOperatingSystem = isWow64Process;
|
||||||
|
#endif _WIN64
|
||||||
|
|
||||||
|
BOOL isTargetWow64Process = FALSE;
|
||||||
|
IsWow64Process(ProcessHandle, &isTargetWow64Process);
|
||||||
|
BOOL isTarget64BitProcess = is64BitOperatingSystem && !isTargetWow64Process;
|
||||||
|
|
||||||
|
|
||||||
|
ULONG processParametersOffset = isTarget64BitProcess ? 0x20 : 0x10;
|
||||||
|
|
||||||
|
ULONG offset = 0;
|
||||||
|
switch (Offset)
|
||||||
|
{
|
||||||
|
case PhpoCurrentDirectory: offset = isTarget64BitProcess ? 0x38 : 0x24; break;
|
||||||
|
case PhpoCommandLine: offset = isTarget64BitProcess ? 0x70 : 0x40; break;
|
||||||
|
default:
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
wstring s;
|
||||||
|
if (isTargetWow64Process) // OS : 64Bit, Cur : 32 or 64, Tar: 32bit
|
||||||
|
{
|
||||||
|
PVOID peb32;
|
||||||
|
if (!NT_SUCCESS(NtQueryInformationProcess(ProcessHandle, ProcessWow64Information, &peb32, sizeof(PVOID), NULL)))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
ULONG procParams;
|
||||||
|
if (!NT_SUCCESS(NtReadVirtualMemory(ProcessHandle, (PVOID)((ULONG64)peb32 + processParametersOffset), &procParams, sizeof(ULONG), NULL)))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
UNICODE_STRING32 us;
|
||||||
|
if (!NT_SUCCESS(NtReadVirtualMemory(ProcessHandle, (PVOID)(procParams + offset), &us, sizeof(UNICODE_STRING32), NULL)))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
if ((us.Buffer == 0) || (us.Length == 0))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
s.resize(us.Length / 2);
|
||||||
|
if (!NT_SUCCESS(NtReadVirtualMemory(ProcessHandle, (PVOID)us.Buffer, (PVOID)s.c_str(), s.length() * 2, NULL)))
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
else if (isWow64Process) //Os : 64Bit, Cur 32, Tar 64
|
||||||
|
{
|
||||||
|
return QString(); // not supported
|
||||||
|
}
|
||||||
|
else // Os,Cur,Tar : 64 or 32
|
||||||
|
{
|
||||||
|
PROCESS_BASIC_INFORMATION pbi;
|
||||||
|
if (!NT_SUCCESS(NtQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &pbi, sizeof(PROCESS_BASIC_INFORMATION), NULL)))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
ULONG_PTR procParams;
|
||||||
|
if (!NT_SUCCESS(NtReadVirtualMemory(ProcessHandle, (PVOID)((ULONG64)pbi.PebBaseAddress + processParametersOffset), &procParams, sizeof(ULONG_PTR), NULL)))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
UNICODE_STRING us;
|
||||||
|
if (!NT_SUCCESS(NtReadVirtualMemory(ProcessHandle, (PVOID)(procParams + offset), &us, sizeof(UNICODE_STRING), NULL)))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
if ((us.Buffer == 0) || (us.Length == 0))
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
s.resize(us.Length / 2);
|
||||||
|
if (!NT_SUCCESS(NtReadVirtualMemory(ProcessHandle, (PVOID)us.Buffer, (PVOID)s.c_str(), s.length() * 2, NULL)))
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return QString::fromWCharArray(s.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
bool CBoxedProcess::InitProcessInfo()
|
bool CBoxedProcess::InitProcessInfo()
|
||||||
{
|
{
|
||||||
HANDLE ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, (DWORD)m_ProcessId);
|
HANDLE ProcessHandle;
|
||||||
|
ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, (DWORD)m_ProcessId);
|
||||||
|
if (ProcessHandle == INVALID_HANDLE_VALUE) // try with less rights
|
||||||
|
ProcessHandle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, (DWORD)m_ProcessId);
|
||||||
if (ProcessHandle == INVALID_HANDLE_VALUE)
|
if (ProcessHandle == INVALID_HANDLE_VALUE)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
PROCESS_BASIC_INFORMATION BasicInformation;
|
PROCESS_BASIC_INFORMATION BasicInformation;
|
||||||
NTSTATUS status = NtQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &BasicInformation, sizeof(PROCESS_BASIC_INFORMATION), NULL);
|
NTSTATUS status = NtQueryInformationProcess(ProcessHandle, ProcessBasicInformation, &BasicInformation, sizeof(PROCESS_BASIC_INFORMATION), NULL);
|
||||||
if (NT_SUCCESS(status)) {
|
if (NT_SUCCESS(status)) {
|
||||||
|
@ -68,6 +172,27 @@ bool CBoxedProcess::InitProcessInfo()
|
||||||
if (DWORD size = GetModuleFileNameEx(ProcessHandle, NULL, filename, MAX_PATH))
|
if (DWORD size = GetModuleFileNameEx(ProcessHandle, NULL, filename, MAX_PATH))
|
||||||
m_ImagePath = QString::fromWCharArray(filename);
|
m_ImagePath = QString::fromWCharArray(filename);
|
||||||
|
|
||||||
|
if (1) // windows 8.1 and later // todo add os version check
|
||||||
|
{
|
||||||
|
#define ProcessCommandLineInformation ((PROCESSINFOCLASS)60)
|
||||||
|
ULONG returnLength = 0;
|
||||||
|
NTSTATUS status = NtQueryInformationProcess(ProcessHandle, ProcessCommandLineInformation, NULL, 0, &returnLength);
|
||||||
|
if (!(status != STATUS_BUFFER_OVERFLOW && status != STATUS_BUFFER_TOO_SMALL && status != STATUS_INFO_LENGTH_MISMATCH))
|
||||||
|
{
|
||||||
|
PUNICODE_STRING commandLine = (PUNICODE_STRING)malloc(returnLength);
|
||||||
|
status = NtQueryInformationProcess(ProcessHandle, ProcessCommandLineInformation, commandLine, returnLength, &returnLength);
|
||||||
|
if (NT_SUCCESS(status) && commandLine->Buffer != NULL)
|
||||||
|
m_CommandLine = QString::fromWCharArray(commandLine->Buffer);
|
||||||
|
free(commandLine);
|
||||||
|
}
|
||||||
|
#undef ProcessCommandLineInformation
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_CommandLine.isEmpty()) // fall back to teh win 7 method - requirers PROCESS_VM_READ
|
||||||
|
{
|
||||||
|
m_CommandLine = CBoxedProcess__GetPebString(ProcessHandle, PhpoCommandLine);
|
||||||
|
}
|
||||||
|
|
||||||
NtClose(ProcessHandle);
|
NtClose(ProcessHandle);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ public:
|
||||||
virtual quint32 GetProcessId() const { return m_ProcessId; }
|
virtual quint32 GetProcessId() const { return m_ProcessId; }
|
||||||
virtual quint32 GetParendPID() const { return m_ParendPID; }
|
virtual quint32 GetParendPID() const { return m_ParendPID; }
|
||||||
virtual QString GetProcessName() const { return m_ImageName; }
|
virtual QString GetProcessName() const { return m_ImageName; }
|
||||||
|
virtual QString GetCommandLine() const { return m_CommandLine; }
|
||||||
virtual QString GetFileName() const { return m_ImagePath; }
|
virtual QString GetFileName() const { return m_ImagePath; }
|
||||||
virtual QDateTime GetTimeStamp() const { return m_StartTime; }
|
virtual QDateTime GetTimeStamp() const { return m_StartTime; }
|
||||||
|
|
||||||
|
@ -53,6 +54,7 @@ protected:
|
||||||
quint32 m_ParendPID;
|
quint32 m_ParendPID;
|
||||||
QString m_ImageName;
|
QString m_ImageName;
|
||||||
QString m_ImagePath;
|
QString m_ImagePath;
|
||||||
|
QString m_CommandLine;
|
||||||
quint32 m_SessionId;
|
quint32 m_SessionId;
|
||||||
QDateTime m_StartTime;
|
QDateTime m_StartTime;
|
||||||
quint64 m_uTerminated;
|
quint64 m_uTerminated;
|
||||||
|
|
|
@ -281,7 +281,8 @@ SB_STATUS CSbieAPI::Connect(bool withQueue)
|
||||||
m->lastRecordNum = 0;
|
m->lastRecordNum = 0;
|
||||||
|
|
||||||
#ifndef _DEBUG
|
#ifndef _DEBUG
|
||||||
QStringList CompatVersions = QStringList () << "5.45.0";
|
// Note: this lib is not using all functions hence it can be compatible with multiple driver ABI revisions
|
||||||
|
QStringList CompatVersions = QStringList () << "5.45.0" << "5.46.0";
|
||||||
QString CurVersion = GetVersion();
|
QString CurVersion = GetVersion();
|
||||||
if (!CompatVersions.contains(CurVersion))
|
if (!CompatVersions.contains(CurVersion))
|
||||||
{
|
{
|
||||||
|
@ -1079,7 +1080,9 @@ SB_STATUS CSbieAPI::UpdateProcesses(bool bKeep)
|
||||||
|
|
||||||
SB_STATUS CSbieAPI__GetProcessPIDs(SSbieAPI* m, const QString& BoxName, ULONG* boxed_pids_512)
|
SB_STATUS CSbieAPI__GetProcessPIDs(SSbieAPI* m, const QString& BoxName, ULONG* boxed_pids_512)
|
||||||
{
|
{
|
||||||
wstring box_name = BoxName.toStdWString(); // WCHAR [34]
|
WCHAR box_name[34];
|
||||||
|
BoxName.toWCharArray(box_name); // fix-me: potential overflow
|
||||||
|
box_name[BoxName.size()] = L'\0';
|
||||||
BOOLEAN all_sessions = TRUE;
|
BOOLEAN all_sessions = TRUE;
|
||||||
ULONG which_session = 0; // -1 for current session
|
ULONG which_session = 0; // -1 for current session
|
||||||
|
|
||||||
|
@ -1088,19 +1091,22 @@ SB_STATUS CSbieAPI__GetProcessPIDs(SSbieAPI* m, const QString& BoxName, ULONG* b
|
||||||
memset(parms, 0, sizeof(parms));
|
memset(parms, 0, sizeof(parms));
|
||||||
parms[0] = API_ENUM_PROCESSES;
|
parms[0] = API_ENUM_PROCESSES;
|
||||||
parms[1] = (ULONG64)boxed_pids_512;
|
parms[1] = (ULONG64)boxed_pids_512;
|
||||||
parms[2] = (ULONG64)box_name.c_str();
|
parms[2] = (ULONG64)box_name;
|
||||||
parms[3] = (ULONG64)all_sessions;
|
parms[3] = (ULONG64)all_sessions;
|
||||||
parms[4] = (ULONG64)which_session;
|
parms[4] = (ULONG64)which_session;
|
||||||
|
|
||||||
return m->IoControl(parms);
|
NTSTATUS status = m->IoControl(parms);
|
||||||
|
if (!NT_SUCCESS(status))
|
||||||
|
return SB_ERR(status);
|
||||||
|
return SB_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
SB_STATUS CSbieAPI::UpdateProcesses(bool bKeep, const CSandBoxPtr& pBox)
|
SB_STATUS CSbieAPI::UpdateProcesses(bool bKeep, const CSandBoxPtr& pBox)
|
||||||
{
|
{
|
||||||
ULONG boxed_pids[512]; // ULONG [512]
|
ULONG boxed_pids[512]; // ULONG [512]
|
||||||
NTSTATUS status = CSbieAPI__GetProcessPIDs(m, pBox->GetName(), boxed_pids);
|
SB_STATUS Status = CSbieAPI__GetProcessPIDs(m, pBox->GetName(), boxed_pids);
|
||||||
if (!NT_SUCCESS(status))
|
if (Status.IsError())
|
||||||
return SB_ERR(status);
|
return Status;
|
||||||
|
|
||||||
QMap<quint32, CBoxedProcessPtr> OldProcessList = pBox->m_ProcessList;
|
QMap<quint32, CBoxedProcessPtr> OldProcessList = pBox->m_ProcessList;
|
||||||
|
|
||||||
|
@ -1762,6 +1768,8 @@ CBoxedProcessPtr CSbieAPI::OnProcessBoxed(quint32 ProcessId, const QString& Path
|
||||||
pProcess = CBoxedProcessPtr(NewBoxedProcess(ProcessId, pBox.data()));
|
pProcess = CBoxedProcessPtr(NewBoxedProcess(ProcessId, pBox.data()));
|
||||||
pBox->m_ProcessList.insert(ProcessId, pProcess);
|
pBox->m_ProcessList.insert(ProcessId, pProcess);
|
||||||
m_BoxedProxesses.insert(ProcessId, pProcess);
|
m_BoxedProxesses.insert(ProcessId, pProcess);
|
||||||
|
|
||||||
|
pProcess->InitProcessInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pProcess->m_ParendPID == 0){
|
if (pProcess->m_ParendPID == 0){
|
||||||
|
@ -1891,9 +1899,8 @@ bool CSbieAPI::GetMonitor()
|
||||||
CResLogEntryPtr LogEntry = CResLogEntryPtr(new CResLogEntry(pid, type, Data));
|
CResLogEntryPtr LogEntry = CResLogEntryPtr(new CResLogEntry(pid, type, Data));
|
||||||
|
|
||||||
QWriteLocker Lock(&m_ResLogMutex);
|
QWriteLocker Lock(&m_ResLogMutex);
|
||||||
if (!m_ResLogList.isEmpty() && m_ResLogList.last()->GetValue() == LogEntry->GetValue())
|
if (!m_ResLogList.isEmpty() && m_ResLogList.last()->Equals(LogEntry)) {
|
||||||
{
|
m_ResLogList.last()->Merge(LogEntry);
|
||||||
m_ResLogList.last()->IncrCounter();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
m_ResLogList.append(LogEntry);
|
m_ResLogList.append(LogEntry);
|
||||||
|
@ -1954,12 +1961,11 @@ QString CResLogEntry::GetStautsStr() const
|
||||||
if (m_Type.Trace)
|
if (m_Type.Trace)
|
||||||
return "Trace";
|
return "Trace";
|
||||||
|
|
||||||
QString Str;
|
|
||||||
if(m_Type.Open)
|
if(m_Type.Open)
|
||||||
Str += "O ";
|
return "Open";
|
||||||
if(m_Type.Deny)
|
if(m_Type.Deny)
|
||||||
Str += "X ";
|
return "Closed";
|
||||||
return Str;
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -38,9 +38,15 @@ public:
|
||||||
QString GetValue() const { return m_Name; }
|
QString GetValue() const { return m_Name; }
|
||||||
QString GetTypeStr() const;
|
QString GetTypeStr() const;
|
||||||
QString GetStautsStr() const;
|
QString GetStautsStr() const;
|
||||||
void IncrCounter() { m_Counter++; }
|
|
||||||
int GetCount() const { return m_Counter; }
|
int GetCount() const { return m_Counter; }
|
||||||
|
|
||||||
|
bool Equals(const QSharedDataPointer<CResLogEntry>& pOther) const {
|
||||||
|
return pOther->m_ProcessId == this->m_ProcessId
|
||||||
|
//&& pOther->m_Type.Flags == this->m_Type.Flags
|
||||||
|
&& pOther->m_Name == this->m_Name;
|
||||||
|
}
|
||||||
|
void Merge(const QSharedDataPointer<CResLogEntry>& pOther) { m_Counter++; this->m_Type.Flags |= pOther->m_Type.Flags; }
|
||||||
|
|
||||||
quint64 GetUID() const { return m_uid; }
|
quint64 GetUID() const { return m_uid; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>357</width>
|
<width>372</width>
|
||||||
<height>274</height>
|
<height>274</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>622</width>
|
<width>622</width>
|
||||||
<height>412</height>
|
<height>473</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -45,7 +45,7 @@
|
||||||
<enum>QTabWidget::West</enum>
|
<enum>QTabWidget::West</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>8</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tabGeneral">
|
<widget class="QWidget" name="tabGeneral">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
@ -64,24 +64,7 @@
|
||||||
<layout class="QGridLayout" name="gridLayout_27">
|
<layout class="QGridLayout" name="gridLayout_27">
|
||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<layout class="QGridLayout" name="gridLayout_8">
|
<layout class="QGridLayout" name="gridLayout_8">
|
||||||
<item row="2" column="6">
|
<item row="1" column="0" colspan="3">
|
||||||
<widget class="QLabel" name="label_14">
|
|
||||||
<property name="text">
|
|
||||||
<string>px Width</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="1" colspan="6">
|
|
||||||
<widget class="QCheckBox" name="chkDropRights">
|
|
||||||
<property name="text">
|
|
||||||
<string>Drop rights from Administrators and Power Users groups</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="2">
|
|
||||||
<widget class="QLabel" name="label_20">
|
<widget class="QLabel" name="label_20">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Sandbox Indicator in title:</string>
|
<string>Sandbox Indicator in title:</string>
|
||||||
|
@ -91,62 +74,7 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="2" colspan="2">
|
<item row="2" column="6">
|
||||||
<widget class="QComboBox" name="cmbBoxBorder"/>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0" colspan="2">
|
|
||||||
<widget class="QLabel" name="label_10">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Protect the system from sandboxed processes</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>General restrictions</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="7" column="2">
|
|
||||||
<spacer name="verticalSpacer_4">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="4">
|
|
||||||
<widget class="QToolButton" name="btnBorderColor">
|
|
||||||
<property name="text">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0" colspan="2">
|
|
||||||
<widget class="QLabel" name="label_7">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Appearance</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2" colspan="2">
|
|
||||||
<widget class="QComboBox" name="cmbBoxIndicator"/>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="5">
|
|
||||||
<widget class="QSpinBox" name="spinBorderWidth">
|
<widget class="QSpinBox" name="spinBorderWidth">
|
||||||
<property name="minimum">
|
<property name="minimum">
|
||||||
<number>1</number>
|
<number>1</number>
|
||||||
|
@ -159,6 +87,16 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="3" colspan="2">
|
||||||
|
<widget class="QComboBox" name="cmbBoxBorder"/>
|
||||||
|
</item>
|
||||||
|
<item row="8" column="1" colspan="6">
|
||||||
|
<widget class="QCheckBox" name="chkBlockSpooler">
|
||||||
|
<property name="text">
|
||||||
|
<string>Block access to the printer spooler</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item row="4" column="1" colspan="6">
|
<item row="4" column="1" colspan="6">
|
||||||
<widget class="QCheckBox" name="chkBlockNetShare">
|
<widget class="QCheckBox" name="chkBlockNetShare">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -166,7 +104,14 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0" colspan="2">
|
<item row="6" column="1" colspan="6">
|
||||||
|
<widget class="QCheckBox" name="chkDropRights">
|
||||||
|
<property name="text">
|
||||||
|
<string>Drop rights from Administrators and Power Users groups</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="0" colspan="3">
|
||||||
<widget class="QLabel" name="label_21">
|
<widget class="QLabel" name="label_21">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Sandboxed window border:</string>
|
<string>Sandboxed window border:</string>
|
||||||
|
@ -183,6 +128,136 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="11" column="2" colspan="5">
|
||||||
|
<spacer name="horizontalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="7">
|
||||||
|
<widget class="QLabel" name="label_14">
|
||||||
|
<property name="text">
|
||||||
|
<string>px Width</string>
|
||||||
|
</property>
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1">
|
||||||
|
<widget class="QLabel" name="label_30">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="maximumSize">
|
||||||
|
<size>
|
||||||
|
<width>16</width>
|
||||||
|
<height>16777215</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_7">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Appearance</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="3" colspan="2">
|
||||||
|
<widget class="QComboBox" name="cmbBoxIndicator"/>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="3">
|
||||||
|
<widget class="QLabel" name="label_10">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Protect the system from sandboxed processes</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>General restrictions</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="5">
|
||||||
|
<widget class="QToolButton" name="btnBorderColor">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="10" column="2" colspan="5">
|
||||||
|
<widget class="QCheckBox" name="chkPrintToFile">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Allow the print spooler to print to files outside the sandbox</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="1">
|
||||||
|
<spacer name="verticalSpacer_17">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="7" column="0" colspan="3">
|
||||||
|
<widget class="QLabel" name="label_31">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Protect the system from sandboxed processes</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Printing</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="9" column="2" colspan="6">
|
||||||
|
<widget class="QCheckBox" name="chkOpenSpooler">
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove spooler restriction, printers can be installed outside the sandbox</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -192,13 +267,6 @@
|
||||||
<string>Run Menu</string>
|
<string>Run Menu</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_33">
|
<layout class="QGridLayout" name="gridLayout_33">
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QPushButton" name="btnAddExe">
|
|
||||||
<property name="text">
|
|
||||||
<string>Browse</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label_8">
|
<widget class="QLabel" name="label_8">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
|
@ -209,27 +277,6 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" rowspan="4">
|
|
||||||
<widget class="QTreeWidget" name="treeRun">
|
|
||||||
<column>
|
|
||||||
<property name="text">
|
|
||||||
<string>Name</string>
|
|
||||||
</property>
|
|
||||||
</column>
|
|
||||||
<column>
|
|
||||||
<property name="text">
|
|
||||||
<string>Command Line</string>
|
|
||||||
</property>
|
|
||||||
</column>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="1">
|
|
||||||
<widget class="QPushButton" name="btnDelCmd">
|
|
||||||
<property name="text">
|
|
||||||
<string>Remove</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1">
|
<item row="3" column="1">
|
||||||
<spacer name="verticalSpacer_15">
|
<spacer name="verticalSpacer_15">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -243,10 +290,55 @@
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1">
|
<item row="1" column="0" rowspan="4">
|
||||||
<widget class="QPushButton" name="btnAddCmd">
|
<widget class="QTreeWidget" name="treeRun">
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Name</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Command Line</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QToolButton" name="btnAddCmd">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Add Command</string>
|
<string>Add program</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QToolButton" name="btnDelCmd">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -347,6 +439,107 @@
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_6">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Auto Start</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_32">
|
||||||
|
<property name="text">
|
||||||
|
<string>Here you can specify programs and/or services that are to be started automatically in the sandbox when it is activated</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" rowspan="4">
|
||||||
|
<widget class="QTreeWidget" name="treeAutoStart">
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string>Type</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
<column>
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true">Program/Service</string>
|
||||||
|
</property>
|
||||||
|
</column>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="1">
|
||||||
|
<widget class="QToolButton" name="btnDelAuto">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<spacer name="verticalSpacer_4">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QToolButton" name="btnAddAutoExe">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Add program</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QToolButton" name="btnAddAutoSvc">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>23</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Add service</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
@ -1107,26 +1300,10 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
<layout class="QGridLayout" name="gridLayout_26">
|
<layout class="QGridLayout" name="gridLayout_26">
|
||||||
<item row="0" column="1">
|
<item row="0" column="1">
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout_2">
|
||||||
<item row="12" column="2">
|
<item row="8" column="1" colspan="2">
|
||||||
<widget class="QCheckBox" name="chkOpenCredentials">
|
<widget class="QCheckBox" name="chkProtectSCM">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Open Windows Credentials Store</string>
|
<string>Limit access to the emulated service control manager to privileged processes</string>
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0" colspan="2">
|
|
||||||
<widget class="QLabel" name="label_12">
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<weight>75</weight>
|
|
||||||
<bold>true</bold>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="toolTip">
|
|
||||||
<string>Protect the sandbox integrity itself</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Sandbox protection</string>
|
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -1143,43 +1320,15 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="7" column="1" colspan="2">
|
<item row="9" column="1" colspan="2">
|
||||||
<widget class="QCheckBox" name="chkProtectSystem">
|
|
||||||
<property name="text">
|
|
||||||
<string>Protect sandboxed SYSTEM processes from unprivileged unsandboxed processes</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="1" colspan="2">
|
|
||||||
<widget class="QCheckBox" name="chkNoWindowRename">
|
|
||||||
<property name="text">
|
|
||||||
<string>Don't alter window class names created by sandboxed programs</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1" colspan="2">
|
|
||||||
<widget class="QCheckBox" name="chkPreferExternalManifest">
|
|
||||||
<property name="text">
|
|
||||||
<string>Force usage of custom dummy Manifest files (legacy behaviour)</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="6" column="1" colspan="2">
|
|
||||||
<widget class="QCheckBox" name="chkProtectRpcSs">
|
<widget class="QCheckBox" name="chkProtectRpcSs">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Start the sandboxed RpcSs as a SYSTEM process (breaks some compatibility)</string>
|
<string>Start the sandboxed RpcSs as a SYSTEM process (breaks some compatibility)</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="11" column="1" colspan="2">
|
<item row="7" column="0" colspan="3">
|
||||||
<widget class="QCheckBox" name="chkOpenProtectedStorage">
|
<widget class="QLabel" name="label_12">
|
||||||
<property name="text">
|
|
||||||
<string>Open System Protected Storage</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="10" column="0" colspan="2">
|
|
||||||
<widget class="QLabel" name="label_18">
|
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
<weight>75</weight>
|
<weight>75</weight>
|
||||||
|
@ -1187,14 +1336,14 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
</font>
|
</font>
|
||||||
</property>
|
</property>
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Protect the system from sandboxed processes</string>
|
<string>Protect the sandbox integrity itself</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Lift restrictions</string>
|
<string>Sandbox protection</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="14" column="2">
|
<item row="15" column="2">
|
||||||
<spacer name="horizontalSpacer_6">
|
<spacer name="horizontalSpacer_6">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
|
@ -1207,21 +1356,49 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="9" column="1" colspan="2">
|
<item row="3" column="1" colspan="2">
|
||||||
<widget class="QCheckBox" name="chkAddToJob">
|
<widget class="QCheckBox" name="chkNoWindowRename">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Add sandboxed processes to job objects (recommended)</string>
|
<string>Don't alter window class names created by sandboxed programs</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="1" colspan="2">
|
<item row="13" column="2">
|
||||||
<widget class="QCheckBox" name="chkProtectSCM">
|
<widget class="QCheckBox" name="chkOpenCredentials">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Limit access to the emulated service control manager to privileged processes</string>
|
<string>Open Windows Credentials Store</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="14" column="1">
|
<item row="6" column="1" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="chkRestrictServices">
|
||||||
|
<property name="text">
|
||||||
|
<string>Do not start sandboxed services using a system token (recommended)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="12" column="1" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="chkOpenProtectedStorage">
|
||||||
|
<property name="text">
|
||||||
|
<string>Open System Protected Storage</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="14" column="1" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="chkOpenSmartCard">
|
||||||
|
<property name="text">
|
||||||
|
<string>Allow access to Smart Cards</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="chkPreferExternalManifest">
|
||||||
|
<property name="text">
|
||||||
|
<string>Force usage of custom dummy Manifest files (legacy behaviour)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="15" column="1">
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Vertical</enum>
|
<enum>Qt::Vertical</enum>
|
||||||
|
@ -1234,7 +1411,37 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
<item row="8" column="0" colspan="2">
|
<item row="10" column="1" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="chkProtectSystem">
|
||||||
|
<property name="text">
|
||||||
|
<string>Protect sandboxed SYSTEM processes from unprivileged unsandboxed processes</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="1" colspan="2">
|
||||||
|
<widget class="QCheckBox" name="chkAddToJob">
|
||||||
|
<property name="text">
|
||||||
|
<string>Add sandboxed processes to job objects (recommended)</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="11" column="0" colspan="3">
|
||||||
|
<widget class="QLabel" name="label_18">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<weight>75</weight>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Protect the system from sandboxed processes</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Lift security restrictions</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
<widget class="QLabel" name="label_22">
|
<widget class="QLabel" name="label_22">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
|
@ -1246,7 +1453,7 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
<string>Protect the sandbox integrity itself</string>
|
<string>Protect the sandbox integrity itself</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Sandbox Isolation</string>
|
<string>Sandbox isolation</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -1254,6 +1461,53 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_2">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Auto Exec</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QGridLayout" name="gridLayout_35">
|
||||||
|
<item row="1" column="1">
|
||||||
|
<widget class="QPushButton" name="btnAddAutoExec">
|
||||||
|
<property name="text">
|
||||||
|
<string>Add Command</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<spacer name="verticalSpacer_18">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="1">
|
||||||
|
<widget class="QPushButton" name="btnDelAutoExec">
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="0">
|
||||||
|
<widget class="QLabel" name="label_33">
|
||||||
|
<property name="text">
|
||||||
|
<string>Here you can specify a list of commands that are executed every time the sandbox is initially populated.</string>
|
||||||
|
</property>
|
||||||
|
<property name="wordWrap">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" rowspan="3">
|
||||||
|
<widget class="QListWidget" name="lstAutoExec"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
<widget class="QWidget" name="tabHideProcesses">
|
<widget class="QWidget" name="tabHideProcesses">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
|
@ -1301,7 +1555,7 @@ For files access you can use 'Direct All' instead to make it apply to all progra
|
||||||
<item row="4" column="1">
|
<item row="4" column="1">
|
||||||
<widget class="QPushButton" name="btnDelProcess">
|
<widget class="QPushButton" name="btnDelProcess">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Remove Process</string>
|
<string>Remove</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
@ -1523,8 +1777,8 @@ instead of "*".</string>
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>98</width>
|
<width>530</width>
|
||||||
<height>28</height>
|
<height>312</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="dbgLayout">
|
<layout class="QGridLayout" name="dbgLayout">
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
<enum>QTabWidget::North</enum>
|
<enum>QTabWidget::North</enum>
|
||||||
</property>
|
</property>
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>1</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="tabGeneral">
|
<widget class="QWidget" name="tabGeneral">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
@ -346,13 +346,6 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="1" colspan="2">
|
|
||||||
<widget class="QCheckBox" name="chkSeparateUserFolders">
|
|
||||||
<property name="text">
|
|
||||||
<string>Separate user folders</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="10" column="1">
|
<item row="10" column="1">
|
||||||
<spacer name="verticalSpacer_2">
|
<spacer name="verticalSpacer_2">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -373,6 +366,20 @@
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QCheckBox" name="chkSeparateUserFolders">
|
||||||
|
<property name="text">
|
||||||
|
<string>Separate user folders</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QCheckBox" name="chkAutoRoot">
|
||||||
|
<property name="text">
|
||||||
|
<string>Portable root folder</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "ResMonModel.h"
|
#include "ResMonModel.h"
|
||||||
#include "../MiscHelpers/Common/Common.h"
|
#include "../MiscHelpers/Common/Common.h"
|
||||||
|
#include "../SbiePlusAPI.h"
|
||||||
|
|
||||||
CResMonModel::CResMonModel(QObject *parent)
|
CResMonModel::CResMonModel(QObject *parent)
|
||||||
:CListItemModel(parent)
|
:CListItemModel(parent)
|
||||||
|
@ -79,8 +80,8 @@ void CResMonModel::Sync(const QList<CResLogEntryPtr>& List, QSet<quint64> PIDs)
|
||||||
case eProcess: Value = pEntry->GetProcessId(); break;
|
case eProcess: Value = pEntry->GetProcessId(); break;
|
||||||
case eTimeStamp: Value = pEntry->GetTimeStamp(); break;
|
case eTimeStamp: Value = pEntry->GetTimeStamp(); break;
|
||||||
case eType: Value = pEntry->GetTypeStr(); break;
|
case eType: Value = pEntry->GetTypeStr(); break;
|
||||||
case eValue: Value = pEntry->GetValue(); break;
|
|
||||||
case eStatus: Value = pEntry->GetStautsStr(); break;
|
case eStatus: Value = pEntry->GetStautsStr(); break;
|
||||||
|
case eValue: Value = pEntry->GetValue(); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
SResLogNode::SValue& ColValue = pNode->Values[section];
|
SResLogNode::SValue& ColValue = pNode->Values[section];
|
||||||
|
@ -93,7 +94,12 @@ void CResMonModel::Sync(const QList<CResLogEntryPtr>& List, QSet<quint64> PIDs)
|
||||||
|
|
||||||
switch (section)
|
switch (section)
|
||||||
{
|
{
|
||||||
case eProcess: ColValue.Formated = QString::number(pEntry->GetProcessId()); break;
|
case eProcess:
|
||||||
|
{
|
||||||
|
CBoxedProcessPtr pProcess = theAPI->GetProcessById(pEntry->GetProcessId());
|
||||||
|
ColValue.Formated = QString("%1 (%2)").arg(pProcess.isNull() ? tr("Unknown") : pProcess->GetProcessName()).arg(pEntry->GetProcessId());
|
||||||
|
break;
|
||||||
|
}
|
||||||
case eTimeStamp: ColValue.Formated = pEntry->GetTimeStamp().toString("hh:mm:ss.zzz"); break;
|
case eTimeStamp: ColValue.Formated = pEntry->GetTimeStamp().toString("hh:mm:ss.zzz"); break;
|
||||||
//case eType: ColValue.Formated = ; break;
|
//case eType: ColValue.Formated = ; break;
|
||||||
//case eValue: ColValue.Formated = ; break;
|
//case eValue: ColValue.Formated = ; break;
|
||||||
|
@ -141,8 +147,8 @@ QVariant CResMonModel::headerData(int section, Qt::Orientation orientation, int
|
||||||
case eProcess: return tr("Process");
|
case eProcess: return tr("Process");
|
||||||
case eTimeStamp: return tr("Time Stamp");
|
case eTimeStamp: return tr("Time Stamp");
|
||||||
case eType: return tr("Type");
|
case eType: return tr("Type");
|
||||||
case eValue: return tr("Value");
|
|
||||||
case eStatus: return tr("Status");
|
case eStatus: return tr("Status");
|
||||||
|
case eValue: return tr("Value");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
|
@ -23,8 +23,8 @@ public:
|
||||||
eProcess = 0,
|
eProcess = 0,
|
||||||
eTimeStamp,
|
eTimeStamp,
|
||||||
eType,
|
eType,
|
||||||
eValue,
|
|
||||||
eStatus,
|
eStatus,
|
||||||
|
eValue,
|
||||||
eCount
|
eCount
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -66,12 +66,22 @@ bool CSbieModel::TestProcPath(const QList<QVariant>& Path, const QString& BoxNam
|
||||||
return Path.size() == Index;
|
return Path.size() == Index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString CSbieModel__AddGroupMark(const QString& Name)
|
||||||
|
{
|
||||||
|
return Name.isEmpty() ? "" : ("!" + Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString CSbieModel__RemoveGroupMark(const QString& Name)
|
||||||
|
{
|
||||||
|
return Name.left(1) == "!" ? Name.mid(1) : Name;
|
||||||
|
}
|
||||||
|
|
||||||
QString CSbieModel::FindParent(const QVariant& Name, const QMap<QString, QStringList>& Groups)
|
QString CSbieModel::FindParent(const QVariant& Name, const QMap<QString, QStringList>& Groups)
|
||||||
{
|
{
|
||||||
for(auto I = Groups.begin(); I != Groups.end(); ++I)
|
for(auto I = Groups.begin(); I != Groups.end(); ++I)
|
||||||
{
|
{
|
||||||
if (I.value().contains(Name.toString(), Qt::CaseInsensitive))
|
if (I.value().contains(CSbieModel__RemoveGroupMark(Name.toString()), Qt::CaseInsensitive))
|
||||||
return I.key();
|
return CSbieModel__AddGroupMark(I.key());
|
||||||
}
|
}
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
@ -99,7 +109,7 @@ QList<QVariant> CSbieModel::Sync(const QMap<QString, CSandBoxPtr>& BoxList, cons
|
||||||
{
|
{
|
||||||
if (Group.isEmpty())
|
if (Group.isEmpty())
|
||||||
continue;
|
continue;
|
||||||
QVariant ID = Group;
|
QVariant ID = CSbieModel__AddGroupMark(Group);
|
||||||
|
|
||||||
QHash<QVariant, STreeNode*>::iterator I = Old.find(ID);
|
QHash<QVariant, STreeNode*>::iterator I = Old.find(ID);
|
||||||
SSandBoxNode* pNode = I != Old.end() ? static_cast<SSandBoxNode*>(I.value()) : NULL;
|
SSandBoxNode* pNode = I != Old.end() ? static_cast<SSandBoxNode*>(I.value()) : NULL;
|
||||||
|
@ -299,7 +309,12 @@ bool CSbieModel::Sync(const CSandBoxPtr& pBox, const QList<QVariant>& Path, cons
|
||||||
//case eTitle: break; // todo
|
//case eTitle: break; // todo
|
||||||
//case eLogCount: break; // todo Value = pProcess->GetResourceLog().count(); break;
|
//case eLogCount: break; // todo Value = pProcess->GetResourceLog().count(); break;
|
||||||
case eTimeStamp: Value = pProcess->GetTimeStamp(); break;
|
case eTimeStamp: Value = pProcess->GetTimeStamp(); break;
|
||||||
case ePath: Value = pProcess->GetFileName(); break;
|
//case ePath: Value = pProcess->GetFileName(); break;
|
||||||
|
case ePath: {
|
||||||
|
QString CmdLine = pProcess->GetCommandLine();
|
||||||
|
Value = CmdLine.isEmpty() ? pProcess->GetFileName() : CmdLine;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SSandBoxNode::SValue& ColValue = pNode->Values[section];
|
SSandBoxNode::SValue& ColValue = pNode->Values[section];
|
||||||
|
@ -400,7 +415,7 @@ QVariant CSbieModel::headerData(int section, Qt::Orientation orientation, int ro
|
||||||
//case eTitle: return tr("Title");
|
//case eTitle: return tr("Title");
|
||||||
//case eLogCount: return tr("Log Count");
|
//case eLogCount: return tr("Log Count");
|
||||||
case eTimeStamp: return tr("Start Time");
|
case eTimeStamp: return tr("Start Time");
|
||||||
case ePath: return tr("Path");
|
case ePath: return tr("Path / Command Line");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
|
@ -122,6 +122,10 @@ CSandMan::CSandMan(QWidget *parent)
|
||||||
m_bConnectPending = false;
|
m_bConnectPending = false;
|
||||||
m_bStopPending = false;
|
m_bStopPending = false;
|
||||||
|
|
||||||
|
CPanelView::m_CopyCell = tr("Copy Cell");
|
||||||
|
CPanelView::m_CopyRow = tr("Copy Row");
|
||||||
|
CPanelView::m_CopyPanel = tr("Copy Panel");
|
||||||
|
|
||||||
CreateMenus();
|
CreateMenus();
|
||||||
|
|
||||||
m_pMainWidget = new QWidget();
|
m_pMainWidget = new QWidget();
|
||||||
|
@ -536,9 +540,9 @@ void CSandMan::OnMessage(const QString& Message)
|
||||||
if (Status != "OK")
|
if (Status != "OK")
|
||||||
{
|
{
|
||||||
if(m_bStopPending)
|
if(m_bStopPending)
|
||||||
QMessageBox::warning(NULL, tr("Sandboxie-Plus - Error"), tr("Failed to stop all sandboxie components"));
|
QMessageBox::warning(NULL, tr("Sandboxie-Plus - Error"), tr("Failed to stop all Sandboxie components"));
|
||||||
else if(m_bConnectPending)
|
else if(m_bConnectPending)
|
||||||
QMessageBox::warning(NULL, tr("Sandboxie-Plus - Error"), tr("Failed to start required sandboxie components"));
|
QMessageBox::warning(NULL, tr("Sandboxie-Plus - Error"), tr("Failed to start required Sandboxie components"));
|
||||||
|
|
||||||
OnLogMessage(tr("Maintenance operation %1").arg(Status));
|
OnLogMessage(tr("Maintenance operation %1").arg(Status));
|
||||||
CheckResults(QList<SB_STATUS>() << SB_ERR(SB_Message, QVariantList() << Status));
|
CheckResults(QList<SB_STATUS>() << SB_ERR(SB_Message, QVariantList() << Status));
|
||||||
|
@ -676,8 +680,10 @@ void CSandMan::OnSelectionChanged()
|
||||||
|
|
||||||
void CSandMan::OnStatusChanged()
|
void CSandMan::OnStatusChanged()
|
||||||
{
|
{
|
||||||
|
bool isConnected = theAPI->IsConnected();
|
||||||
|
|
||||||
QString appTitle = tr("Sandboxie-Plus v%1").arg(GetVersion());
|
QString appTitle = tr("Sandboxie-Plus v%1").arg(GetVersion());
|
||||||
if (theAPI->IsConnected())
|
if (isConnected)
|
||||||
{
|
{
|
||||||
OnLogMessage(tr("Sbie Directory: %1").arg(theAPI->GetSbiePath()));
|
OnLogMessage(tr("Sbie Directory: %1").arg(theAPI->GetSbiePath()));
|
||||||
OnLogMessage(tr("Loaded Config: %1").arg(theAPI->GetIniPath()));
|
OnLogMessage(tr("Loaded Config: %1").arg(theAPI->GetIniPath()));
|
||||||
|
@ -689,9 +695,20 @@ void CSandMan::OnStatusChanged()
|
||||||
{
|
{
|
||||||
appTitle.append(tr(" - Portable"));
|
appTitle.append(tr(" - Portable"));
|
||||||
|
|
||||||
if (theConf->GetBool("Options/PortableRootDir", true))
|
int PortableRootDir = theConf->GetInt("Options/PortableRootDir", -1);
|
||||||
|
if (PortableRootDir == -1)
|
||||||
{
|
{
|
||||||
QString BoxPath = QDir::cleanPath(QApplication::applicationDirPath() + "/../SandBoxes").replace("/", "\\");
|
bool State = false;
|
||||||
|
PortableRootDir = CCheckableMessageBox::question(this, "Sandboxie-Plus", tr("Sandboxie-Plus was started in portable mode, do you want to put the SandBox folder into its parent directory?")
|
||||||
|
, tr("Don't show this message again."), &State, QDialogButtonBox::Yes | QDialogButtonBox::No, QDialogButtonBox::Yes, QMessageBox::Information) == QDialogButtonBox::Yes ? 1 : 0;
|
||||||
|
|
||||||
|
if (State)
|
||||||
|
theConf->SetValue("Options/PortableRootDir", PortableRootDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PortableRootDir)
|
||||||
|
{
|
||||||
|
QString BoxPath = QDir::cleanPath(QApplication::applicationDirPath() + "/../Sandbox/%SANDBOX%").replace("/", "\\");
|
||||||
theAPI->GetGlobalSettings()->SetText("FileRootPath", BoxPath);
|
theAPI->GetGlobalSettings()->SetText("FileRootPath", BoxPath);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -706,6 +723,8 @@ void CSandMan::OnStatusChanged()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_pBoxView->Clear();
|
||||||
|
|
||||||
OnIniReloaded();
|
OnIniReloaded();
|
||||||
|
|
||||||
if (theConf->GetBool("Options/WatchIni", true))
|
if (theConf->GetBool("Options/WatchIni", true))
|
||||||
|
@ -715,9 +734,26 @@ void CSandMan::OnStatusChanged()
|
||||||
{
|
{
|
||||||
appTitle.append(tr(" - NOT connected").arg(theAPI->GetVersion()));
|
appTitle.append(tr(" - NOT connected").arg(theAPI->GetVersion()));
|
||||||
|
|
||||||
|
m_pBoxView->Clear();
|
||||||
|
|
||||||
theAPI->WatchIni(false);
|
theAPI->WatchIni(false);
|
||||||
}
|
}
|
||||||
this->setWindowTitle(appTitle);
|
this->setWindowTitle(appTitle);
|
||||||
|
|
||||||
|
|
||||||
|
m_pNew->setEnabled(isConnected);
|
||||||
|
m_pEmptyAll->setEnabled(isConnected);
|
||||||
|
m_pDisableForce->setEnabled(isConnected);
|
||||||
|
m_pDisableForce2->setEnabled(isConnected);
|
||||||
|
|
||||||
|
//m_pCleanUpMenu->setEnabled(isConnected);
|
||||||
|
//m_pCleanUpButton->setEnabled(isConnected);
|
||||||
|
//m_pKeepTerminated->setEnabled(isConnected);
|
||||||
|
|
||||||
|
m_pEditIni->setEnabled(isConnected);
|
||||||
|
m_pReloadIni->setEnabled(isConnected);
|
||||||
|
m_pEnableMonitoring->setEnabled(isConnected);
|
||||||
|
m_pEnableLogging->setEnabled(isConnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSandMan::OnMenuHover(QAction* action)
|
void CSandMan::OnMenuHover(QAction* action)
|
||||||
|
@ -827,6 +863,8 @@ void CSandMan::RecoverFilesAsync(const CSbieProgressPtr& pProgress, const QList<
|
||||||
{
|
{
|
||||||
SB_STATUS Status = SB_OK;
|
SB_STATUS Status = SB_OK;
|
||||||
|
|
||||||
|
int OverwriteOnExist = -1;
|
||||||
|
|
||||||
QStringList Unrecovered;
|
QStringList Unrecovered;
|
||||||
for (QList<QPair<QString, QString>>::const_iterator I = FileList.begin(); I != FileList.end(); ++I)
|
for (QList<QPair<QString, QString>>::const_iterator I = FileList.begin(); I != FileList.end(); ++I)
|
||||||
{
|
{
|
||||||
|
@ -838,6 +876,30 @@ void CSandMan::RecoverFilesAsync(const CSbieProgressPtr& pProgress, const QList<
|
||||||
pProgress->ShowMessage(tr("Recovering file %1 to %2").arg(FileName).arg(RecoveryFolder));
|
pProgress->ShowMessage(tr("Recovering file %1 to %2").arg(FileName).arg(RecoveryFolder));
|
||||||
|
|
||||||
QDir().mkpath(RecoveryFolder);
|
QDir().mkpath(RecoveryFolder);
|
||||||
|
if (QFile::exists(RecoveryPath))
|
||||||
|
{
|
||||||
|
int Overwrite = OverwriteOnExist;
|
||||||
|
if (Overwrite == -1)
|
||||||
|
{
|
||||||
|
bool forAll = false;
|
||||||
|
int retVal = 0;
|
||||||
|
QMetaObject::invokeMethod(theGUI, "ShowQuestion", Qt::BlockingQueuedConnection, // show this question using the GUI thread
|
||||||
|
Q_RETURN_ARG(int, retVal),
|
||||||
|
Q_ARG(QString, tr("The file %1 already exists, do you want to overwrite it?").arg(RecoveryPath)),
|
||||||
|
Q_ARG(QString, tr("Do this for all files!")),
|
||||||
|
Q_ARG(bool*, &forAll),
|
||||||
|
Q_ARG(int, QDialogButtonBox::Yes | QDialogButtonBox::No),
|
||||||
|
Q_ARG(int, QDialogButtonBox::No)
|
||||||
|
);
|
||||||
|
|
||||||
|
Overwrite = retVal == QDialogButtonBox::Yes ? 1 : 0;
|
||||||
|
if (forAll)
|
||||||
|
OverwriteOnExist = Overwrite;
|
||||||
|
}
|
||||||
|
if (Overwrite == 1)
|
||||||
|
QFile::remove(RecoveryPath);
|
||||||
|
}
|
||||||
|
|
||||||
if (!QFile::rename(BoxPath, RecoveryPath))
|
if (!QFile::rename(BoxPath, RecoveryPath))
|
||||||
Unrecovered.append(BoxPath);
|
Unrecovered.append(BoxPath);
|
||||||
}
|
}
|
||||||
|
@ -862,6 +924,11 @@ void CSandMan::RecoverFilesAsync(const CSbieProgressPtr& pProgress, const QList<
|
||||||
pProgress->Finish(Status);
|
pProgress->Finish(Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CSandMan::ShowQuestion(const QString& question, const QString& checkBoxText, bool* checkBoxSetting, int buttons, int defaultButton)
|
||||||
|
{
|
||||||
|
return CCheckableMessageBox::question(this, "Sandboxie-Plus", question, checkBoxText, checkBoxSetting, (QDialogButtonBox::StandardButtons)buttons, (QDialogButtonBox::StandardButton)defaultButton, QMessageBox::Question);
|
||||||
|
}
|
||||||
|
|
||||||
void CSandMan::OnNotAuthorized(bool bLoginRequired, bool& bRetry)
|
void CSandMan::OnNotAuthorized(bool bLoginRequired, bool& bRetry)
|
||||||
{
|
{
|
||||||
if (!bLoginRequired)
|
if (!bLoginRequired)
|
||||||
|
@ -1140,6 +1207,7 @@ void CSandMan::OnResetMsgs()
|
||||||
{
|
{
|
||||||
theConf->SetValue("Options/PortableStop", -1);
|
theConf->SetValue("Options/PortableStop", -1);
|
||||||
theConf->SetValue("Options/PortableStart", -1);
|
theConf->SetValue("Options/PortableStart", -1);
|
||||||
|
theConf->SetValue("Options/PortableRootDir", -1);
|
||||||
|
|
||||||
theConf->SetValue("Options/CheckForUpdates", 2);
|
theConf->SetValue("Options/CheckForUpdates", 2);
|
||||||
|
|
||||||
|
@ -1224,8 +1292,8 @@ void CSandMan::OnSetLogging()
|
||||||
{
|
{
|
||||||
if (theConf->GetBool("Options/ApiLogInfo", true))
|
if (theConf->GetBool("Options/ApiLogInfo", true))
|
||||||
{
|
{
|
||||||
QString Message = tr("To use API logging you must first set up the LogApiDll from https://github.com/sandboxie-plus/LogApiDll with one or more sand boxes.\n"
|
QString Message = tr("To use API logging you must first set up the LogApiDll from https://github.com/sandboxie-plus/LogApiDll with one or more sandboxes.\n"
|
||||||
"Please download the latest release and set it up with the sandboxie.ini as instructed in the README.md of the project.");
|
"Please download the latest release and set it up with the Sandboxie.ini as instructed in the README.md of the project.");
|
||||||
|
|
||||||
bool State = false;
|
bool State = false;
|
||||||
CCheckableMessageBox::question(this, "Sandboxie-Plus", Message
|
CCheckableMessageBox::question(this, "Sandboxie-Plus", Message
|
||||||
|
@ -1611,7 +1679,7 @@ void CSandMan::OnUpdateCheck()
|
||||||
theConf->SetValue("Options/NextCheckForUpdates", QDateTime::currentDateTime().addDays(7).toTime_t());
|
theConf->SetValue("Options/NextCheckForUpdates", QDateTime::currentDateTime().addDays(7).toTime_t());
|
||||||
|
|
||||||
if (bManual)
|
if (bManual)
|
||||||
QMessageBox::information(this, "Sandboxie-Plus", tr("No new updates found, your Sandboxie-Plus is up to date."));
|
QMessageBox::information(this, "Sandboxie-Plus", tr("No new updates found, your Sandboxie-Plus is up-to-date."));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1685,7 +1753,7 @@ void CSandMan::OnAbout()
|
||||||
"<p>Copyright (c) 2020-2021 by DavidXanatos</p>"
|
"<p>Copyright (c) 2020-2021 by DavidXanatos</p>"
|
||||||
).arg(GetVersion());
|
).arg(GetVersion());
|
||||||
QString AboutText = tr(
|
QString AboutText = tr(
|
||||||
"<p>Sandboxie-Plus is an open source continuation of the well known Sandboxie.</p>"
|
"<p>Sandboxie-Plus is an open source continuation of Sandboxie.</p>"
|
||||||
"<p></p>"
|
"<p></p>"
|
||||||
"<p>Visit <a href=\"https://sandboxie-plus.com\">sandboxie-plus.com</a> for more information.</p>"
|
"<p>Visit <a href=\"https://sandboxie-plus.com\">sandboxie-plus.com</a> for more information.</p>"
|
||||||
"<p></p>"
|
"<p></p>"
|
||||||
|
@ -1769,7 +1837,7 @@ void CSandMan::LoadLanguage()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_LanguageId)
|
if (!m_LanguageId)
|
||||||
m_LanguageId = 1033; // default to englich
|
m_LanguageId = 1033; // default to English
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
|
|
||||||
#define VERSION_MJR 0
|
#define VERSION_MJR 0
|
||||||
#define VERSION_MIN 5
|
#define VERSION_MIN 5
|
||||||
#define VERSION_REV 3
|
#define VERSION_REV 4
|
||||||
#define VERSION_UPD 1
|
#define VERSION_UPD 0
|
||||||
|
|
||||||
|
|
||||||
//#include "../QSbieAPI/SbieAPI.h"
|
//#include "../QSbieAPI/SbieAPI.h"
|
||||||
|
@ -46,6 +46,8 @@ public:
|
||||||
|
|
||||||
static QIcon GetIcon(const QString& Name);
|
static QIcon GetIcon(const QString& Name);
|
||||||
|
|
||||||
|
bool IsFullyPortable();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SB_STATUS ConnectSbie();
|
SB_STATUS ConnectSbie();
|
||||||
SB_STATUS ConnectSbieImpl();
|
SB_STATUS ConnectSbieImpl();
|
||||||
|
@ -54,8 +56,6 @@ protected:
|
||||||
|
|
||||||
static void RecoverFilesAsync(const CSbieProgressPtr& pProgress, const QList<QPair<QString, QString>>& FileList, int Action = 0);
|
static void RecoverFilesAsync(const CSbieProgressPtr& pProgress, const QList<QPair<QString, QString>>& FileList, int Action = 0);
|
||||||
|
|
||||||
bool IsFullyPortable();
|
|
||||||
|
|
||||||
void closeEvent(QCloseEvent *e);
|
void closeEvent(QCloseEvent *e);
|
||||||
void timerEvent(QTimerEvent* pEvent);
|
void timerEvent(QTimerEvent* pEvent);
|
||||||
int m_uTimerID;
|
int m_uTimerID;
|
||||||
|
@ -100,6 +100,8 @@ public slots:
|
||||||
|
|
||||||
void OpenUrl(const QUrl& url);
|
void OpenUrl(const QUrl& url);
|
||||||
|
|
||||||
|
int ShowQuestion(const QString& question, const QString& checkBoxText, bool* checkBoxSetting, int buttons, int defaultButton);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void OnSelectionChanged();
|
void OnSelectionChanged();
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,11 @@
|
||||||
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||||
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LibraryPath>$(SolutionDir)$(Platform)\$(Configuration)\;$(LibraryPath)</LibraryPath>
|
||||||
|
<OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>$(Platform)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
<ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
|
<ImportGroup Condition="Exists('$(QtMsBuild)\qt_defaults.props')">
|
||||||
<Import Project="$(QtMsBuild)\qt_defaults.props" />
|
<Import Project="$(QtMsBuild)\qt_defaults.props" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
@ -254,6 +259,7 @@
|
||||||
<None Include="sandman_de.ts" />
|
<None Include="sandman_de.ts" />
|
||||||
<None Include="sandman_pt.ts" />
|
<None Include="sandman_pt.ts" />
|
||||||
<None Include="sandman_ru.ts" />
|
<None Include="sandman_ru.ts" />
|
||||||
|
<None Include="sandman_zh.ts" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
|
||||||
|
|
|
@ -200,5 +200,8 @@
|
||||||
<None Include="sandman_ru.ts">
|
<None Include="sandman_ru.ts">
|
||||||
<Filter>Translation Files</Filter>
|
<Filter>Translation Files</Filter>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="sandman_zh.ts">
|
||||||
|
<Filter>Translation Files</Filter>
|
||||||
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
|
@ -70,16 +70,16 @@ void CSandBoxPlus::UpdateDetails()
|
||||||
|
|
||||||
m_bDropRights = GetBool("DropAdminRights", false);
|
m_bDropRights = GetBool("DropAdminRights", false);
|
||||||
|
|
||||||
if (CheckOpenToken())
|
if (CheckOpenToken() || GetBool("StripSystemPrivileges", false))
|
||||||
m_iUnsecureDebugging = 1;
|
m_iUnsecureDebugging = 1;
|
||||||
else if(GetBool("ExposeBoxedSystem", false) || GetBool("UnrestrictedSCM", false))
|
else if(GetBool("ExposeBoxedSystem", false) || GetBool("UnrestrictedSCM", false) || GetBool("RunServicesAsSystem", false))
|
||||||
m_iUnsecureDebugging = 2;
|
m_iUnsecureDebugging = 2;
|
||||||
else
|
else
|
||||||
m_iUnsecureDebugging = 0;
|
m_iUnsecureDebugging = 0;
|
||||||
|
|
||||||
//GetBool("SandboxieLogon", false)
|
//GetBool("SandboxieLogon", false)
|
||||||
|
|
||||||
m_bSecurityRestricted = m_iUnsecureDebugging == 0 && (GetBool("DropAdminRights", false) || GetBool("ProtectRpcSs", false));
|
m_bSecurityRestricted = m_iUnsecureDebugging == 0 && (GetBool("DropAdminRights", false) /*|| GetBool("ProtectRpcSs", false)*/);
|
||||||
|
|
||||||
CSandBox::UpdateDetails();
|
CSandBox::UpdateDetails();
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,6 +135,12 @@ CSbieView::~CSbieView()
|
||||||
theConf->SetBlob("MainWindow/BoxTree_Columns", m_pSbieTree->saveState());
|
theConf->SetBlob("MainWindow/BoxTree_Columns", m_pSbieTree->saveState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSbieView::Clear()
|
||||||
|
{
|
||||||
|
m_Groups.clear();
|
||||||
|
m_pSbieModel->Clear();
|
||||||
|
}
|
||||||
|
|
||||||
void CSbieView::Refresh()
|
void CSbieView::Refresh()
|
||||||
{
|
{
|
||||||
QList<QVariant> Added = m_pSbieModel->Sync(theAPI->GetAllBoxes(), m_Groups);
|
QList<QVariant> Added = m_pSbieModel->Sync(theAPI->GetAllBoxes(), m_Groups);
|
||||||
|
@ -177,6 +183,14 @@ void CSbieView::OnToolTipCallback(const QVariant& ID, QString& ToolTip)
|
||||||
|
|
||||||
void CSbieView::OnMenu(const QPoint& Point)
|
void CSbieView::OnMenu(const QPoint& Point)
|
||||||
{
|
{
|
||||||
|
QList<QAction*> MenuActions = m_pMenu->actions();
|
||||||
|
|
||||||
|
bool isConnected = theAPI->IsConnected();
|
||||||
|
if (isConnected) {
|
||||||
|
foreach(QAction * pAction, MenuActions)
|
||||||
|
pAction->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
CSandBoxPtr pBox;
|
CSandBoxPtr pBox;
|
||||||
CBoxedProcessPtr pProcess;
|
CBoxedProcessPtr pProcess;
|
||||||
int iProcessCount = 0;
|
int iProcessCount = 0;
|
||||||
|
@ -201,7 +215,6 @@ void CSbieView::OnMenu(const QPoint& Point)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QAction*> MenuActions = m_pMenu->actions();
|
|
||||||
|
|
||||||
for (int i = 0; i < m_iMenuTop; i++)
|
for (int i = 0; i < m_iMenuTop; i++)
|
||||||
MenuActions[i]->setVisible(iSandBoxeCount == 0 && iProcessCount == 0);
|
MenuActions[i]->setVisible(iSandBoxeCount == 0 && iProcessCount == 0);
|
||||||
|
@ -272,6 +285,11 @@ void CSbieView::OnMenu(const QPoint& Point)
|
||||||
//m_pMenuSuspend->setEnabled(iProcessCount > iSuspendedCount);
|
//m_pMenuSuspend->setEnabled(iProcessCount > iSuspendedCount);
|
||||||
//m_pMenuResume->setEnabled(iSuspendedCount > 0);
|
//m_pMenuResume->setEnabled(iSuspendedCount > 0);
|
||||||
|
|
||||||
|
if (!isConnected) {
|
||||||
|
foreach(QAction * pAction, MenuActions)
|
||||||
|
pAction->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
CPanelView::OnMenu(Point);
|
CPanelView::OnMenu(Point);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,7 +313,10 @@ int CSbieView__ParseGroup(const QString& Grouping, QMap<QString, QStringList>& m
|
||||||
if (pos == -1)
|
if (pos == -1)
|
||||||
break;
|
break;
|
||||||
if (Grouping.at(pos) == "(")
|
if (Grouping.at(pos) == "(")
|
||||||
|
{
|
||||||
|
m_Groups[Name] = QStringList();
|
||||||
Index = CSbieView__ParseGroup(Grouping, m_Groups, Name, Index);
|
Index = CSbieView__ParseGroup(Grouping, m_Groups, Name, Index);
|
||||||
|
}
|
||||||
else if (Grouping.at(pos) == ")")
|
else if (Grouping.at(pos) == ")")
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -355,8 +376,7 @@ void CSbieView::OnGroupAction()
|
||||||
if (m_pSbieModel->GetType(ModelIndex) == CSbieModel::eGroup)
|
if (m_pSbieModel->GetType(ModelIndex) == CSbieModel::eGroup)
|
||||||
Parent = m_pSbieModel->GetID(ModelIndex).toString();
|
Parent = m_pSbieModel->GetID(ModelIndex).toString();
|
||||||
|
|
||||||
if (!Parent.isEmpty())
|
m_Groups[Parent].append(Name);
|
||||||
m_Groups[Parent].append(Name);
|
|
||||||
}
|
}
|
||||||
else if (Action == m_pDelGroupe)
|
else if (Action == m_pDelGroupe)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@ signals:
|
||||||
void RecoveryRequested(const QString& BoxName);
|
void RecoveryRequested(const QString& BoxName);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
void Clear();
|
||||||
void Refresh();
|
void Refresh();
|
||||||
void ReloadGroups();
|
void ReloadGroups();
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@ CNewBoxWindow::CNewBoxWindow(QWidget *parent)
|
||||||
connect(ui.radCopy, SIGNAL(toggled(bool)), this, SLOT(OnPreset()));
|
connect(ui.radCopy, SIGNAL(toggled(bool)), this, SLOT(OnPreset()));
|
||||||
ui.radTemplate->setChecked(true);
|
ui.radTemplate->setChecked(true);
|
||||||
|
|
||||||
|
ui.txtName->setFocus();
|
||||||
|
|
||||||
restoreGeometry(theConf->GetBlob("NewBoxWindow/Window_Geometry"));
|
restoreGeometry(theConf->GetBlob("NewBoxWindow/Window_Geometry"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -72,11 +74,15 @@ void CNewBoxWindow::CreateBox()
|
||||||
{
|
{
|
||||||
case eHardened:
|
case eHardened:
|
||||||
pBox.objectCast<CSandBoxPlus>()->SetBool("DropAdminRights", true);
|
pBox.objectCast<CSandBoxPlus>()->SetBool("DropAdminRights", true);
|
||||||
pBox.objectCast<CSandBoxPlus>()->SetBool("ProtectRpcSs", true);
|
//pBox.objectCast<CSandBoxPlus>()->SetBool("ProtectRpcSs", true); // not compatible with RunServicesAsSystem=n which is on by default
|
||||||
|
pBox.objectCast<CSandBoxPlus>()->SetBool("ClosePrintSpooler", true);
|
||||||
|
pBox.objectCast<CSandBoxPlus>()->SetBool("OpenSmartCard", false);
|
||||||
break;
|
break;
|
||||||
case eLegacy:
|
case eLegacy:
|
||||||
pBox.objectCast<CSandBoxPlus>()->SetBool("UnrestrictedSCM", true);
|
pBox.objectCast<CSandBoxPlus>()->SetBool("UnrestrictedSCM", true);
|
||||||
pBox.objectCast<CSandBoxPlus>()->SetBool("ExposeBoxedSystem", true);
|
pBox.objectCast<CSandBoxPlus>()->SetBool("ExposeBoxedSystem", true);
|
||||||
|
//pBox.objectCast<CSandBoxPlus>()->SetBool("RunServicesAsSystem", true); // legacy behavioure but there should be no normal use cases which require this
|
||||||
|
pBox.objectCast<CSandBoxPlus>()->SetBool("OpenPrintSpooler", true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,6 +146,9 @@ COptionsWindow::COptionsWindow(const QSharedPointer<CSbieIni>& pBox, const QStri
|
||||||
connect(ui.chkBlockNetShare, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
connect(ui.chkBlockNetShare, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
connect(ui.chkBlockNetParam, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
connect(ui.chkBlockNetParam, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
connect(ui.chkDropRights, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
connect(ui.chkDropRights, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
|
connect(ui.chkBlockSpooler, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
|
connect(ui.chkOpenSpooler, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
|
connect(ui.chkPrintToFile, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
|
|
||||||
connect(ui.txtCopyLimit, SIGNAL(textChanged(const QString&)), this, SLOT(OnGeneralChanged()));
|
connect(ui.txtCopyLimit, SIGNAL(textChanged(const QString&)), this, SLOT(OnGeneralChanged()));
|
||||||
connect(ui.chkCopyLimit, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
connect(ui.chkCopyLimit, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
|
@ -154,9 +157,21 @@ COptionsWindow::COptionsWindow(const QSharedPointer<CSbieIni>& pBox, const QStri
|
||||||
connect(ui.chkProtectBox, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
connect(ui.chkProtectBox, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
connect(ui.chkAutoEmpty, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
connect(ui.chkAutoEmpty, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged()));
|
||||||
|
|
||||||
connect(ui.btnAddExe, SIGNAL(clicked(bool)), this, SLOT(OnBrowsePath()));
|
|
||||||
connect(ui.btnAddCmd, SIGNAL(clicked(bool)), this, SLOT(OnAddCommand()));
|
connect(ui.btnAddCmd, SIGNAL(clicked(bool)), this, SLOT(OnAddCommand()));
|
||||||
|
QMenu* pRunBtnMenu = new QMenu(ui.btnAddFile);
|
||||||
|
pRunBtnMenu->addAction(tr("Browse for Program"), this, SLOT(OnBrowsePath()));
|
||||||
|
ui.btnAddCmd->setPopupMode(QToolButton::MenuButtonPopup);
|
||||||
|
ui.btnAddCmd->setMenu(pRunBtnMenu);
|
||||||
connect(ui.btnDelCmd, SIGNAL(clicked(bool)), this, SLOT(OnDelCommand()));
|
connect(ui.btnDelCmd, SIGNAL(clicked(bool)), this, SLOT(OnDelCommand()));
|
||||||
|
|
||||||
|
connect(ui.btnAddAutoExe, SIGNAL(clicked(bool)), this, SLOT(OnAddAutoCmd()));
|
||||||
|
QMenu* pAutoBtnMenu = new QMenu(ui.btnAddFile);
|
||||||
|
pAutoBtnMenu->addAction(tr("Browse for Program"), this, SLOT(OnAddAutoExe()));
|
||||||
|
ui.btnAddAutoExe->setPopupMode(QToolButton::MenuButtonPopup);
|
||||||
|
ui.btnAddAutoExe->setMenu(pAutoBtnMenu);
|
||||||
|
connect(ui.btnAddAutoExe, SIGNAL(clicked(bool)), this, SLOT(OnAddAutoExe()));
|
||||||
|
connect(ui.btnAddAutoSvc, SIGNAL(clicked(bool)), this, SLOT(OnDelAutoSvc()));
|
||||||
|
connect(ui.btnDelAuto, SIGNAL(clicked(bool)), this, SLOT(OnDelAuto()));
|
||||||
//
|
//
|
||||||
|
|
||||||
// Groupes
|
// Groupes
|
||||||
|
@ -233,11 +248,14 @@ COptionsWindow::COptionsWindow(const QSharedPointer<CSbieIni>& pBox, const QStri
|
||||||
connect(ui.chkNoWindowRename, SIGNAL(clicked(bool)), this, SLOT(OnNoWindowRename()));
|
connect(ui.chkNoWindowRename, SIGNAL(clicked(bool)), this, SLOT(OnNoWindowRename()));
|
||||||
|
|
||||||
connect(ui.chkProtectSCM, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkProtectSCM, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
|
connect(ui.chkRestrictServices, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
connect(ui.chkProtectRpcSs, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkProtectRpcSs, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
connect(ui.chkProtectSystem, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkProtectSystem, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
|
|
||||||
connect(ui.chkOpenCredentials, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkOpenCredentials, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
connect(ui.chkOpenProtectedStorage, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkOpenProtectedStorage, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
|
connect(ui.chkOpenSmartCard, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
|
//connect(ui.chkOpenLsaEndpoint, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
|
|
||||||
connect(ui.chkAddToJob, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkAddToJob, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
|
|
||||||
|
@ -249,6 +267,9 @@ COptionsWindow::COptionsWindow(const QSharedPointer<CSbieIni>& pBox, const QStri
|
||||||
connect(ui.chkComTrace, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkComTrace, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
connect(ui.chkDbgTrace, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkDbgTrace, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
|
|
||||||
|
connect(ui.btnAddAutoExec, SIGNAL(pressed()), this, SLOT(OnAddAutoExec()));
|
||||||
|
connect(ui.btnDelAutoExec, SIGNAL(pressed()), this, SLOT(OnDelAutoExec()));
|
||||||
|
|
||||||
connect(ui.chkHideOtherBoxes, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
connect(ui.chkHideOtherBoxes, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged()));
|
||||||
connect(ui.btnAddProcess, SIGNAL(pressed()), this, SLOT(OnAddProcess()));
|
connect(ui.btnAddProcess, SIGNAL(pressed()), this, SLOT(OnAddProcess()));
|
||||||
connect(ui.btnDelProcess, SIGNAL(pressed()), this, SLOT(OnDelProcess()));
|
connect(ui.btnDelProcess, SIGNAL(pressed()), this, SLOT(OnDelProcess()));
|
||||||
|
@ -293,6 +314,8 @@ COptionsWindow::COptionsWindow(const QSharedPointer<CSbieIni>& pBox, const QStri
|
||||||
QByteArray
|
QByteArray
|
||||||
Columns = theConf->GetBlob("OptionsWindow/Run_Columns");
|
Columns = theConf->GetBlob("OptionsWindow/Run_Columns");
|
||||||
if (!Columns.isEmpty()) ui.treeRun->header()->restoreState(Columns);
|
if (!Columns.isEmpty()) ui.treeRun->header()->restoreState(Columns);
|
||||||
|
Columns = theConf->GetBlob("OptionsWindow/AutoRun_Columns");
|
||||||
|
if (!Columns.isEmpty()) ui.treeAutoStart->header()->restoreState(Columns);
|
||||||
Columns = theConf->GetBlob("OptionsWindow/Groups_Columns");
|
Columns = theConf->GetBlob("OptionsWindow/Groups_Columns");
|
||||||
if (!Columns.isEmpty()) ui.treeGroups->header()->restoreState(Columns);
|
if (!Columns.isEmpty()) ui.treeGroups->header()->restoreState(Columns);
|
||||||
Columns = theConf->GetBlob("OptionsWindow/Forced_Columns");
|
Columns = theConf->GetBlob("OptionsWindow/Forced_Columns");
|
||||||
|
@ -316,6 +339,7 @@ COptionsWindow::~COptionsWindow()
|
||||||
theConf->SetBlob("OptionsWindow/Window_Geometry",saveGeometry());
|
theConf->SetBlob("OptionsWindow/Window_Geometry",saveGeometry());
|
||||||
|
|
||||||
theConf->SetBlob("OptionsWindow/Run_Columns", ui.treeRun->header()->saveState());
|
theConf->SetBlob("OptionsWindow/Run_Columns", ui.treeRun->header()->saveState());
|
||||||
|
theConf->SetBlob("OptionsWindow/AutoRun_Columns", ui.treeAutoStart->header()->saveState());
|
||||||
theConf->SetBlob("OptionsWindow/Groups_Columns", ui.treeGroups->header()->saveState());
|
theConf->SetBlob("OptionsWindow/Groups_Columns", ui.treeGroups->header()->saveState());
|
||||||
theConf->SetBlob("OptionsWindow/Forced_Columns", ui.treeForced->header()->saveState());
|
theConf->SetBlob("OptionsWindow/Forced_Columns", ui.treeForced->header()->saveState());
|
||||||
theConf->SetBlob("OptionsWindow/Stop_Columns", ui.treeStop->header()->saveState());
|
theConf->SetBlob("OptionsWindow/Stop_Columns", ui.treeStop->header()->saveState());
|
||||||
|
@ -374,6 +398,17 @@ void COptionsWindow::LoadConfig()
|
||||||
ui.chkBlockNetShare->setChecked(m_pBox->GetBool("BlockNetworkFiles", true));
|
ui.chkBlockNetShare->setChecked(m_pBox->GetBool("BlockNetworkFiles", true));
|
||||||
ui.chkBlockNetParam->setChecked(m_pBox->GetBool("BlockNetParam", true));
|
ui.chkBlockNetParam->setChecked(m_pBox->GetBool("BlockNetParam", true));
|
||||||
ui.chkDropRights->setChecked(m_pBox->GetBool("DropAdminRights", false));
|
ui.chkDropRights->setChecked(m_pBox->GetBool("DropAdminRights", false));
|
||||||
|
ui.chkBlockSpooler->setChecked(m_pBox->GetBool("ClosePrintSpooler", false));
|
||||||
|
ui.chkOpenSpooler->setChecked(m_pBox->GetBool("OpenPrintSpooler", false));
|
||||||
|
ui.chkOpenSpooler->setEnabled(!ui.chkBlockSpooler->isChecked());
|
||||||
|
ui.chkPrintToFile->setChecked(m_pBox->GetBool("AllowSpoolerPrintToFile", false));
|
||||||
|
ui.chkPrintToFile->setEnabled(!ui.chkBlockSpooler->isChecked());
|
||||||
|
|
||||||
|
ui.treeAutoStart->clear();
|
||||||
|
foreach(const QString & Value, m_pBox->GetTextList("StartProgram", m_Template))
|
||||||
|
AddAutoRunItem(Value, 0);
|
||||||
|
foreach(const QString & Value, m_pBox->GetTextList("StartService", m_Template))
|
||||||
|
AddAutoRunItem(Value, 1);
|
||||||
|
|
||||||
ui.treeRun->clear();
|
ui.treeRun->clear();
|
||||||
foreach(const QString& Value, m_pBox->GetTextList("RunCommand", m_Template))
|
foreach(const QString& Value, m_pBox->GetTextList("RunCommand", m_Template))
|
||||||
|
@ -425,15 +460,26 @@ void COptionsWindow::LoadConfig()
|
||||||
ui.chkPreferExternalManifest->setChecked(m_pBox->GetBool("PreferExternalManifest", false));
|
ui.chkPreferExternalManifest->setChecked(m_pBox->GetBool("PreferExternalManifest", false));
|
||||||
|
|
||||||
ui.chkProtectSCM->setChecked(!m_pBox->GetBool("UnrestrictedSCM", false));
|
ui.chkProtectSCM->setChecked(!m_pBox->GetBool("UnrestrictedSCM", false));
|
||||||
ui.chkProtectRpcSs->setChecked(m_pBox->GetBool("ProtectRpcSs", false));
|
ui.chkRestrictServices->setChecked(!m_pBox->GetBool("RunServicesAsSystem", false));
|
||||||
|
ui.chkProtectRpcSs->setEnabled(!ui.chkRestrictServices->isChecked());
|
||||||
|
ui.chkProtectRpcSs->setChecked(ui.chkProtectRpcSs->isEnabled() && m_pBox->GetBool("ProtectRpcSs", false));
|
||||||
ui.chkProtectSystem->setChecked(!m_pBox->GetBool("ExposeBoxedSystem", false));
|
ui.chkProtectSystem->setChecked(!m_pBox->GetBool("ExposeBoxedSystem", false));
|
||||||
|
|
||||||
ui.chkOpenProtectedStorage->setChecked(m_pBox->GetBool("OpenProtectedStorage", false));
|
ui.chkOpenProtectedStorage->setChecked(m_pBox->GetBool("OpenProtectedStorage", false));
|
||||||
ui.chkOpenCredentials->setEnabled(!ui.chkOpenProtectedStorage->isChecked());
|
ui.chkOpenCredentials->setEnabled(!ui.chkOpenProtectedStorage->isChecked());
|
||||||
ui.chkOpenCredentials->setChecked(m_pBox->GetBool("OpenCredentials", false));
|
ui.chkOpenCredentials->setChecked(!ui.chkOpenCredentials->isEnabled() || m_pBox->GetBool("OpenCredentials", false));
|
||||||
|
ui.chkOpenSmartCard->setChecked(m_pBox->GetBool("OpenSmartCard", true));
|
||||||
|
//ui.chkOpenLsaEndpoint->setChecked(m_pBox->GetBool("OpenLsaEndpoint", false));
|
||||||
|
|
||||||
|
|
||||||
ui.chkAddToJob->setChecked(!m_pBox->GetBool("NoAddProcessToJob", false));
|
ui.chkAddToJob->setChecked(!m_pBox->GetBool("NoAddProcessToJob", false));
|
||||||
|
|
||||||
|
|
||||||
|
QStringList AutoExec = m_pBox->GetTextList("AutoExec", m_Template);
|
||||||
|
ui.lstAutoExec->clear();
|
||||||
|
ui.lstAutoExec->addItems(AutoExec);
|
||||||
|
|
||||||
|
|
||||||
ReadAdvancedCheck("FileTrace", ui.chkFileTrace, "*");
|
ReadAdvancedCheck("FileTrace", ui.chkFileTrace, "*");
|
||||||
ReadAdvancedCheck("PipeTrace", ui.chkPipeTrace, "*");
|
ReadAdvancedCheck("PipeTrace", ui.chkPipeTrace, "*");
|
||||||
ReadAdvancedCheck("KeyTrace", ui.chkKeyTrace, "*");
|
ReadAdvancedCheck("KeyTrace", ui.chkKeyTrace, "*");
|
||||||
|
@ -443,7 +489,7 @@ void COptionsWindow::LoadConfig()
|
||||||
ui.chkDbgTrace->setChecked(m_pBox->GetBool("DebugTrace", false));
|
ui.chkDbgTrace->setChecked(m_pBox->GetBool("DebugTrace", false));
|
||||||
|
|
||||||
ui.chkHideOtherBoxes->setChecked(m_pBox->GetBool("HideOtherBoxes", false));
|
ui.chkHideOtherBoxes->setChecked(m_pBox->GetBool("HideOtherBoxes", false));
|
||||||
QStringList Processes = m_pBox->GetTextList("HideHostProcess", false);
|
QStringList Processes = m_pBox->GetTextList("HideHostProcess", m_Template);
|
||||||
ui.lstProcesses->clear();
|
ui.lstProcesses->clear();
|
||||||
ui.lstProcesses->addItems(Processes);
|
ui.lstProcesses->addItems(Processes);
|
||||||
|
|
||||||
|
@ -512,6 +558,22 @@ void COptionsWindow::SaveConfig()
|
||||||
m_pBox->SetBool("BlockNetworkFiles", ui.chkBlockNetShare->isChecked());
|
m_pBox->SetBool("BlockNetworkFiles", ui.chkBlockNetShare->isChecked());
|
||||||
m_pBox->SetBool("BlockNetParam", ui.chkBlockNetParam->isChecked());
|
m_pBox->SetBool("BlockNetParam", ui.chkBlockNetParam->isChecked());
|
||||||
m_pBox->SetBool("DropAdminRights", ui.chkDropRights->isChecked());
|
m_pBox->SetBool("DropAdminRights", ui.chkDropRights->isChecked());
|
||||||
|
m_pBox->SetBool("ClosePrintSpooler", ui.chkBlockSpooler->isChecked());
|
||||||
|
m_pBox->SetBool("OpenPrintSpooler", ui.chkOpenSpooler->isChecked());
|
||||||
|
m_pBox->SetBool("AllowSpoolerPrintToFile", ui.chkPrintToFile->isChecked());
|
||||||
|
|
||||||
|
|
||||||
|
QStringList StartProgram;
|
||||||
|
QStringList StartService;
|
||||||
|
for (int i = 0; i < ui.treeAutoStart->topLevelItemCount(); i++) {
|
||||||
|
QTreeWidgetItem* pItem = ui.treeAutoStart->topLevelItem(i);
|
||||||
|
if (pItem->data(0, Qt::UserRole).toInt())
|
||||||
|
StartService.append(pItem->text(1));
|
||||||
|
else
|
||||||
|
StartProgram.append(pItem->text(1));
|
||||||
|
}
|
||||||
|
m_pBox->UpdateTextList("StartProgram", StartProgram, m_Template);
|
||||||
|
m_pBox->UpdateTextList("StartService", StartService, m_Template);
|
||||||
|
|
||||||
QStringList RunCommands;
|
QStringList RunCommands;
|
||||||
for (int i = 0; i < ui.treeRun->topLevelItemCount(); i++) {
|
for (int i = 0; i < ui.treeRun->topLevelItemCount(); i++) {
|
||||||
|
@ -566,14 +628,26 @@ void COptionsWindow::SaveConfig()
|
||||||
else m_pBox->DelValue("PreferExternalManifest");
|
else m_pBox->DelValue("PreferExternalManifest");
|
||||||
|
|
||||||
WriteAdvancedCheck(ui.chkProtectSCM, "UnrestrictedSCM", "", "y");
|
WriteAdvancedCheck(ui.chkProtectSCM, "UnrestrictedSCM", "", "y");
|
||||||
WriteAdvancedCheck(ui.chkProtectRpcSs, "ProtectRpcSs", "y", "");
|
WriteAdvancedCheck(ui.chkRestrictServices, "RunServicesAsSystem", "", "y");
|
||||||
|
if(ui.chkProtectRpcSs->isEnabled())
|
||||||
|
WriteAdvancedCheck(ui.chkProtectRpcSs, "ProtectRpcSs", "y", "");
|
||||||
WriteAdvancedCheck(ui.chkProtectSystem, "ExposeBoxedSystem", "", "y");
|
WriteAdvancedCheck(ui.chkProtectSystem, "ExposeBoxedSystem", "", "y");
|
||||||
|
|
||||||
WriteAdvancedCheck(ui.chkOpenProtectedStorage, "OpenProtectedStorage", "y", "");
|
WriteAdvancedCheck(ui.chkOpenProtectedStorage, "OpenProtectedStorage", "y", "");
|
||||||
WriteAdvancedCheck(ui.chkOpenCredentials, "OpenCredentials", "y", "");
|
if(ui.chkOpenCredentials->isEnabled())
|
||||||
|
WriteAdvancedCheck(ui.chkOpenCredentials, "OpenCredentials", "y", "");
|
||||||
|
WriteAdvancedCheck(ui.chkOpenSmartCard, "OpenSmartCard", "", "n");
|
||||||
|
//WriteAdvancedCheck(ui.chkOpenLsaEndpoint, "OpenLsaEndpoint", "y", "");
|
||||||
|
|
||||||
WriteAdvancedCheck(ui.chkAddToJob, "NoAddProcessToJob", "", "y");
|
WriteAdvancedCheck(ui.chkAddToJob, "NoAddProcessToJob", "", "y");
|
||||||
|
|
||||||
|
QStringList AutoExec;
|
||||||
|
for (int i = 0; i < ui.lstAutoExec->count(); i++)
|
||||||
|
AutoExec.append(ui.lstAutoExec->item(i)->text());
|
||||||
|
m_pBox->UpdateTextList("AutoExec", AutoExec, m_Template);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WriteAdvancedCheck(ui.chkFileTrace, "FileTrace", "*");
|
WriteAdvancedCheck(ui.chkFileTrace, "FileTrace", "*");
|
||||||
WriteAdvancedCheck(ui.chkPipeTrace, "PipeTrace", "*");
|
WriteAdvancedCheck(ui.chkPipeTrace, "PipeTrace", "*");
|
||||||
WriteAdvancedCheck(ui.chkKeyTrace, "KeyTrace", "*");
|
WriteAdvancedCheck(ui.chkKeyTrace, "KeyTrace", "*");
|
||||||
|
@ -587,7 +661,7 @@ void COptionsWindow::SaveConfig()
|
||||||
QStringList Processes;
|
QStringList Processes;
|
||||||
for (int i = 0; i < ui.lstProcesses->count(); i++)
|
for (int i = 0; i < ui.lstProcesses->count(); i++)
|
||||||
Processes.append(ui.lstProcesses->item(i)->text());
|
Processes.append(ui.lstProcesses->item(i)->text());
|
||||||
m_pBox->UpdateTextList("HideHostProcess", Processes, false);
|
m_pBox->UpdateTextList("HideHostProcess", Processes, m_Template);
|
||||||
|
|
||||||
QStringList Users;
|
QStringList Users;
|
||||||
for (int i = 0; i < ui.lstUsers->count(); i++)
|
for (int i = 0; i < ui.lstUsers->count(); i++)
|
||||||
|
@ -645,6 +719,9 @@ void COptionsWindow::OnGeneralChanged()
|
||||||
ui.chkNoCopyWarn->setEnabled(ui.chkCopyLimit->isChecked());
|
ui.chkNoCopyWarn->setEnabled(ui.chkCopyLimit->isChecked());
|
||||||
|
|
||||||
ui.chkAutoEmpty->setEnabled(!ui.chkProtectBox->isChecked());
|
ui.chkAutoEmpty->setEnabled(!ui.chkProtectBox->isChecked());
|
||||||
|
|
||||||
|
ui.chkOpenSpooler->setEnabled(!ui.chkBlockSpooler->isChecked());
|
||||||
|
ui.chkPrintToFile->setEnabled(!ui.chkBlockSpooler->isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
void COptionsWindow::OnPickColor()
|
void COptionsWindow::OnPickColor()
|
||||||
|
@ -657,6 +734,56 @@ void COptionsWindow::OnPickColor()
|
||||||
ui.btnBorderColor->setStyleSheet("background-color: " + m_BorderColor.name());
|
ui.btnBorderColor->setStyleSheet("background-color: " + m_BorderColor.name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::OnAddAutoCmd()
|
||||||
|
{
|
||||||
|
QString Value = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a program path"), QLineEdit::Normal);
|
||||||
|
if (Value.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
AddAutoRunItem(Value, 0);
|
||||||
|
m_GeneralChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::OnAddAutoExe()
|
||||||
|
{
|
||||||
|
QString Value = QFileDialog::getOpenFileName(this, tr("Select Program"), "", tr("Executables (*.exe|*.cmd)")).replace("/", "\\");;
|
||||||
|
if (Value.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
AddAutoRunItem(Value, 0);
|
||||||
|
m_GeneralChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::OnDelAutoSvc()
|
||||||
|
{
|
||||||
|
QString Value = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a service identifier"), QLineEdit::Normal);
|
||||||
|
if (Value.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
AddAutoRunItem(Value, 1);
|
||||||
|
m_GeneralChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::AddAutoRunItem(const QString& Value, int Type)
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* pItem = new QTreeWidgetItem();
|
||||||
|
pItem->setText(0, Type ? tr("Service") : tr("Program"));
|
||||||
|
pItem->setData(0, Qt::UserRole, Type);
|
||||||
|
pItem->setText(1, Value);
|
||||||
|
pItem->setFlags(pItem->flags() | Qt::ItemIsEditable);
|
||||||
|
ui.treeAutoStart->addTopLevelItem(pItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::OnDelAuto()
|
||||||
|
{
|
||||||
|
QTreeWidgetItem* pItem = ui.treeAutoStart->currentItem();
|
||||||
|
if (!pItem)
|
||||||
|
return;
|
||||||
|
|
||||||
|
delete pItem;
|
||||||
|
m_GeneralChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
void COptionsWindow::OnBrowsePath()
|
void COptionsWindow::OnBrowsePath()
|
||||||
{
|
{
|
||||||
QString Value = QFileDialog::getOpenFileName(this, tr("Select Program"), "", tr("Executables (*.exe|*.cmd)")).replace("/", "\\");;
|
QString Value = QFileDialog::getOpenFileName(this, tr("Select Program"), "", tr("Executables (*.exe|*.cmd)")).replace("/", "\\");;
|
||||||
|
@ -1600,6 +1727,8 @@ void COptionsWindow::OnDelAccess()
|
||||||
|
|
||||||
void COptionsWindow::SaveAccessList()
|
void COptionsWindow::SaveAccessList()
|
||||||
{
|
{
|
||||||
|
CloseAccessEdit(true);
|
||||||
|
|
||||||
QStringList Keys = QStringList() << "OpenFilePath" << "OpenPipePath" << "ClosedFilePath" << "ReadFilePath" << "WriteFilePath"
|
QStringList Keys = QStringList() << "OpenFilePath" << "OpenPipePath" << "ClosedFilePath" << "ReadFilePath" << "WriteFilePath"
|
||||||
<< "OpenKeyPath" << "ClosedKeyPath" << "ReadKeyPath" << "WriteKeyPath"
|
<< "OpenKeyPath" << "ClosedKeyPath" << "ReadKeyPath" << "WriteKeyPath"
|
||||||
<< "OpenIpcPath" << "ClosedIpcPath" << "OpenWinClass" << "OpenClsid" << "ClosedClsid" << "ClosedRT";
|
<< "OpenIpcPath" << "ClosedIpcPath" << "OpenWinClass" << "OpenClsid" << "ClosedClsid" << "ClosedRT";
|
||||||
|
@ -1736,7 +1865,12 @@ void COptionsWindow::OnDelRecEntry()
|
||||||
|
|
||||||
void COptionsWindow::OnAdvancedChanged()
|
void COptionsWindow::OnAdvancedChanged()
|
||||||
{
|
{
|
||||||
|
ui.chkProtectRpcSs->setEnabled(!ui.chkRestrictServices->isChecked());
|
||||||
|
if (!ui.chkProtectRpcSs->isEnabled()) ui.chkProtectRpcSs->setChecked(false);
|
||||||
|
|
||||||
ui.chkOpenCredentials->setEnabled(!ui.chkOpenProtectedStorage->isChecked());
|
ui.chkOpenCredentials->setEnabled(!ui.chkOpenProtectedStorage->isChecked());
|
||||||
|
if (!ui.chkOpenCredentials->isEnabled()) ui.chkOpenCredentials->setChecked(true);
|
||||||
|
|
||||||
m_AdvancedChanged = true;
|
m_AdvancedChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1755,6 +1889,25 @@ void COptionsWindow::OnDebugChanged()
|
||||||
m_DebugOptions[pCheck].Changed = true;
|
m_DebugOptions[pCheck].Changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::OnAddAutoExec()
|
||||||
|
{
|
||||||
|
QString Process = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter an auto exec command"));
|
||||||
|
if (Process.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
ui.lstAutoExec->addItem(Process);
|
||||||
|
|
||||||
|
m_AdvancedChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void COptionsWindow::OnDelAutoExec()
|
||||||
|
{
|
||||||
|
foreach(QListWidgetItem * pItem, ui.lstAutoExec->selectedItems())
|
||||||
|
delete pItem;
|
||||||
|
|
||||||
|
m_AdvancedChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
void COptionsWindow::OnAddProcess()
|
void COptionsWindow::OnAddProcess()
|
||||||
{
|
{
|
||||||
QString Process = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a program file name"));
|
QString Process = QInputDialog::getText(this, "Sandboxie-Plus", tr("Please enter a program file name"));
|
||||||
|
@ -1994,11 +2147,15 @@ void COptionsWindow::OnTab()
|
||||||
else
|
else
|
||||||
ui.radStartAll->setChecked(true);
|
ui.radStartAll->setChecked(true);
|
||||||
CopyGroupToList("<StartRunAccess>", ui.treeStart);
|
CopyGroupToList("<StartRunAccess>", ui.treeStart);
|
||||||
|
|
||||||
|
OnRestrictStart();
|
||||||
}
|
}
|
||||||
else if (ui.tabs->currentWidget() == ui.tabInternet)
|
else if (ui.tabs->currentWidget() == ui.tabInternet)
|
||||||
{
|
{
|
||||||
ui.chkBlockINet->setChecked(GetAccessEntry(eFile, "!<InternetAccess>", eClosed, "InternetAccessDevices") != NULL);
|
ui.chkBlockINet->setChecked(GetAccessEntry(eFile, "!<InternetAccess>", eClosed, "InternetAccessDevices") != NULL);
|
||||||
CopyGroupToList("<InternetAccess>", ui.treeINet);
|
CopyGroupToList("<InternetAccess>", ui.treeINet);
|
||||||
|
|
||||||
|
OnBlockINet();
|
||||||
}
|
}
|
||||||
else if (ui.tabs->currentWidget() == ui.tabAdvanced)
|
else if (ui.tabs->currentWidget() == ui.tabAdvanced)
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,6 +30,11 @@ private slots:
|
||||||
void OnAddCommand();
|
void OnAddCommand();
|
||||||
void OnDelCommand();
|
void OnDelCommand();
|
||||||
|
|
||||||
|
void OnAddAutoCmd();
|
||||||
|
void OnAddAutoExe();
|
||||||
|
void OnDelAutoSvc();
|
||||||
|
void OnDelAuto();
|
||||||
|
|
||||||
void OnAddGroup();
|
void OnAddGroup();
|
||||||
void OnAddProg();
|
void OnAddProg();
|
||||||
void OnDelProg();
|
void OnDelProg();
|
||||||
|
@ -72,6 +77,9 @@ private slots:
|
||||||
void OnDelRecEntry();
|
void OnDelRecEntry();
|
||||||
void OnShowRecoveryTmpl() { LoadRecoveryList(); }
|
void OnShowRecoveryTmpl() { LoadRecoveryList(); }
|
||||||
|
|
||||||
|
void OnAddAutoExec();
|
||||||
|
void OnDelAutoExec();
|
||||||
|
|
||||||
void OnAddProcess();
|
void OnAddProcess();
|
||||||
void OnDelProcess();
|
void OnDelProcess();
|
||||||
|
|
||||||
|
@ -163,6 +171,8 @@ protected:
|
||||||
void LoadConfig();
|
void LoadConfig();
|
||||||
void SaveConfig();
|
void SaveConfig();
|
||||||
|
|
||||||
|
void AddAutoRunItem(const QString& Value, int Type);
|
||||||
|
|
||||||
void AddRunItem(const QString& Name, const QString& Command);
|
void AddRunItem(const QString& Name, const QString& Command);
|
||||||
|
|
||||||
void LoadGroups();
|
void LoadGroups();
|
||||||
|
|
|
@ -112,6 +112,13 @@ CSettingsWindow::CSettingsWindow(QWidget *parent)
|
||||||
}
|
}
|
||||||
m_WarnProgsChanged = false;
|
m_WarnProgsChanged = false;
|
||||||
|
|
||||||
|
int PortableRootDir = theConf->GetInt("Options/PortableRootDir", -1);
|
||||||
|
if (PortableRootDir != -1 && theConf->IsPortable())
|
||||||
|
ui.chkAutoRoot->setChecked(PortableRootDir == 0 ? Qt::Unchecked : Qt::Checked);
|
||||||
|
else
|
||||||
|
ui.chkAutoRoot->setVisible(false);
|
||||||
|
connect(ui.chkAutoRoot, SIGNAL(stateChanged(int)), this, SLOT(OnChange()));
|
||||||
|
|
||||||
connect(ui.btnAddCompat, SIGNAL(pressed()), this, SLOT(OnAddCompat()));
|
connect(ui.btnAddCompat, SIGNAL(pressed()), this, SLOT(OnAddCompat()));
|
||||||
connect(ui.btnDelCompat, SIGNAL(pressed()), this, SLOT(OnDelCompat()));
|
connect(ui.btnDelCompat, SIGNAL(pressed()), this, SLOT(OnDelCompat()));
|
||||||
|
|
||||||
|
@ -190,17 +197,20 @@ void CSettingsWindow::apply()
|
||||||
if (theAPI->IsConnected())
|
if (theAPI->IsConnected())
|
||||||
{
|
{
|
||||||
if (ui.fileRoot->text().isEmpty())
|
if (ui.fileRoot->text().isEmpty())
|
||||||
ui.fileRoot->setText("\\??\\%SystemDrive%\\Sandbox\\%USER%\\%SANDBOX%");
|
theAPI->GetGlobalSettings()->DelValue("FileRootPath"); //ui.fileRoot->setText("\\??\\%SystemDrive%\\Sandbox\\%USER%\\%SANDBOX%");
|
||||||
theAPI->GetGlobalSettings()->SetText("FileRootPath", ui.fileRoot->text());
|
else
|
||||||
|
theAPI->GetGlobalSettings()->SetText("FileRootPath", ui.fileRoot->text());
|
||||||
theAPI->GetGlobalSettings()->SetBool("SeparateUserFolders", ui.chkSeparateUserFolders->isChecked());
|
theAPI->GetGlobalSettings()->SetBool("SeparateUserFolders", ui.chkSeparateUserFolders->isChecked());
|
||||||
|
|
||||||
if (ui.regRoot->text().isEmpty())
|
if (ui.regRoot->text().isEmpty())
|
||||||
ui.regRoot->setText("\\REGISTRY\\USER\\Sandbox_%USER%_%SANDBOX%");
|
theAPI->GetGlobalSettings()->DelValue("KeyRootPath"); //ui.regRoot->setText("\\REGISTRY\\USER\\Sandbox_%USER%_%SANDBOX%");
|
||||||
theAPI->GetGlobalSettings()->SetText("KeyRootPath", ui.regRoot->text());
|
else
|
||||||
|
theAPI->GetGlobalSettings()->SetText("KeyRootPath", ui.regRoot->text());
|
||||||
|
|
||||||
if (ui.ipcRoot->text().isEmpty())
|
if (ui.ipcRoot->text().isEmpty())
|
||||||
ui.ipcRoot->setText("\\Sandbox\\%USER%\\%SANDBOX%\\Session_%SESSION%");
|
theAPI->GetGlobalSettings()->DelValue("IpcRootPath"); //ui.ipcRoot->setText("\\Sandbox\\%USER%\\%SANDBOX%\\Session_%SESSION%");
|
||||||
theAPI->GetGlobalSettings()->SetText("IpcRootPath", ui.ipcRoot->text());
|
else
|
||||||
|
theAPI->GetGlobalSettings()->SetText("IpcRootPath", ui.ipcRoot->text());
|
||||||
|
|
||||||
|
|
||||||
theAPI->GetGlobalSettings()->SetBool("EditAdminOnly", ui.chkAdminOnly->isChecked());
|
theAPI->GetGlobalSettings()->SetBool("EditAdminOnly", ui.chkAdminOnly->isChecked());
|
||||||
|
@ -262,6 +272,9 @@ void CSettingsWindow::apply()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ui.chkAutoRoot->isVisible())
|
||||||
|
theConf->SetValue("Options/PortableRootDir", ui.chkAutoRoot->checkState() != Qt::Checked ? 1 : 0);
|
||||||
|
|
||||||
theConf->SetValue("Options/AutoRunSoftCompat", !ui.chkNoCompat->isChecked());
|
theConf->SetValue("Options/AutoRunSoftCompat", !ui.chkNoCompat->isChecked());
|
||||||
|
|
||||||
emit OptionsChanged();
|
emit OptionsChanged();
|
||||||
|
@ -287,6 +300,9 @@ void CSettingsWindow::OnChange()
|
||||||
QStandardItem *item = model->item(0);
|
QStandardItem *item = model->item(0);
|
||||||
item->setFlags((!ui.chkShowTray->isChecked()) ? item->flags() & ~Qt::ItemIsEnabled : item->flags() | Qt::ItemIsEnabled);
|
item->setFlags((!ui.chkShowTray->isChecked()) ? item->flags() & ~Qt::ItemIsEnabled : item->flags() | Qt::ItemIsEnabled);
|
||||||
|
|
||||||
|
if (ui.chkAutoRoot->isVisible() && theGUI->IsFullyPortable())
|
||||||
|
ui.fileRoot->setEnabled(ui.chkAutoRoot->checkState() != Qt::Checked);
|
||||||
|
|
||||||
ui.btnSetPassword->setEnabled(ui.chkPassRequired->isChecked());
|
ui.btnSetPassword->setEnabled(ui.chkPassRequired->isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -187,10 +187,34 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>COM objects must be specified by their GUID, like: {00000000-0000-0000-0000-000000000000}</source>
|
<source>COM objects must be specified by their GUID, like: {00000000-0000-0000-0000-000000000000}</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">COM-объекты должны быть указаны по их GUID, например: {00000000-0000-0000-0000-000000000000}</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>RT interfaces must be specified by their name.</source>
|
<source>RT interfaces must be specified by their name.</source>
|
||||||
|
<translation type="unfinished">Интерфейсы RT должны быть указаны по их имени.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Browse for Program</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Please enter a program path</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Please enter a service identifier</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Service</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Program</source>
|
||||||
|
<translation type="unfinished">Программа</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Please enter an auto exec command</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -295,7 +319,7 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Recover to:</source>
|
<source>Recover to:</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Восстановить в:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse</source>
|
<source>Browse</source>
|
||||||
|
@ -303,15 +327,15 @@
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Clear folder list</source>
|
<source>Clear folder list</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Очистить список папок</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Recover && Explore</source>
|
<source>Recover && Explore</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Восстановить и исследовать</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Recover && Open/Run</source>
|
<source>Recover && Open/Run</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Восстановить и открыть/запустить</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Select Directory</source>
|
<source>Select Directory</source>
|
||||||
|
@ -370,6 +394,12 @@ Full path: %3</source>
|
||||||
<source>Do you want to allow the print spooler to write outside the sandbox for %1 (%2)?</source>
|
<source>Do you want to allow the print spooler to write outside the sandbox for %1 (%2)?</source>
|
||||||
<translation type="unfinished">Вы хотите, чтобы диспетчер очереди печати мог писать вне песочницы для %1 (%2)?</translation>
|
<translation type="unfinished">Вы хотите, чтобы диспетчер очереди печати мог писать вне песочницы для %1 (%2)?</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>%1 is eligible for quick recovery from %2.
|
||||||
|
The file was written by: %3</source>
|
||||||
|
<translation type="obsolete">%1 имеет право на быстрое восстановление после %2.
|
||||||
|
Файл записан: %3</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Do you want to allow %4 (%5) to copy a %1 large file into sandbox: %2?
|
<source>Do you want to allow %4 (%5) to copy a %1 large file into sandbox: %2?
|
||||||
File name: %3</source>
|
File name: %3</source>
|
||||||
|
@ -436,6 +466,10 @@ Full path: %4</source>
|
||||||
<source>Process</source>
|
<source>Process</source>
|
||||||
<translation type="unfinished">Процесс</translation>
|
<translation type="unfinished">Процесс</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Unknown</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CSandBoxPlus</name>
|
<name>CSandBoxPlus</name>
|
||||||
|
@ -556,7 +590,7 @@ Full path: %4</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>No new updates found, your Sandboxie-Plus is up to date.</source>
|
<source>No new updates found, your Sandboxie-Plus is up to date.</source>
|
||||||
<translation type="unfinished">Обновлений не обнаружено, у вас установлена последняя версия Sandboxie-Plus .</translation>
|
<translation type="obsolete">Обновлений не обнаружено, у вас установлена последняя версия Sandboxie-Plus .</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>%1 (%2): </source>
|
<source>%1 (%2): </source>
|
||||||
|
@ -632,7 +666,7 @@ Full path: %4</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sbie Messages</source>
|
<source>Sbie Messages</source>
|
||||||
<translation type="unfinished">Sbie cообщения</translation>
|
<translation type="unfinished">Cообщения sbie</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to recover some files:
|
<source>Failed to recover some files:
|
||||||
|
@ -642,7 +676,7 @@ Full path: %4</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><p>Sandboxie-Plus is an open source continuation of the well known Sandboxie.</p><p></p><p>Visit <a href="https://sandboxie-plus.com">sandboxie-plus.com</a> for more information.</p><p></p><p></p><p></p><p>Icons from <a href="https://icons8.com">icons8.com</a></p><p></p></source>
|
<source><p>Sandboxie-Plus is an open source continuation of the well known Sandboxie.</p><p></p><p>Visit <a href="https://sandboxie-plus.com">sandboxie-plus.com</a> for more information.</p><p></p><p></p><p></p><p>Icons from <a href="https://icons8.com">icons8.com</a></p><p></p></source>
|
||||||
<translation type="unfinished"><p>Sandboxie-Plus - это продолжение хорошо известной Sandboxie с открытым исходным кодом.</p><p></p><p>Посетите <a href="https://sandboxie-plus.com">sandboxie-plus.com</a> для дополнительной информации.</p><p></p><p></p><p></p><p>Иконки из <a href="https://icons8.com">icons8.com</a></p><p></p></translation>
|
<translation type="obsolete"><p>Sandboxie-Plus - это продолжение хорошо известной Sandboxie с открытым исходным кодом.</p><p></p><p>Посетите <a href="https://sandboxie-plus.com">sandboxie-plus.com</a> для дополнительной информации.</p><p></p><p></p><p></p><p>Иконки из <a href="https://icons8.com">icons8.com</a></p><p></p></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The sandbox name can not be longer than 32 charakters.</source>
|
<source>The sandbox name can not be longer than 32 charakters.</source>
|
||||||
|
@ -674,7 +708,7 @@ Full path: %4</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sbie Directory: %1</source>
|
<source>Sbie Directory: %1</source>
|
||||||
<translation type="unfinished">Sbie каталог: %1</translation>
|
<translation type="unfinished">Каталог sbie: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><p>Do you want to download the latest version?</p></source>
|
<source><p>Do you want to download the latest version?</p></source>
|
||||||
|
@ -743,7 +777,7 @@ Full path: %4</source>
|
||||||
<message>
|
<message>
|
||||||
<source>To use API logging you must first set up the LogApiDll from https://github.com/sandboxie-plus/LogApiDll with one or more sand boxes.
|
<source>To use API logging you must first set up the LogApiDll from https://github.com/sandboxie-plus/LogApiDll with one or more sand boxes.
|
||||||
Please download the latest release and set it up with the sandboxie.ini as instructed in the README.md of the project.</source>
|
Please download the latest release and set it up with the sandboxie.ini as instructed in the README.md of the project.</source>
|
||||||
<translation type="unfinished">Для использования API логирования вы должны сперва настроить LogApiDll из https://github.com/sandboxie-plus/LogApiDll с одной или несколькими песочницами.
|
<translation type="obsolete">Для использования API логирования вы должны сперва настроить LogApiDll из https://github.com/sandboxie-plus/LogApiDll с одной или несколькими песочницами.
|
||||||
Загрузите последний выпуск и настройте его с помощью sandboxie.ini, как указано в README.md проекта.</translation>
|
Загрузите последний выпуск и настройте его с помощью sandboxie.ini, как указано в README.md проекта.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
|
@ -760,7 +794,7 @@ Please download the latest release and set it up with the sandboxie.ini as instr
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to stop all sandboxie components</source>
|
<source>Failed to stop all sandboxie components</source>
|
||||||
<translation type="unfinished">Не удалось остановить все компоненты песочницы</translation>
|
<translation type="obsolete">Не удалось остановить все компоненты песочницы</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>&Sandbox</source>
|
<source>&Sandbox</source>
|
||||||
|
@ -768,7 +802,7 @@ Please download the latest release and set it up with the sandboxie.ini as instr
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to start required sandboxie components</source>
|
<source>Failed to start required sandboxie components</source>
|
||||||
<translation type="unfinished">Не удалось запустить необходимые компоненты песочницы</translation>
|
<translation type="obsolete">Не удалось запустить необходимые компоненты песочницы</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><h3>About Sandboxie-Plus</h3><p>Version %1</p><p>Copyright (c) 2020-2021 by DavidXanatos</p></source>
|
<source><h3>About Sandboxie-Plus</h3><p>Version %1</p><p>Copyright (c) 2020-2021 by DavidXanatos</p></source>
|
||||||
|
@ -932,70 +966,115 @@ Please download the latest release and set it up with the sandboxie.ini as instr
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reset all hidden messages</source>
|
<source>Reset all hidden messages</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Сбросить все скрытые сообщения</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source> - NOT connected</source>
|
<source> - NOT connected</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"> - НЕ подключен</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Do you also want to reset hidden message boxes (yes), or only all log messages (no)?</source>
|
<source>Do you also want to reset hidden message boxes (yes), or only all log messages (no)?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Вы также хотите сбросить скрытые окна сообщений (да) или только все сообщения журнала (нет)?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The changes will be applied automatically whenever the file gets saved.</source>
|
<source>The changes will be applied automatically whenever the file gets saved.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Изменения будут применяться автоматически при сохранении файла.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Administrator rights are required for this operation.</source>
|
<source>Administrator rights are required for this operation.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Для этой операции требуются права администратора.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to execute: %1</source>
|
<source>Failed to execute: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Не удалось выполнить: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to connect to the driver</source>
|
<source>Failed to connect to the driver</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Не удалось подключиться к драйверу</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to communicate with Sandboxie Service: %1</source>
|
<source>Failed to communicate with Sandboxie Service: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Не удалось связаться со службой Sandboxie: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>An incompatible Sandboxie %1 was found. Compatible versions: %2</source>
|
<source>An incompatible Sandboxie %1 was found. Compatible versions: %2</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Обнаружена несовместимая песочница %1. Совместимые версии: %2</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Can't find Sandboxie installation path.</source>
|
<source>Can't find Sandboxie installation path.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Не удается найти путь установки Sandboxie.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>The sandbox name can not be longer than 32 characters.</source>
|
<source>The sandbox name can not be longer than 32 characters.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Имя песочницы не может быть длиннее 32 символов.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This Snapshot operation can not be performed while processes are still running in the box.</source>
|
<source>This Snapshot operation can not be performed while processes are still running in the box.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Операция снимка не может быть выполнена, пока в песочнице еще выполняются процессы.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Failed to copy RegHive</source>
|
<source>Failed to copy RegHive</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Не удалось скопировать RegHive</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Can't remove a snapshot that is shared by multiple later snapshots</source>
|
<source>Can't remove a snapshot that is shared by multiple later snapshots</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Невозможно удалить снимок, который используется несколькими более поздними снимками</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Unknown Error Status: %1</source>
|
<source>Unknown Error Status: %1</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Неизвестный статус ошибки: %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Do you want to open %1 in a sandboxed (yes) or unsandboxed (no) Web browser?</source>
|
<source>Do you want to open %1 in a sandboxed (yes) or unsandboxed (no) Web browser?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Вы хотите открыть %1 в изолированном (да) или не изолированном (нет) браузере?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remember choice for later.</source>
|
<source>Remember choice for later.</source>
|
||||||
|
<translation type="unfinished">Запомнить выбор.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Copy Cell</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Copy Row</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Copy Panel</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Failed to stop all Sandboxie components</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Failed to start required Sandboxie components</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sandboxie-Plus was started in portable mode, do you want to put the SandBox folder into its parent directory?</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>The file %1 already exists, do you want to overwrite it?</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Do this for all files!</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>To use API logging you must first set up the LogApiDll from https://github.com/sandboxie-plus/LogApiDll with one or more sandboxes.
|
||||||
|
Please download the latest release and set it up with the Sandboxie.ini as instructed in the README.md of the project.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>No new updates found, your Sandboxie-Plus is up-to-date.</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source><p>Sandboxie-Plus is an open source continuation of Sandboxie.</p><p></p><p>Visit <a href="https://sandboxie-plus.com">sandboxie-plus.com</a> for more information.</p><p></p><p></p><p></p><p>Icons from <a href="https://icons8.com">icons8.com</a></p><p></p></source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -1007,7 +1086,7 @@ Please download the latest release and set it up with the sandboxie.ini as instr
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Path</source>
|
<source>Path</source>
|
||||||
<translation type="unfinished">Путь</translation>
|
<translation type="obsolete">Путь</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Box Groupe</source>
|
<source>Box Groupe</source>
|
||||||
|
@ -1025,6 +1104,10 @@ Please download the latest release and set it up with the sandboxie.ini as instr
|
||||||
<source>Process ID</source>
|
<source>Process ID</source>
|
||||||
<translation type="unfinished">ID процесса</translation>
|
<translation type="unfinished">ID процесса</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Path / Command Line</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>CSbieProcess</name>
|
<name>CSbieProcess</name>
|
||||||
|
@ -1234,19 +1317,19 @@ Please download the latest release and set it up with the sandboxie.ini as instr
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Создать ярлык</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Allow internet access</source>
|
<source>Allow internet access</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Разрешить доступ в Интернет</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Force into this sandbox</source>
|
<source>Force into this sandbox</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Принудительно в этой песочнице</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>This box does not have Internet restrictions in place, do you want to enable them?</source>
|
<source>This box does not have Internet restrictions in place, do you want to enable them?</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">В этой песочнице нет ограничений на доступ к Интернет, вы хотите их включить?</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
|
@ -1492,7 +1575,7 @@ If leader processes are defined, all others are treated as lingering processes.<
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Browse</source>
|
<source>Browse</source>
|
||||||
<translation type="unfinished">Обзор</translation>
|
<translation type="obsolete">Обзор</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Restrict Resource Access monitor to administrators only</source>
|
<source>Restrict Resource Access monitor to administrators only</source>
|
||||||
|
@ -1620,7 +1703,7 @@ If leader processes are defined, all others are treated as lingering processes.<
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Lift restrictions</source>
|
<source>Lift restrictions</source>
|
||||||
<translation type="unfinished">Ограничения на подъем</translation>
|
<translation type="obsolete">Ограничения на подъем</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Add Leader Program</source>
|
<source>Add Leader Program</source>
|
||||||
|
@ -1742,7 +1825,7 @@ instead of "*".</source>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Remove Process</source>
|
<source>Remove Process</source>
|
||||||
<translation type="unfinished">Удалить процесс</translation>
|
<translation type="obsolete">Удалить процесс</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>You can exclude folders and file types (or file extensions) from Immediate Recovery.</source>
|
<source>You can exclude folders and file types (or file extensions) from Immediate Recovery.</source>
|
||||||
|
@ -1790,7 +1873,7 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sandbox Isolation</source>
|
<source>Sandbox Isolation</source>
|
||||||
<translation type="unfinished">Изоляция песочницы</translation>
|
<translation type="obsolete">Изоляция песочницы</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Add Lingering Program</source>
|
<source>Add Lingering Program</source>
|
||||||
|
@ -1847,18 +1930,74 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Prevent change to network and firewall parameters</source>
|
<source>Prevent change to network and firewall parameters</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Запретить изменение параметров сети и брандмауэра</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Start the sandboxed RpcSs as a SYSTEM process (breaks some compatibility)</source>
|
<source>Start the sandboxed RpcSs as a SYSTEM process (breaks some compatibility)</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Запускать RpcSs в песочнице как СИСТЕМНЫЙ процесс (нарушает некоторую совместимость)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>COM Class Trace</source>
|
<source>COM Class Trace</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Трассировка COM класса</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><- for this one the above does not apply</source>
|
<source><- for this one the above does not apply</source>
|
||||||
|
<translation type="unfinished"><- для этого то что выше не применяется</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Block access to the printer spooler</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Allow the print spooler to print to files outside the sandbox</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Printing</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Remove spooler restriction, printers can be installed outside the sandbox</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Add program</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Auto Start</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Here you can specify programs and/or services that are to be started automatically in the sandbox when it is activated</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Add service</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Do not start sandboxed services using a system token (recommended)</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Allow access to Smart Cards</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Lift security restrictions</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Sandbox isolation</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Auto Exec</source>
|
||||||
|
<translation type="unfinished"></translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Here you can specify a list of commands that are executed every time the sandbox is initially populated.</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
@ -2063,18 +2202,22 @@ Note: Forced Programs and Force Folders settings for a sandbox do not apply to
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open urls from this ui sandboxed</source>
|
<source>Open urls from this ui sandboxed</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Открывать URL-адреса из этого пользовательского интерфейса в песочнице</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sandbox <a href="sbie://docs/filerootpath">file system root</a>: </source>
|
<source>Sandbox <a href="sbie://docs/filerootpath">file system root</a>: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Sandbox <a href="sbie://docs/filerootpath">корень файловой системы</a>: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sandbox <a href="sbie://docs/ipcrootpath">ipc root</a>: </source>
|
<source>Sandbox <a href="sbie://docs/ipcrootpath">ipc root</a>: </source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished">Sandbox <a href="sbie://docs/ipcrootpath">корень ipc</a>: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Sandbox <a href="sbie://docs/keyrootpath">registry root</a>: </source>
|
<source>Sandbox <a href="sbie://docs/keyrootpath">registry root</a>: </source>
|
||||||
|
<translation type="unfinished">Sandbox <a href="sbie://docs/keyrootpath">корень реестра</a>: </translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>Portable root folder</source>
|
||||||
<translation type="unfinished"></translation>
|
<translation type="unfinished"></translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue