From 388a307ce4be8491150f90afe810b8f8957ff533 Mon Sep 17 00:00:00 2001 From: DavidXanatos Date: Sat, 30 Jan 2021 19:10:49 +0100 Subject: [PATCH] --- .../MiscHelpers/Common/ItemChooser.cpp | 8 +- .../MiscHelpers/Common/SettingsWidgets.cpp | 2 +- SandboxiePlus/MiscHelpers/MiscHelpers.pri | 58 ++++++++ SandboxiePlus/MiscHelpers/MiscHelpers.qc.pro | 36 +++++ SandboxiePlus/QSbieAPI/QSbieAPI.pri | 31 +++++ SandboxiePlus/QSbieAPI/QSbieAPI.qc.pro | 31 +++++ SandboxiePlus/QSbieAPI/Sandboxie/SandBox.cpp | 56 +++++--- SandboxiePlus/QSbieAPI/SbieAPI.cpp | 13 +- SandboxiePlus/QSbieAPI/SbieAPI.h | 2 +- .../qtsingleapp/qtsingleapp.qc.pro | 2 +- SandboxiePlus/SandMan/Forms/OptionsWindow.ui | 127 +++++++++--------- SandboxiePlus/SandMan/Models/SbieModel.cpp | 6 +- SandboxiePlus/SandMan/Resources/SandMan.ico | Bin 410598 -> 72566 bytes .../SandMan/Resources/finder-empty.bmp | Bin 0 -> 566 bytes .../SandMan/Resources/finder-full.bmp | Bin 0 -> 566 bytes SandboxiePlus/SandMan/Resources/finder.cur | Bin 0 -> 326 bytes SandboxiePlus/SandMan/SandMan.cpp | 6 +- SandboxiePlus/SandMan/SandMan.h | 2 +- SandboxiePlus/SandMan/SandMan.pri | 58 ++++++++ SandboxiePlus/SandMan/SandMan.qc.pro | 39 ++++++ .../SandMan/{Resources => }/SandMan.rc | 2 +- SandboxiePlus/SandMan/SandMan.vcxproj | 7 +- SandboxiePlus/SandMan/SandMan.vcxproj.filters | 13 +- SandboxiePlus/SandMan/Views/SbieView.cpp | 17 ++- .../SandMan/Windows/OptionsWindow.cpp | 114 +++++++++------- SandboxiePlus/SandMan/Windows/PopUpWindow.h | 16 +-- .../SandMan/Windows/RecoveryWindow.cpp | 28 ++-- .../SandMan/Windows/SettingsWindow.cpp | 20 +-- .../SandMan/Windows/SnapshotsWindow.cpp | 6 +- SandboxiePlus/SandMan/main.cpp | 4 +- 30 files changed, 506 insertions(+), 198 deletions(-) create mode 100644 SandboxiePlus/MiscHelpers/MiscHelpers.pri create mode 100644 SandboxiePlus/MiscHelpers/MiscHelpers.qc.pro create mode 100644 SandboxiePlus/QSbieAPI/QSbieAPI.pri create mode 100644 SandboxiePlus/QSbieAPI/QSbieAPI.qc.pro create mode 100644 SandboxiePlus/SandMan/Resources/finder-empty.bmp create mode 100644 SandboxiePlus/SandMan/Resources/finder-full.bmp create mode 100644 SandboxiePlus/SandMan/Resources/finder.cur create mode 100644 SandboxiePlus/SandMan/SandMan.pri create mode 100644 SandboxiePlus/SandMan/SandMan.qc.pro rename SandboxiePlus/SandMan/{Resources => }/SandMan.rc (94%) diff --git a/SandboxiePlus/MiscHelpers/Common/ItemChooser.cpp b/SandboxiePlus/MiscHelpers/Common/ItemChooser.cpp index 4f0072e9..cecf3bdc 100644 --- a/SandboxiePlus/MiscHelpers/Common/ItemChooser.cpp +++ b/SandboxiePlus/MiscHelpers/Common/ItemChooser.cpp @@ -27,11 +27,11 @@ CItemChooser::CItemChooser(const QString& Prompt, QWidget *parent) m_pMidleLayout->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); m_pBtnAdd = new QPushButton(tr("Add >"), this); - connect(m_pBtnAdd, SIGNAL(pressed()), this, SLOT(OnAdd())); + connect(m_pBtnAdd, SIGNAL(clicked(bool)), this, SLOT(OnAdd())); m_pMidleLayout->addWidget(m_pBtnAdd); m_pBtnRemove = new QPushButton(tr("< Remove"), this); - connect(m_pBtnRemove, SIGNAL(pressed()), this, SLOT(OnRemove())); + connect(m_pBtnRemove, SIGNAL(clicked(bool)), this, SLOT(OnRemove())); m_pMidleLayout->addWidget(m_pBtnRemove); m_pMidleLayout->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); @@ -45,11 +45,11 @@ CItemChooser::CItemChooser(const QString& Prompt, QWidget *parent) m_pCenterLayout->addLayout(m_pRightLayout); m_pBtnUp = new QPushButton(tr("Move Up"), this); - connect(m_pBtnUp, SIGNAL(pressed()), this, SLOT(OnUp())); + connect(m_pBtnUp, SIGNAL(clicked(bool)), this, SLOT(OnUp())); m_pRightLayout->addWidget(m_pBtnUp); m_pBtnDown = new QPushButton(tr("Move Down"), this); - connect(m_pBtnDown, SIGNAL(pressed()), this, SLOT(OnDown())); + connect(m_pBtnDown, SIGNAL(clicked(bool)), this, SLOT(OnDown())); m_pRightLayout->addWidget(m_pBtnDown); m_pRightLayout->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); diff --git a/SandboxiePlus/MiscHelpers/Common/SettingsWidgets.cpp b/SandboxiePlus/MiscHelpers/Common/SettingsWidgets.cpp index 79a5a43d..d1e21e79 100644 --- a/SandboxiePlus/MiscHelpers/Common/SettingsWidgets.cpp +++ b/SandboxiePlus/MiscHelpers/Common/SettingsWidgets.cpp @@ -17,7 +17,7 @@ CPathEdit::CPathEdit(bool bDirs, QWidget *parent) pLayout->addWidget(m_pEdit); QPushButton* pButton = new QPushButton("..."); pButton->setMaximumWidth(25); - connect(pButton, SIGNAL(pressed()), this, SLOT(Browse())); + connect(pButton, SIGNAL(clicked(bool)), this, SLOT(Browse())); pLayout->addWidget(pButton); } diff --git a/SandboxiePlus/MiscHelpers/MiscHelpers.pri b/SandboxiePlus/MiscHelpers/MiscHelpers.pri new file mode 100644 index 00000000..dd0205da --- /dev/null +++ b/SandboxiePlus/MiscHelpers/MiscHelpers.pri @@ -0,0 +1,58 @@ +# ---------------------------------------------------- +# This file is generated by the Qt Visual Studio Tools. +# ------------------------------------------------------ + +HEADERS += ./MiscHelpers.h \ + ./mischelpers_global.h \ + ./stdafx.h \ + ./Common/Common.h \ + ./Common/DebugHelpers.h \ + ./Common/ExitDialog.h \ + ./Common/FlexError.h \ + ./Common/FlowLayout.h \ + ./Common/HistoryGraph.h \ + ./Common/IconExtreactor.h \ + ./Common/qRC4.h \ + ./Common/Xml.h \ + ./Common/CheckableMessageBox.h \ + ./Common/ComboInputDialog.h \ + ./Common/Finder.h \ + ./Common/ItemChooser.h \ + ./Common/KeyValueInputDialog.h \ + ./Common/ListItemModel.h \ + ./Common/MultiLineInputDialog.h \ + ./Common/PanelView.h \ + ./Common/ProgressDialog.h \ + ./Common/Settings.h \ + ./Common/SettingsWidgets.h \ + ./Common/SmartGridWidget.h \ + ./Common/SortFilterProxyModel.h \ + ./Common/SplitTreeView.h \ + ./Common/TabPanel.h \ + ./Common/TreeItemModel.h \ + ./Common/TreeViewEx.h \ + ./Common/TreeWidgetEx.h \ + ./Common/NetworkAccessManager.h +SOURCES += ./MiscHelpers.cpp \ + ./stdafx.cpp \ + ./Common/CheckableMessageBox.cpp \ + ./Common/ComboInputDialog.cpp \ + ./Common/Common.cpp \ + ./Common/DebugHelpers.cpp \ + ./Common/Finder.cpp \ + ./Common/FlowLayout.cpp \ + ./Common/IconExtreactor.cpp \ + ./Common/ItemChooser.cpp \ + ./Common/KeyValueInputDialog.cpp \ + ./Common/ListItemModel.cpp \ + ./Common/MultiLineInputDialog.cpp \ + ./Common/PanelView.cpp \ + ./Common/qRC4.cpp \ + ./Common/NetworkAccessManager.cpp \ + ./Common/Settings.cpp \ + ./Common/SettingsWidgets.cpp \ + ./Common/SmartGridWidget.cpp \ + ./Common/SplitTreeView.cpp \ + ./Common/TabPanel.cpp \ + ./Common/TreeItemModel.cpp \ + ./Common/Xml.cpp diff --git a/SandboxiePlus/MiscHelpers/MiscHelpers.qc.pro b/SandboxiePlus/MiscHelpers/MiscHelpers.qc.pro new file mode 100644 index 00000000..5df9b0b9 --- /dev/null +++ b/SandboxiePlus/MiscHelpers/MiscHelpers.qc.pro @@ -0,0 +1,36 @@ + +TEMPLATE = lib +TARGET = MiscHelpers +QT += core network widgets winextras +#CONFIG += debug +# DEFINES += QT_LARGEFILE_SUPPORT QTSERVICE_LIB QT_WIDGETS_LIB QT_QTSINGLEAPPLICATION_EXPORT +DEFINES += MISCHELPERS_LIB +#LIBS += -L"." +PRECOMPILED_HEADER = stdafx.h +#DEPENDPATH += . +#MOC_DIR += ./GeneratedFiles/$(ConfigurationName) +#OBJECTS_DIR += debug +#UI_DIR += ./GeneratedFiles +#RCC_DIR += ./GeneratedFiles +!win32:LIBS += -lUser32 -lShell32 + +!mac:unix:QMAKE_LFLAGS += -Wl,-rpath,'\$\$ORIGIN' +mac:QMAKE_CXXFLAGS += -std=c++11 + +!win32:QMAKE_LFLAGS +=-rdynamic + +CONFIG(release, debug|release):{ +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO +} +CONFIG(debug, debug|release):DESTDIR = ../Debug +CONFIG(release, debug|release):DESTDIR = ../Release +INCLUDEPATH += . +DEPENDPATH += . +#MOC_DIR += ./GeneratedFiles +#OBJECTS_DIR += ./ObjectFiles +#UI_DIR += ./GeneratedFiles +#RCC_DIR += ./GeneratedFiles + + +include(MiscHelpers.pri) diff --git a/SandboxiePlus/QSbieAPI/QSbieAPI.pri b/SandboxiePlus/QSbieAPI/QSbieAPI.pri new file mode 100644 index 00000000..69058e52 --- /dev/null +++ b/SandboxiePlus/QSbieAPI/QSbieAPI.pri @@ -0,0 +1,31 @@ +# ---------------------------------------------------- +# This file is generated by the Qt Visual Studio Tools. +# ------------------------------------------------------ + +# This is a reminder that you are using a generated .pro file. +# Remove it when you are finished editing this file. +message("You are running qmake on a generated .pro file. This may not work!") + + +HEADERS += ./qsbieapi_global.h \ + ./stdafx.h \ + ../../Sandboxie/common/win32_ntddk.h \ + ./SbieDefs.h \ + ./SbieUtils.h \ + ./SbieAPI.h \ + ./SbieStatus.h \ + ./Sandboxie/BoxedProcess.h \ + ./Sandboxie/SandBox.h \ + ./Sandboxie/SbieIni.h \ + ./Sandboxie/BoxBorder.h \ + ./Sandboxie/SbieTemplates.h \ + ./Helpers/NtIO.h +SOURCES += ./stdafx.cpp \ + ./SbieAPI.cpp \ + ./SbieUtils.cpp \ + ./Sandboxie/BoxBorder.cpp \ + ./Sandboxie/BoxedProcess.cpp \ + ./Sandboxie/SandBox.cpp \ + ./Sandboxie/SbieIni.cpp \ + ./Sandboxie/SbieTemplates.cpp \ + ./Helpers/NtIO.cpp diff --git a/SandboxiePlus/QSbieAPI/QSbieAPI.qc.pro b/SandboxiePlus/QSbieAPI/QSbieAPI.qc.pro new file mode 100644 index 00000000..6ec8b84d --- /dev/null +++ b/SandboxiePlus/QSbieAPI/QSbieAPI.qc.pro @@ -0,0 +1,31 @@ + +TEMPLATE = lib +TARGET = QSbieAPI +QT += core concurrent +#CONFIG += debug +# DEFINES += QT_LARGEFILE_SUPPORT QTSERVICE_LIB QT_WIDGETS_LIB QT_QTSINGLEAPPLICATION_EXPORT +DEFINES += QSBIEAPI_LIB +#LIBS += -L"." +PRECOMPILED_HEADER = stdafx.h +#DEPENDPATH += . +#MOC_DIR += ./GeneratedFiles/$(ConfigurationName) +#OBJECTS_DIR += debug +#UI_DIR += ./GeneratedFiles +#RCC_DIR += ./GeneratedFiles +LIBS += -lNtdll -lAdvapi32 -lOle32 -lUser32 -lShell32 -lGdi32 + +CONFIG(release, debug|release):{ +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO +} +CONFIG(debug, debug|release):DESTDIR = ../Debug +CONFIG(release, debug|release):DESTDIR = ../Release +INCLUDEPATH += . +DEPENDPATH += . +#MOC_DIR += ./GeneratedFiles +#OBJECTS_DIR += ./ObjectFiles +#UI_DIR += ./GeneratedFiles +#RCC_DIR += ./GeneratedFiles + + +include(QSbieAPI.pri) diff --git a/SandboxiePlus/QSbieAPI/Sandboxie/SandBox.cpp b/SandboxiePlus/QSbieAPI/Sandboxie/SandBox.cpp index 597ce4ae..681891a7 100644 --- a/SandboxiePlus/QSbieAPI/Sandboxie/SandBox.cpp +++ b/SandboxiePlus/QSbieAPI/Sandboxie/SandBox.cpp @@ -43,30 +43,48 @@ CSandBox::CSandBox(const QString& BoxName, class CSbieAPI* pAPI) : CSbieIni(BoxN // when loading a sandbox that is not initialized, initialize it int cfglvl = GetNum("ConfigLevel"); - if (cfglvl >= 7) + if (cfglvl >= 8) return; - SetNum("ConfigLevel", 7); + SetNum("ConfigLevel", 8); - SetBool("AutoRecover", false); - SetBool("BlockNetworkFiles", true); + if (cfglvl == 0) + { + SetBool("AutoRecover", false); + SetBool("BlockNetworkFiles", true); - // templates L6 - InsertText("Template", "AutoRecoverIgnore"); - InsertText("Template", "Firefox_Phishing_DirectAccess"); - InsertText("Template", "Chrome_Phishing_DirectAccess"); - InsertText("Template", "LingerPrograms"); - // templates L7 - InsertText("Template", "BlockPorts"); - InsertText("Template", "qWave"); + // recovery + InsertText("RecoverFolder", "%Desktop%"); + //InsertText("RecoverFolder", "%Favorites%"); // obsolete + InsertText("RecoverFolder", "%Personal%"); + InsertText("RecoverFolder", "%{374DE290-123F-4565-9164-39C4925E467B}%"); // %USERPROFILE%\Downloads - // recovery - InsertText("RecoverFolder", "%Desktop%"); - //InsertText("RecoverFolder", "%Favorites%"); // obsolete - InsertText("RecoverFolder", "%Personal%"); - InsertText("RecoverFolder", "%{374DE290-123F-4565-9164-39C4925E467B}%"); // %USERPROFILE%\Downloads + SetText("BorderColor", "#00FFFF,ttl"); // "#00FFFF,off" + } + + if (cfglvl < 6) + { + // templates L6 + InsertText("Template", "AutoRecoverIgnore"); + InsertText("Template", "Firefox_Phishing_DirectAccess"); + InsertText("Template", "Chrome_Phishing_DirectAccess"); + InsertText("Template", "LingerPrograms"); + } + + if (cfglvl < 7) + { + // templates L7 + InsertText("Template", "BlockPorts"); + //InsertText("Template", "WindowsFontCache"); // since 5.46.3 open by driver + InsertText("Template", "qWave"); + } + + if (cfglvl < 8) + { + // templates L8 + InsertText("Template", "FileCppy"); + InsertText("Template", "SkipHook"); + } - SetText("BorderColor", "#00FFFF,ttl"); // "#00FFFF,off" - } CSandBox::~CSandBox() diff --git a/SandboxiePlus/QSbieAPI/SbieAPI.cpp b/SandboxiePlus/QSbieAPI/SbieAPI.cpp index b2f994fe..30424e4d 100644 --- a/SandboxiePlus/QSbieAPI/SbieAPI.cpp +++ b/SandboxiePlus/QSbieAPI/SbieAPI.cpp @@ -177,7 +177,7 @@ CBoxedProcess* CSbieAPI::NewBoxedProcess(quint32 ProcessId, class CSandBox* pBox return new CBoxedProcess(ProcessId, pBox); } -QString CSbieAPI__GetRegValue(HANDLE hKey, WCHAR* pName) +QString CSbieAPI__GetRegValue(HANDLE hKey, const WCHAR* pName) { char buf[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + MAX_PATH]; KEY_VALUE_PARTIAL_INFORMATION *value = (KEY_VALUE_PARTIAL_INFORMATION *)buf; @@ -918,7 +918,7 @@ QString CSbieAPI::GetStartPath() const return m_SbiePath + "//" + QString::fromWCharArray(SBIESTART_EXE); } -SB_STATUS CSbieAPI::ReloadBoxes() +SB_STATUS CSbieAPI::ReloadBoxes(bool bFullUpdate) { QMap OldSandBoxes = m_SandBoxes; @@ -927,6 +927,7 @@ SB_STATUS CSbieAPI::ReloadBoxes() QString BoxName = SbieIniGet(QString(), QString(), (i | CONF_GET_NO_EXPAND)); if (BoxName.isNull()) break; + bool bIsEnabled; if (!IsBox(BoxName, bIsEnabled)) continue; @@ -936,9 +937,11 @@ SB_STATUS CSbieAPI::ReloadBoxes() { pBox = CSandBoxPtr(NewSandBox(BoxName, this)); m_SandBoxes.insert(BoxName.toLower(), pBox); + UpdateBoxPaths(pBox); } - - UpdateBoxPaths(pBox); + else if(bFullUpdate) + UpdateBoxPaths(pBox); + pBox->m_IsEnabled = bIsEnabled; pBox->UpdateDetails(); @@ -1599,7 +1602,7 @@ SB_STATUS CSbieAPI::ReloadConfig(quint32 SessionId) //emit LogMessage("Sandboxie config has been reloaded.", false); emit LogSbieMessage(0, QStringList() << "Sandboxie config has been reloaded" << "" << "", 4); - ReloadBoxes(); + ReloadBoxes(true); return SB_OK; } diff --git a/SandboxiePlus/QSbieAPI/SbieAPI.h b/SandboxiePlus/QSbieAPI/SbieAPI.h index acbf70b9..faba557e 100644 --- a/SandboxiePlus/QSbieAPI/SbieAPI.h +++ b/SandboxiePlus/QSbieAPI/SbieAPI.h @@ -101,7 +101,7 @@ public: virtual void UpdateDriveLetters(); virtual QString Nt2DosPath(QString NtPath) const; - virtual SB_STATUS ReloadBoxes(); + virtual SB_STATUS ReloadBoxes(bool bFullUpdate = false); static SB_STATUS ValidateName(const QString& BoxName); virtual SB_STATUS CreateBox(const QString& BoxName); diff --git a/SandboxiePlus/QtSingleApp/qtsingleapp/qtsingleapp/qtsingleapp.qc.pro b/SandboxiePlus/QtSingleApp/qtsingleapp/qtsingleapp/qtsingleapp.qc.pro index d69432e0..276c5ef9 100644 --- a/SandboxiePlus/QtSingleApp/qtsingleapp/qtsingleapp/qtsingleapp.qc.pro +++ b/SandboxiePlus/QtSingleApp/qtsingleapp/qtsingleapp/qtsingleapp.qc.pro @@ -2,9 +2,9 @@ # This file is generated by the Qt Visual Studio Add-in. # ------------------------------------------------------ -QT += core widgets network TEMPLATE = lib TARGET = qtsingleapp +QT += core network widgets DEFINES += QT_LARGEFILE_SUPPORT QTSERVICE_LIB QT_WIDGETS_LIB QT_QTSINGLEAPPLICATION_EXPORT !mac:unix:QMAKE_LFLAGS += -Wl,-rpath,'\$\$ORIGIN' mac:QMAKE_CXXFLAGS += -std=c++11 diff --git a/SandboxiePlus/SandMan/Forms/OptionsWindow.ui b/SandboxiePlus/SandMan/Forms/OptionsWindow.ui index 508e3572..a701c6de 100644 --- a/SandboxiePlus/SandMan/Forms/OptionsWindow.ui +++ b/SandboxiePlus/SandMan/Forms/OptionsWindow.ui @@ -45,7 +45,7 @@ QTabWidget::West - 0 + 8 @@ -1323,26 +1323,18 @@ For files access you can use 'Direct All' instead to make it apply to all progra - - - - Do not start sandboxed services using a system token (recommended) + + + + Qt::Vertical - - - - - - Allow access to Smart Cards + + + 20 + 40 + - - - - - - Protect sandboxed SYSTEM processes from unprivileged unsandboxed processes - - + @@ -1360,6 +1352,22 @@ For files access you can use 'Direct All' instead to make it apply to all progra + + + + + 75 + true + + + + Protect the sandbox integrity itself + + + Sandbox isolation + + + @@ -1367,10 +1375,10 @@ For files access you can use 'Direct All' instead to make it apply to all progra - - + + - Open Windows Credentials Store + Do not start sandboxed services using a system token (recommended) @@ -1381,7 +1389,7 @@ For files access you can use 'Direct All' instead to make it apply to all progra - + Qt::Horizontal @@ -1394,6 +1402,34 @@ For files access you can use 'Direct All' instead to make it apply to all progra + + + + Allow access to Smart Cards + + + + + + + Add sandboxed processes to job objects (recommended) + + + + + + + Force usage of custom dummy Manifest files (legacy behaviour) + + + + + + + Protect sandboxed SYSTEM processes from unprivileged unsandboxed processes + + + @@ -1407,46 +1443,17 @@ For files access you can use 'Direct All' instead to make it apply to all progra - - + + - Force usage of custom dummy Manifest files (legacy behaviour) + Open Windows Credentials Store - - - - Qt::Vertical - - - - 20 - 40 - - - - - - + + - Add sandboxed processes to job objects (recommended) - - - - - - - - 75 - true - - - - Protect the sandbox integrity itself - - - Sandbox isolation + Allow access to Bluetooth @@ -1770,8 +1777,8 @@ instead of "*". 0 0 - 530 - 312 + 98 + 28 diff --git a/SandboxiePlus/SandMan/Models/SbieModel.cpp b/SandboxiePlus/SandMan/Models/SbieModel.cpp index 32f1a70d..53b7d2a5 100644 --- a/SandboxiePlus/SandMan/Models/SbieModel.cpp +++ b/SandboxiePlus/SandMan/Models/SbieModel.cpp @@ -137,6 +137,9 @@ QList CSbieModel::Sync(const QMap& BoxList, cons foreach (const CSandBoxPtr& pBox, BoxList) { + if (!ShowHidden && !pBox->IsEnabled()) + continue; + QVariant ID = pBox->GetName(); QModelIndex Index; @@ -161,9 +164,6 @@ QList CSbieModel::Sync(const QMap& BoxList, cons CSandBoxPlus* pBoxEx = qobject_cast(pBox.data()); - if (!ShowHidden && !pBoxEx->IsEnabled()) - continue; - int Col = 0; bool State = false; int Changed = 0; diff --git a/SandboxiePlus/SandMan/Resources/SandMan.ico b/SandboxiePlus/SandMan/Resources/SandMan.ico index c05a26c5ed41a7720658cdce6c1a8a6279d67dd1..36bddfa0bb25f89fb7683e143aedfcb367941dd5 100644 GIT binary patch delta 144 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 BbH4xp literal 0 HcmV?d00001 diff --git a/SandboxiePlus/SandMan/SandMan.cpp b/SandboxiePlus/SandMan/SandMan.cpp index d51a250e..9a57332a 100644 --- a/SandboxiePlus/SandMan/SandMan.cpp +++ b/SandboxiePlus/SandMan/SandMan.cpp @@ -452,7 +452,7 @@ void CSandMan::CreateToolBar() m_pCleanUpButton->setPopupMode(QToolButton::MenuButtonPopup); m_pCleanUpButton->setMenu(m_pCleanUpMenu); //QObject::connect(m_pCleanUpButton, SIGNAL(triggered(QAction*)), , SLOT()); - QObject::connect(m_pCleanUpButton, SIGNAL(pressed()), this, SLOT(OnCleanUp())); + QObject::connect(m_pCleanUpButton, SIGNAL(clicked(bool)), this, SLOT(OnCleanUp())); m_pToolBar->addWidget(m_pCleanUpButton); @@ -616,8 +616,8 @@ void CSandMan::timerEvent(QTimerEvent* pEvent) { SB_STATUS Status = theAPI->ReloadBoxes(); - if (!Status.IsError() && theAPI->GetAllBoxes().count() == 0) { - OnLogMessage(tr("No sandboxes found; creating: %1").arg("DefaultBox")); + if (!Status.IsError() && !theAPI->GetAllBoxes().contains("defaultbox")) { + OnLogMessage(tr("Default sandbox not found; creating: %1").arg("DefaultBox")); theAPI->CreateBox("DefaultBox"); } diff --git a/SandboxiePlus/SandMan/SandMan.h b/SandboxiePlus/SandMan/SandMan.h index c8a3b1ba..77a266d2 100644 --- a/SandboxiePlus/SandMan/SandMan.h +++ b/SandboxiePlus/SandMan/SandMan.h @@ -14,7 +14,7 @@ #define VERSION_MJR 0 #define VERSION_MIN 6 -#define VERSION_REV 0 +#define VERSION_REV 5 #define VERSION_UPD 0 diff --git a/SandboxiePlus/SandMan/SandMan.pri b/SandboxiePlus/SandMan/SandMan.pri new file mode 100644 index 00000000..99bac872 --- /dev/null +++ b/SandboxiePlus/SandMan/SandMan.pri @@ -0,0 +1,58 @@ +# ---------------------------------------------------- +# This file is generated by the Qt Visual Studio Tools. +# ------------------------------------------------------ + + +HEADERS += ./stdafx.h \ + ./SandMan.h \ + ./ApiLog.h \ + ./SbiePlusAPI.h \ + ./Models/SbieModel.h \ + ./Models/ResMonModel.h \ + ./Models/ApiMonModel.h \ + ./Views/SbieView.h \ + ./Dialogs/MultiErrorDialog.h \ + ./Helpers/FindTool.h \ + ./Helpers/WinAdmin.h \ + ./Windows/NewBoxWindow.h \ + ./Windows/RecoveryWindow.h \ + ./Windows/PopUpWindow.h \ + ./Windows/SnapshotsWindow.h \ + ./Windows/SettingsWindow.h \ + ./Windows/OptionsWindow.h + +SOURCES += ./main.cpp \ + ./stdafx.cpp \ + ./ApiLog.cpp \ + ./SandMan.cpp \ + ./SbiePlusAPI.cpp \ + ./Models/ApiMonModel.cpp \ + ./Models/ResMonModel.cpp \ + ./Models/SbieModel.cpp \ + ./Views/SbieView.cpp \ + ./Dialogs/MultiErrorDialog.cpp \ + ./Helpers/FindTool.cpp \ + ./Helpers/WinAdmin.cpp \ + ./Helpers/WindowFromPointEx.cpp \ + ./Windows/NewBoxWindow.cpp \ + ./Windows/OptionsWindow.cpp \ + ./Windows/PopUpWindow.cpp \ + ./Windows/RecoveryWindow.cpp \ + ./Windows/SettingsWindow.cpp \ + ./Windows/SnapshotsWindow.cpp + +FORMS += ./Forms/NewBoxWindow.ui \ + ./Forms/OptionsWindow.ui \ + ./Forms/PopUpWindow.ui \ + ./Forms/RecoveryWindow.ui \ + ./Forms/SettingsWindow.ui \ + ./Forms/SnapshotsWindow.ui + +TRANSLATIONS += ./sandman_de.ts \ + ./sandman_pt.ts \ + ./sandman_ru.ts \ + ./sandman_tr.ts \ + ./sandman_zh.ts \ + ./sandman_zh-TW.ts + +RESOURCES += Resources/SandMan.qrc diff --git a/SandboxiePlus/SandMan/SandMan.qc.pro b/SandboxiePlus/SandMan/SandMan.qc.pro new file mode 100644 index 00000000..4698a573 --- /dev/null +++ b/SandboxiePlus/SandMan/SandMan.qc.pro @@ -0,0 +1,39 @@ + +TEMPLATE = app +TARGET = SandMan +PRECOMPILED_HEADER = stdafx.h + +QT += core gui network widgets winextras concurrent + +win32:{ +CONFIG(debug, debug|release):LIBS += -L../Debug/ +CONFIG(release, debug|release):LIBS += -L../Release/ +} + +LIBS += -lNtdll -lAdvapi32 -lOle32 -lUser32 -lShell32 -lGdi32 -lQSbieAPI -lMiscHelpers -lqtsingleapp + + +CONFIG(release, debug|release):{ +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO +QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO +} +CONFIG(debug, debug|release):DESTDIR = ../Debug +CONFIG(release, debug|release):DESTDIR = ../Release +INCLUDEPATH += . +DEPENDPATH += . +MOC_DIR += . +OBJECTS_DIR += debug +UI_DIR += . +RCC_DIR += . + + + +include(SandMan.pri) +win32:RC_FILE = SandMan.rc + +TRANSLATIONS += sandman_de.ts \ + sandman_pt.ts \ + sandman_ru.ts \ + sandman_tr.ts \ + sandman_zh.ts \ + sandman_zh-TW.ts diff --git a/SandboxiePlus/SandMan/Resources/SandMan.rc b/SandboxiePlus/SandMan/SandMan.rc similarity index 94% rename from SandboxiePlus/SandMan/Resources/SandMan.rc rename to SandboxiePlus/SandMan/SandMan.rc index e7569a5a..65562253 100644 --- a/SandboxiePlus/SandMan/Resources/SandMan.rc +++ b/SandboxiePlus/SandMan/SandMan.rc @@ -1,6 +1,6 @@ // Microsoft Visual C++ generated resource script. // -#include "resource.h" +#include "./resources/resource.h" ///////////////////////////////////////////////////////////////////////////// // German (Austria) resources diff --git a/SandboxiePlus/SandMan/SandMan.vcxproj b/SandboxiePlus/SandMan/SandMan.vcxproj index 9efb4f03..8961d3b7 100644 --- a/SandboxiePlus/SandMan/SandMan.vcxproj +++ b/SandboxiePlus/SandMan/SandMan.vcxproj @@ -243,9 +243,6 @@ - - - @@ -265,8 +262,12 @@ + + + + diff --git a/SandboxiePlus/SandMan/SandMan.vcxproj.filters b/SandboxiePlus/SandMan/SandMan.vcxproj.filters index ca9b34aa..1a68646c 100644 --- a/SandboxiePlus/SandMan/SandMan.vcxproj.filters +++ b/SandboxiePlus/SandMan/SandMan.vcxproj.filters @@ -169,11 +169,6 @@ Resource Files - - - Resource Files - - Resource Files @@ -224,5 +219,13 @@ Translation Files + + Translation Files + + + + + Resource Files + \ No newline at end of file diff --git a/SandboxiePlus/SandMan/Views/SbieView.cpp b/SandboxiePlus/SandMan/Views/SbieView.cpp index 42092961..41cf2757 100644 --- a/SandboxiePlus/SandMan/Views/SbieView.cpp +++ b/SandboxiePlus/SandMan/Views/SbieView.cpp @@ -209,6 +209,7 @@ void CSbieView::OnMenu(const QPoint& Point) foreach(const QModelIndex& Index, Rows) { QModelIndex ModelIndex = m_pSortProxy->mapToSource(Index); + pProcess = m_pSbieModel->GetProcess(ModelIndex); if (pProcess) { @@ -219,10 +220,13 @@ void CSbieView::OnMenu(const QPoint& Point) else { pBox = m_pSbieModel->GetSandBox(ModelIndex); - if (!pBox->IsEnabled()) - iSandBoxeCount = -1; - if (pBox && iSandBoxeCount != -1) - iSandBoxeCount++; + if (pBox) + { + if (!pBox->IsEnabled()) + iSandBoxeCount = -1; + else if (iSandBoxeCount != -1) + iSandBoxeCount++; + } } } @@ -501,6 +505,11 @@ void CSbieView::OnSandBoxAction() } else if (Action == m_pMenuExplore) { + if (SandBoxes.first()->IsEmpty()) { + QMessageBox("Sandboxie-Plus", tr("This Sandbox is empty."), QMessageBox::Information, QMessageBox::Ok, QMessageBox::NoButton, QMessageBox::NoButton, this).exec(); + return; + } + if (theConf->GetBool("Options/AdvancedView", true) == false && theConf->GetBool("Options/ExplorerInfo", true)) { bool State = false; diff --git a/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp b/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp index 38c64606..83088851 100644 --- a/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp +++ b/SandboxiePlus/SandMan/Windows/OptionsWindow.cpp @@ -150,7 +150,7 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri connect(ui.cmbBoxIndicator, SIGNAL(currentIndexChanged(int)), this, SLOT(OnGeneralChanged())); connect(ui.cmbBoxBorder, SIGNAL(currentIndexChanged(int)), this, SLOT(OnGeneralChanged())); - connect(ui.btnBorderColor, SIGNAL(pressed()), this, SLOT(OnPickColor())); + connect(ui.btnBorderColor, SIGNAL(clicked(bool)), this, SLOT(OnPickColor())); connect(ui.spinBorderWidth, SIGNAL(valueChanged(int)), this, SLOT(OnGeneralChanged())); connect(ui.chkBlockNetShare, SIGNAL(clicked(bool)), this, SLOT(OnGeneralChanged())); @@ -185,22 +185,22 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri // // Groupes - connect(ui.btnAddGroup, SIGNAL(pressed()), this, SLOT(OnAddGroup())); - connect(ui.btnAddProg, SIGNAL(pressed()), this, SLOT(OnAddProg())); - connect(ui.btnDelProg, SIGNAL(pressed()), this, SLOT(OnDelProg())); + connect(ui.btnAddGroup, SIGNAL(clicked(bool)), this, SLOT(OnAddGroup())); + connect(ui.btnAddProg, SIGNAL(clicked(bool)), this, SLOT(OnAddProg())); + connect(ui.btnDelProg, SIGNAL(clicked(bool)), this, SLOT(OnDelProg())); // // Force - connect(ui.btnForceProg, SIGNAL(pressed()), this, SLOT(OnForceProg())); - connect(ui.btnForceDir, SIGNAL(pressed()), this, SLOT(OnForceDir())); - connect(ui.btnDelForce, SIGNAL(pressed()), this, SLOT(OnDelForce())); + connect(ui.btnForceProg, SIGNAL(clicked(bool)), this, SLOT(OnForceProg())); + connect(ui.btnForceDir, SIGNAL(clicked(bool)), this, SLOT(OnForceDir())); + connect(ui.btnDelForce, SIGNAL(clicked(bool)), this, SLOT(OnDelForce())); connect(ui.chkShowForceTmpl, SIGNAL(clicked(bool)), this, SLOT(OnShowForceTmpl())); // // Stop - connect(ui.btnAddLingering, SIGNAL(pressed()), this, SLOT(OnAddLingering())); - connect(ui.btnAddLeader, SIGNAL(pressed()), this, SLOT(OnAddLeader())); - connect(ui.btnDelStopProg, SIGNAL(pressed()), this, SLOT(OnDelStopProg())); + connect(ui.btnAddLingering, SIGNAL(clicked(bool)), this, SLOT(OnAddLingering())); + connect(ui.btnAddLeader, SIGNAL(clicked(bool)), this, SLOT(OnAddLeader())); + connect(ui.btnDelStopProg, SIGNAL(clicked(bool)), this, SLOT(OnDelStopProg())); connect(ui.chkShowStopTmpl, SIGNAL(clicked(bool)), this, SLOT(OnShowStopTmpl())); // @@ -208,35 +208,35 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri connect(ui.radStartAll, SIGNAL(clicked(bool)), this, SLOT(OnRestrictStart())); connect(ui.radStartExcept, SIGNAL(clicked(bool)), this, SLOT(OnRestrictStart())); connect(ui.radStartSelected, SIGNAL(clicked(bool)), this, SLOT(OnRestrictStart())); - connect(ui.btnAddStartProg, SIGNAL(pressed()), this, SLOT(OnAddStartProg())); - connect(ui.btnDelStartProg, SIGNAL(pressed()), this, SLOT(OnDelStartProg())); + connect(ui.btnAddStartProg, SIGNAL(clicked(bool)), this, SLOT(OnAddStartProg())); + connect(ui.btnDelStartProg, SIGNAL(clicked(bool)), this, SLOT(OnDelStartProg())); connect(ui.chkStartBlockMsg, SIGNAL(clicked(bool)), this, SLOT(OnStartChanged())); // // INet connect(ui.chkBlockINet, SIGNAL(clicked(bool)), this, SLOT(OnBlockINet())); - connect(ui.btnAddINetProg, SIGNAL(pressed()), this, SLOT(OnAddINetProg())); - connect(ui.btnDelINetProg, SIGNAL(pressed()), this, SLOT(OnDelINetProg())); + connect(ui.btnAddINetProg, SIGNAL(clicked(bool)), this, SLOT(OnAddINetProg())); + connect(ui.btnDelINetProg, SIGNAL(clicked(bool)), this, SLOT(OnDelINetProg())); connect(ui.chkINetBlockPrompt, SIGNAL(clicked(bool)), this, SLOT(OnINetBlockChanged())); connect(ui.chkINetBlockMsg, SIGNAL(clicked(bool)), this, SLOT(OnINetBlockChanged())); // // Access - connect(ui.btnAddFile, SIGNAL(pressed()), this, SLOT(OnAddFile())); + connect(ui.btnAddFile, SIGNAL(clicked(bool)), this, SLOT(OnAddFile())); QMenu* pFileBtnMenu = new QMenu(ui.btnAddFile); pFileBtnMenu->addAction(tr("Browse for File"), this, SLOT(OnBrowseFile())); pFileBtnMenu->addAction(tr("Browse for Folder"), this, SLOT(OnBrowseFolder())); ui.btnAddFile->setPopupMode(QToolButton::MenuButtonPopup); ui.btnAddFile->setMenu(pFileBtnMenu); - connect(ui.btnAddKey, SIGNAL(pressed()), this, SLOT(OnAddKey())); - connect(ui.btnAddIPC, SIGNAL(pressed()), this, SLOT(OnAddIPC())); - connect(ui.btnAddWnd, SIGNAL(pressed()), this, SLOT(OnAddWnd())); - connect(ui.btnAddCOM, SIGNAL(pressed()), this, SLOT(OnAddCOM())); + connect(ui.btnAddKey, SIGNAL(clicked(bool)), this, SLOT(OnAddKey())); + connect(ui.btnAddIPC, SIGNAL(clicked(bool)), this, SLOT(OnAddIPC())); + connect(ui.btnAddWnd, SIGNAL(clicked(bool)), this, SLOT(OnAddWnd())); + connect(ui.btnAddCOM, SIGNAL(clicked(bool)), this, SLOT(OnAddCOM())); // todo: add priority by order ui.btnMoveUp->setVisible(false); ui.btnMoveDown->setVisible(false); connect(ui.chkShowAccessTmpl, SIGNAL(clicked(bool)), this, SLOT(OnShowAccessTmpl())); - connect(ui.btnDelAccess, SIGNAL(pressed()), this, SLOT(OnDelAccess())); + connect(ui.btnDelAccess, SIGNAL(clicked(bool)), this, SLOT(OnDelAccess())); connect(ui.treeAccess, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(OnAccessItemClicked(QTreeWidgetItem*, int))); connect(ui.treeAccess, SIGNAL(itemDoubleClicked(QTreeWidgetItem*, int)), this, SLOT(OnAccessItemDoubleClicked(QTreeWidgetItem*, int))); @@ -245,10 +245,10 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri // Recovery connect(ui.chkAutoRecovery, SIGNAL(clicked(bool)), this, SLOT(OnRecoveryChanged())); - connect(ui.btnAddRecovery, SIGNAL(pressed()), this, SLOT(OnAddRecFolder())); - connect(ui.btnDelRecovery, SIGNAL(pressed()), this, SLOT(OnDelRecEntry())); - connect(ui.btnAddRecIgnore, SIGNAL(pressed()), this, SLOT(OnAddRecIgnore())); - connect(ui.btnAddRecIgnoreExt, SIGNAL(pressed()), this, SLOT(OnAddRecIgnoreExt())); + connect(ui.btnAddRecovery, SIGNAL(clicked(bool)), this, SLOT(OnAddRecFolder())); + connect(ui.btnDelRecovery, SIGNAL(clicked(bool)), this, SLOT(OnDelRecEntry())); + connect(ui.btnAddRecIgnore, SIGNAL(clicked(bool)), this, SLOT(OnAddRecIgnore())); + connect(ui.btnAddRecIgnoreExt, SIGNAL(clicked(bool)), this, SLOT(OnAddRecIgnoreExt())); connect(ui.chkShowRecoveryTmpl, SIGNAL(clicked(bool)), this, SLOT(OnShowRecoveryTmpl())); // @@ -264,6 +264,7 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri connect(ui.chkOpenCredentials, 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.chkOpenBluetooth, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); //connect(ui.chkOpenLsaEndpoint, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); connect(ui.chkAddToJob, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); @@ -276,15 +277,15 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri connect(ui.chkComTrace, 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.btnAddAutoExec, SIGNAL(clicked(bool)), this, SLOT(OnAddAutoExec())); + connect(ui.btnDelAutoExec, SIGNAL(clicked(bool)), this, SLOT(OnDelAutoExec())); connect(ui.chkHideOtherBoxes, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); - connect(ui.btnAddProcess, SIGNAL(pressed()), this, SLOT(OnAddProcess())); - connect(ui.btnDelProcess, SIGNAL(pressed()), this, SLOT(OnDelProcess())); + connect(ui.btnAddProcess, SIGNAL(clicked(bool)), this, SLOT(OnAddProcess())); + connect(ui.btnDelProcess, SIGNAL(clicked(bool)), this, SLOT(OnDelProcess())); - connect(ui.btnAddUser, SIGNAL(pressed()), this, SLOT(OnAddUser())); - connect(ui.btnDelUser, SIGNAL(pressed()), this, SLOT(OnDelUser())); + connect(ui.btnAddUser, SIGNAL(clicked(bool)), this, SLOT(OnAddUser())); + connect(ui.btnDelUser, SIGNAL(clicked(bool)), this, SLOT(OnDelUser())); connect(ui.chkMonitorAdminOnly, SIGNAL(clicked(bool)), this, SLOT(OnAdvancedChanged())); // @@ -299,13 +300,13 @@ COptionsWindow::COptionsWindow(const QSharedPointer& pBox, const QStri connect(ui.tabs, SIGNAL(currentChanged(int)), this, SLOT(OnTab())); // edit - connect(ui.btnEditIni, SIGNAL(pressed()), this, SLOT(OnEditIni())); - connect(ui.btnSaveIni, SIGNAL(pressed()), this, SLOT(OnSaveIni())); - connect(ui.btnCancelEdit, SIGNAL(pressed()), this, SLOT(OnCancelEdit())); + connect(ui.btnEditIni, SIGNAL(clicked(bool)), this, SLOT(OnEditIni())); + connect(ui.btnSaveIni, SIGNAL(clicked(bool)), this, SLOT(OnSaveIni())); + connect(ui.btnCancelEdit, SIGNAL(clicked(bool)), this, SLOT(OnCancelEdit())); // - connect(ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(pressed()), this, SLOT(ok())); - connect(ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(pressed()), this, SLOT(apply())); + connect(ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked(bool)), this, SLOT(ok())); + connect(ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked(bool)), this, SLOT(apply())); connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(close())); if (ReadOnly) { @@ -368,12 +369,17 @@ void COptionsWindow::closeEvent(QCloseEvent *e) bool COptionsWindow::eventFilter(QObject *source, QEvent *event) { if (event->type() == QEvent::KeyPress && ((QKeyEvent*)event)->key() == Qt::Key_Escape && ((QKeyEvent*)event)->modifiers() == Qt::NoModifier) + { CloseAccessEdit(false); - else if (source == ui.treeAccess->viewport() && event->type() == QEvent::MouseButtonPress) + return true; // cancel event + } + + if (source == ui.treeAccess->viewport() && event->type() == QEvent::MouseButtonPress) + { CloseAccessEdit(); - else - return QDialog::eventFilter(source, event); - return true; + } + + return QDialog::eventFilter(source, event); } //void COptionsWindow::OnWithTemplates() @@ -479,6 +485,7 @@ void COptionsWindow::LoadConfig() ui.chkOpenCredentials->setEnabled(!ui.chkOpenProtectedStorage->isChecked()); ui.chkOpenCredentials->setChecked(!ui.chkOpenCredentials->isEnabled() || m_pBox->GetBool("OpenCredentials", false)); ui.chkOpenSmartCard->setChecked(m_pBox->GetBool("OpenSmartCard", true)); + ui.chkOpenBluetooth->setChecked(m_pBox->GetBool("OpenBluetooth", false)); //ui.chkOpenLsaEndpoint->setChecked(m_pBox->GetBool("OpenLsaEndpoint", false)); @@ -645,6 +652,7 @@ void COptionsWindow::SaveConfig() if(ui.chkOpenCredentials->isEnabled()) WriteAdvancedCheck(ui.chkOpenCredentials, "OpenCredentials", "y", ""); WriteAdvancedCheck(ui.chkOpenSmartCard, "OpenSmartCard", "", "n"); + WriteAdvancedCheck(ui.chkOpenBluetooth, "OpenBluetooth", "y", ""); //WriteAdvancedCheck(ui.chkOpenLsaEndpoint, "OpenLsaEndpoint", "y", ""); WriteAdvancedCheck(ui.chkAddToJob, "NoAddProcessToJob", "", "y"); @@ -700,6 +708,8 @@ void COptionsWindow::apply() return; } + CloseAccessEdit(); + if (!ui.btnEditIni->isEnabled()) SaveIniSection(); else @@ -1471,27 +1481,27 @@ QString COptionsWindow::GetAccessModeStr(EAccessMode Mode) { switch (Mode) { - case eDirect: return "Direct"; - case eDirectAll: return "Direct All"; - case eClosed: return "Closed"; - case eClosedRT: return "Closed RT"; - case eReadOnly: return "Read Only"; - case eWriteOnly: return "Write Only"; + case eDirect: return tr("Direct"); + case eDirectAll: return tr("Direct All"); + case eClosed: return tr("Closed"); + case eClosedRT: return tr("Closed RT"); + case eReadOnly: return tr("Read Only"); + case eWriteOnly: return tr("Hidden"); } - return "Unknown"; + return tr("Unknown"); } QString COptionsWindow::GetAccessTypeStr(EAccessType Type) { switch (Type) { - case eFile: return "File/Folder"; - case eKey: return "Registry"; - case eIPC: return "IPC Path"; - case eWnd: return "Wnd Class"; - case eCOM: return "COM Object"; + case eFile: return tr("File/Folder"); + case eKey: return tr("Registry"); + case eIPC: return tr("IPC Path"); + case eWnd: return tr("Wnd Class"); + case eCOM: return tr("COM Object"); } - return "Unknown"; + return tr("Unknown"); } void COptionsWindow::OnBrowseFile() diff --git a/SandboxiePlus/SandMan/Windows/PopUpWindow.h b/SandboxiePlus/SandMan/Windows/PopUpWindow.h index 0d570537..b795c769 100644 --- a/SandboxiePlus/SandMan/Windows/PopUpWindow.h +++ b/SandboxiePlus/SandMan/Windows/PopUpWindow.h @@ -46,7 +46,7 @@ public: pHelp->setText(tr("?")); pHelp->setToolTip(tr("Visit %1 for a detailed explanation.").arg(QString("https://sandboxie-plus.com/go.php?to=sbie-sbie%1/").arg(GetMsgId()))); pHelp->setMaximumWidth(16); - QObject::connect(pHelp, SIGNAL(pressed()), this, SLOT(OnHelp())); + QObject::connect(pHelp, SIGNAL(clicked(bool)), this, SLOT(OnHelp())); m_pMainLayout->addWidget(pHelp, 0, 1); @@ -58,7 +58,7 @@ public: pMenu->addAction(tr("Hide all such messages"), this, SIGNAL(Hide())); pDismiss->setMenu(pMenu); //QObject::connect(pDismiss, SIGNAL(triggered(QAction*)), , SLOT()); - QObject::connect(pDismiss, SIGNAL(pressed()), this, SIGNAL(Dismiss())); + QObject::connect(pDismiss, SIGNAL(clicked(bool)), this, SIGNAL(Dismiss())); m_pMainLayout->addWidget(pDismiss, 0, 2); } } @@ -107,17 +107,17 @@ public: m_pYes = new QToolButton(); m_pYes->setText(tr("Yes")); - connect(m_pYes, SIGNAL(pressed()), this, SLOT(OnAccepted())); + connect(m_pYes, SIGNAL(clicked(bool)), this, SLOT(OnAccepted())); m_pMainLayout->addWidget(m_pYes, 1, 2); m_pNo = new QToolButton(); m_pNo->setText(tr("No")); - connect(m_pNo, SIGNAL(pressed()), this, SLOT(OnRejected())); + connect(m_pNo, SIGNAL(clicked(bool)), this, SLOT(OnRejected())); m_pMainLayout->addWidget(m_pNo, 1, 3); m_pTerminate = new QToolButton(); m_pTerminate->setText(tr("Terminate")); - connect(m_pTerminate, SIGNAL(pressed()), this, SLOT(OnTerminate())); + connect(m_pTerminate, SIGNAL(clicked(bool)), this, SLOT(OnTerminate())); m_pMainLayout->addWidget(m_pTerminate, 1, 4); @@ -256,7 +256,7 @@ public: pRecMenu->addAction(tr("Open file recovery for this box"), this, SIGNAL(OpenRecovery())); pRecover->setMenu(pRecMenu); //QObject::connect(pRecover, SIGNAL(triggered(QAction*)), , SLOT()); - QObject::connect(pRecover, SIGNAL(pressed()), this, SLOT(OnRecover())); + QObject::connect(pRecover, SIGNAL(clicked(bool)), this, SLOT(OnRecover())); m_pMainLayout->addWidget(pRecover, 2, 2); @@ -269,7 +269,7 @@ public: pMenu->addAction(tr("Disable quick recovery until the box restarts"), this, SLOT(OnDisable())); pDismiss->setMenu(pMenu); //QObject::connect(pDismiss, SIGNAL(triggered(QAction*)), , SLOT()); - QObject::connect(pDismiss, SIGNAL(pressed()), this, SIGNAL(Dismiss())); + QObject::connect(pDismiss, SIGNAL(clicked(bool)), this, SIGNAL(Dismiss())); m_pMainLayout->addWidget(pDismiss, 2, 3); } @@ -359,7 +359,7 @@ public: //pMenu->addAction(tr("Hide this progress for this process"), this, SIGNAL(Hide())); //pDismiss->setMenu(pMenu); //QObject::connect(pDismiss, SIGNAL(triggered(QAction*)), , SLOT()); - QObject::connect(pDismiss, SIGNAL(pressed()), this, SIGNAL(Dismiss())); + QObject::connect(pDismiss, SIGNAL(clicked(bool)), this, SIGNAL(Dismiss())); m_pMainLayout->addWidget(pDismiss, 1, 2); m_iTimeOutSec = 5; diff --git a/SandboxiePlus/SandMan/Windows/RecoveryWindow.cpp b/SandboxiePlus/SandMan/Windows/RecoveryWindow.cpp index 3227ccfd..8a69f69c 100644 --- a/SandboxiePlus/SandMan/Windows/RecoveryWindow.cpp +++ b/SandboxiePlus/SandMan/Windows/RecoveryWindow.cpp @@ -58,13 +58,13 @@ CRecoveryWindow::CRecoveryWindow(const CSandBoxPtr& pBox, QWidget *parent) //connect(ui.treeFiles->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(UpdateSnapshot(const QModelIndex&))); //connect(ui.treeFiles, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(OnSelectSnapshot())); - connect(ui.btnAddFolder, SIGNAL(pressed()), this, SLOT(OnAddFolder())); + connect(ui.btnAddFolder, SIGNAL(clicked(bool)), this, SLOT(OnAddFolder())); connect(ui.chkShowAll, SIGNAL(clicked(bool)), this, SLOT(FindFiles())); - connect(ui.btnRefresh, SIGNAL(pressed()), this, SLOT(FindFiles())); - connect(ui.btnRecover, SIGNAL(pressed()), this, SLOT(OnRecover())); - connect(ui.btnRecoverTo, SIGNAL(pressed()), this, SLOT(OnRecoverTo())); - connect(ui.btnDeleteAll, SIGNAL(pressed()), this, SLOT(OnDeleteAll())); - connect(ui.btnClose, SIGNAL(pressed()), this, SLOT(close())); + connect(ui.btnRefresh, SIGNAL(clicked(bool)), this, SLOT(FindFiles())); + connect(ui.btnRecover, SIGNAL(clicked(bool)), this, SLOT(OnRecover())); + connect(ui.btnRecoverTo, SIGNAL(clicked(bool)), this, SLOT(OnRecoverTo())); + connect(ui.btnDeleteAll, SIGNAL(clicked(bool)), this, SLOT(OnDeleteAll())); + connect(ui.btnClose, SIGNAL(clicked(bool)), this, SLOT(close())); restoreGeometry(theConf->GetBlob("RecoveryWindow/Window_Geometry")); @@ -226,7 +226,6 @@ int CRecoveryWindow::FindFiles(const QString& RecParent, const QString& BoxedFol void CRecoveryWindow::RecoverFiles(bool bBrowse) { bool HasShare = false; - QMap FileMap; foreach(const QModelIndex& Index, ui.treeFiles->selectionModel()->selectedIndexes()) { @@ -262,17 +261,21 @@ void CRecoveryWindow::RecoverFiles(bool bBrowse) } } - QString RecoveryFolder; - if (HasShare && !bBrowse) - { - if (!bBrowse) - QMessageBox::warning(this, "Sandboxie-Plus", tr("One or more selected files are located on a network share, and must be recovered to a local drive, please select a folder to recover all selected files to.")); + if (HasShare && !bBrowse) { + QMessageBox::warning(this, "Sandboxie-Plus", tr("One or more selected files are located on a network share, and must be recovered to a local drive, please select a folder to recover all selected files to.")); + bBrowse = true; + } + + + QString RecoveryFolder; + if (bBrowse) { RecoveryFolder = QFileDialog::getExistingDirectory(this, tr("Select Directory")).replace("/", "\\"); if (RecoveryFolder.isEmpty()) return; } + QList> FileList; for(QMap::const_iterator I = FileMap.begin(); I != FileMap.end(); ++I) { @@ -287,6 +290,7 @@ void CRecoveryWindow::RecoverFiles(bool bBrowse) FileList.append(qMakePair(BoxedFilePath, RecoveryPath)); } + SB_PROGRESS Status = theGUI->RecoverFiles(FileList); if (Status.GetStatus() == OP_ASYNC) { diff --git a/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp b/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp index 65aa435f..d1ead340 100644 --- a/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp +++ b/SandboxiePlus/SandMan/Windows/SettingsWindow.cpp @@ -89,7 +89,7 @@ CSettingsWindow::CSettingsWindow(QWidget *parent) ui.chkAdminOnly->setChecked(theAPI->GetGlobalSettings()->GetBool("EditAdminOnly", false)); ui.chkPassRequired->setChecked(!theAPI->GetGlobalSettings()->GetText("EditPassword", "").isEmpty()); connect(ui.chkPassRequired, SIGNAL(stateChanged(int)), this, SLOT(OnChange())); - connect(ui.btnSetPassword, SIGNAL(pressed()), this, SLOT(OnSetPassword())); + connect(ui.btnSetPassword, SIGNAL(clicked(bool)), this, SLOT(OnSetPassword())); ui.chkAdminOnlyFP->setChecked(theAPI->GetGlobalSettings()->GetBool("ForceDisableAdminOnly", false)); ui.chkClearPass->setChecked(theAPI->GetGlobalSettings()->GetBool("ForgetPassword", false)); @@ -97,9 +97,9 @@ CSettingsWindow::CSettingsWindow(QWidget *parent) connect(ui.chkStartBlock, SIGNAL(stateChanged(int)), this, SLOT(OnWarnChanged())); ui.chkStartBlockMsg->setChecked(theAPI->GetGlobalSettings()->GetBool("NotifyStartRunAccessDenied", true)); connect(ui.chkStartBlockMsg, SIGNAL(stateChanged(int)), this, SLOT(OnWarnChanged())); - connect(ui.btnAddWarnProg, SIGNAL(pressed()), this, SLOT(OnAddWarnProg())); - connect(ui.btnAddWarnFolder, SIGNAL(pressed()), this, SLOT(OnAddWarnFolder())); - connect(ui.btnDelWarnProg, SIGNAL(pressed()), this, SLOT(OnDelWarnProg())); + connect(ui.btnAddWarnProg, SIGNAL(clicked(bool)), this, SLOT(OnAddWarnProg())); + connect(ui.btnAddWarnFolder, SIGNAL(clicked(bool)), this, SLOT(OnAddWarnFolder())); + connect(ui.btnDelWarnProg, SIGNAL(clicked(bool)), this, SLOT(OnDelWarnProg())); foreach(const QString& Value, theAPI->GetGlobalSettings()->GetTextList("AlertProcess", false)) AddWarnEntry(Value, 1); @@ -127,7 +127,7 @@ CSettingsWindow::CSettingsWindow(QWidget *parent) } m_WarnProgsChanged = false; - connect(ui.btnBrowse, SIGNAL(pressed()), this, SLOT(OnBrowse())); + connect(ui.btnBrowse, SIGNAL(clicked(bool)), this, SLOT(OnBrowse())); int PortableRootDir = theConf->GetInt("Options/PortableRootDir", -1); if (PortableRootDir != -1 && theConf->IsPortable()) @@ -136,8 +136,8 @@ CSettingsWindow::CSettingsWindow(QWidget *parent) ui.chkAutoRoot->setVisible(false); connect(ui.chkAutoRoot, SIGNAL(stateChanged(int)), this, SLOT(OnChange())); - connect(ui.btnAddCompat, SIGNAL(pressed()), this, SLOT(OnAddCompat())); - connect(ui.btnDelCompat, SIGNAL(pressed()), this, SLOT(OnDelCompat())); + connect(ui.btnAddCompat, SIGNAL(clicked(bool)), this, SLOT(OnAddCompat())); + connect(ui.btnDelCompat, SIGNAL(clicked(bool)), this, SLOT(OnDelCompat())); m_CompatLoaded = 0; m_CompatChanged = false; @@ -148,8 +148,8 @@ CSettingsWindow::CSettingsWindow(QWidget *parent) connect(ui.tabs, SIGNAL(currentChanged(int)), this, SLOT(OnTab())); - connect(ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(pressed()), this, SLOT(ok())); - connect(ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(pressed()), this, SLOT(apply())); + connect(ui.buttonBox->button(QDialogButtonBox::Ok), SIGNAL(clicked(bool)), this, SLOT(ok())); + connect(ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked(bool)), this, SLOT(apply())); connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(reject())); restoreGeometry(theConf->GetBlob("SettingsWindow/Window_Geometry")); @@ -294,7 +294,7 @@ void CSettingsWindow::apply() } if (ui.chkAutoRoot->isVisible()) - theConf->SetValue("Options/PortableRootDir", ui.chkAutoRoot->checkState() != Qt::Checked ? 1 : 0); + theConf->SetValue("Options/PortableRootDir", ui.chkAutoRoot->checkState() == Qt::Checked ? 1 : 0); theConf->SetValue("Options/AutoRunSoftCompat", !ui.chkNoCompat->isChecked()); diff --git a/SandboxiePlus/SandMan/Windows/SnapshotsWindow.cpp b/SandboxiePlus/SandMan/Windows/SnapshotsWindow.cpp index 09746b69..644fc104 100644 --- a/SandboxiePlus/SandMan/Windows/SnapshotsWindow.cpp +++ b/SandboxiePlus/SandMan/Windows/SnapshotsWindow.cpp @@ -49,9 +49,9 @@ CSnapshotsWindow::CSnapshotsWindow(const CSandBoxPtr& pBox, QWidget *parent) connect(ui.treeSnapshots->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(UpdateSnapshot(const QModelIndex&))); connect(ui.treeSnapshots, SIGNAL(doubleClicked(const QModelIndex&)), this, SLOT(OnSelectSnapshot())); - connect(ui.btnTake, SIGNAL(pressed()), this, SLOT(OnTakeSnapshot())); - connect(ui.btnSelect, SIGNAL(pressed()), this, SLOT(OnSelectSnapshot())); - connect(ui.btnRemove, SIGNAL(pressed()), this, SLOT(OnRemoveSnapshot())); + connect(ui.btnTake, SIGNAL(clicked(bool)), this, SLOT(OnTakeSnapshot())); + connect(ui.btnSelect, SIGNAL(clicked(bool)), this, SLOT(OnSelectSnapshot())); + connect(ui.btnRemove, SIGNAL(clicked(bool)), this, SLOT(OnRemoveSnapshot())); connect(ui.txtName, SIGNAL(textEdited(const QString&)), this, SLOT(SaveInfo())); connect(ui.txtInfo, SIGNAL(textChanged()), this, SLOT(SaveInfo())); diff --git a/SandboxiePlus/SandMan/main.cpp b/SandboxiePlus/SandMan/main.cpp index fafc139b..6e37b5ae 100644 --- a/SandboxiePlus/SandMan/main.cpp +++ b/SandboxiePlus/SandMan/main.cpp @@ -1,6 +1,6 @@ #include "stdafx.h" #include "SandMan.h" -#include +#include #include "../QSbieAPI/SbieAPI.h" #include "../QtSingleApp/src/qtsingleapplication.h" #include "../QSbieAPI/SbieUtils.h" @@ -31,7 +31,7 @@ int main(int argc, char *argv[]) return 0; } - if (app.sendMessage("ShowWnd")) + if (app.sendMessage("ShowWnd")) return 0; theConf = new CSettings("Sandboxie-Plus");