Sandboxie/SandboxiePlus/SandMan/Windows/NewBoxWindow.cpp

127 lines
4.5 KiB
C++

#include "stdafx.h"
#include "NewBoxWindow.h"
#include "SandMan.h"
#include "../MiscHelpers/Common/Settings.h"
#include "Views/SbieView.h"
CNewBoxWindow::CNewBoxWindow(QWidget *parent)
: QDialog(parent)
{
Qt::WindowFlags flags = windowFlags();
flags |= Qt::CustomizeWindowHint;
//flags &= ~Qt::WindowContextHelpButtonHint;
//flags &= ~Qt::WindowSystemMenuHint;
//flags &= ~Qt::WindowMinMaxButtonsHint;
//flags |= Qt::WindowMinimizeButtonHint;
//flags &= ~Qt::WindowCloseButtonHint;
flags &= ~Qt::WindowContextHelpButtonHint;
//flags &= ~Qt::WindowSystemMenuHint;
setWindowFlags(flags);
ui.setupUi(this);
this->setWindowTitle(tr("Sandboxie-Plus - Create New Box"));
connect(ui.buttonBox, SIGNAL(accepted()), SLOT(CreateBox()));
connect(ui.buttonBox, SIGNAL(rejected()), SLOT(reject()));
QMap<QString, CSandBoxPtr> Boxes = theAPI->GetAllBoxes();
for (int i=0;; i++) {
QString NewName = tr("New Box");
if (i > 0) NewName.append(" " + QString::number(i));
if (Boxes.contains(NewName.toLower().replace(" ", "_")))
continue;
ui.txtName->setText(NewName);
break;
}
ui.cmbBoxType->addItem(theGUI->GetBoxIcon(CSandBoxPlus::eHardenedPlus), tr("Hardened Sandbox with Data Protection"), (int)CSandBoxPlus::eHardenedPlus);
ui.cmbBoxType->addItem(theGUI->GetBoxIcon(CSandBoxPlus::eHardened), tr("Security Hardened Sandbox"), (int)CSandBoxPlus::eHardened);
ui.cmbBoxType->addItem(theGUI->GetBoxIcon(CSandBoxPlus::eDefaultPlus), tr("Sandbox with Data Protection"), (int)CSandBoxPlus::eDefaultPlus);
ui.cmbBoxType->addItem(theGUI->GetBoxIcon(CSandBoxPlus::eDefault), tr("Standard Isolation Sandbox (Default)"), (int)CSandBoxPlus::eDefault);
//ui.cmbBoxType->addItem(theGUI->GetBoxIcon(CSandBoxPlus::eInsecure), tr("UNSECURE Configuration (please change)"), (int)CSandBoxPlus::eInsecure);
ui.cmbBoxType->addItem(theGUI->GetBoxIcon(CSandBoxPlus::eAppBoxPlus), tr("Application Compartment with Data Protection"), (int)CSandBoxPlus::eAppBoxPlus);
ui.cmbBoxType->addItem(theGUI->GetBoxIcon(CSandBoxPlus::eAppBox), tr("Application Compartment (NO Isolation)"), (int)CSandBoxPlus::eAppBox);
connect(ui.cmbBoxType, SIGNAL(currentIndexChanged(int)), this, SLOT(OnBoxTypChanged()));
ui.cmbBoxType->setCurrentIndex(3); // default
ui.txtName->setFocus();
//restoreGeometry(theConf->GetBlob("NewBoxWindow/Window_Geometry"));
}
CNewBoxWindow::~CNewBoxWindow()
{
//theConf->SetBlob("NewBoxWindow/Window_Geometry", saveGeometry());
}
void CNewBoxWindow::OnBoxTypChanged()
{
int BoxType = ui.cmbBoxType->currentData().toInt();
ui.lblBoxInfo->setText(theGUI->GetBoxDescription(BoxType));
if(BoxType != CSandBoxPlus::eDefault)
theGUI->CheckCertificate(this);
}
void CNewBoxWindow::CreateBox()
{
m_Name = ui.txtName->text();
int BoxType = ui.cmbBoxType->currentData().toInt();
if (!theGUI->GetBoxView()->TestNameAndWarn(m_Name))
return;
m_Name.replace(" ", "_");
SB_STATUS Status = theAPI->CreateBox(m_Name, true);
if (!Status.IsError())
{
CSandBoxPtr pBox = theAPI->GetBoxByName(m_Name);
pBox->SetBool("AutoRecover", true);
switch (BoxType)
{
case CSandBoxPlus::eHardenedPlus:
case CSandBoxPlus::eHardened:
//pBox->SetBool("NoSecurityIsolation", false);
pBox->SetBool("UseSecurityMode", true);
//pBox->SetBool("DropAdminRights", true);
//pBox->SetBool("MsiInstallerExemptions", false);
pBox->SetBool("UsePrivacyMode", BoxType == CSandBoxPlus::eHardenedPlus);
break;
case CSandBoxPlus::eDefaultPlus:
case CSandBoxPlus::eDefault:
//pBox->SetBool("NoSecurityIsolation", false);
pBox->SetBool("UseSecurityMode", false);
//pBox->SetBool("DropAdminRights", false);
//pBox->SetBool("MsiInstallerExemptions", false);
//pBox->SetBool("RunServicesAsSystem", false);
pBox->SetBool("UsePrivacyMode", BoxType == CSandBoxPlus::eDefaultPlus);
break;
case CSandBoxPlus::eAppBoxPlus:
case CSandBoxPlus::eAppBox:
//pBox->SetBool("UseSecurityMode", false);
pBox->SetBool("NoSecurityIsolation", true);
//pBox->SetBool("RunServicesAsSystem", true);
pBox->SetBool("UsePrivacyMode", BoxType == CSandBoxPlus::eAppBoxPlus);
//pBox->InsertText("Template", "NoUACProxy"); // proxy is always needed for exes in the box
pBox->InsertText("Template", "RpcPortBindingsExt");
break;
}
QRgb rgb = theGUI->GetBoxColor(BoxType);
pBox->SetText("BorderColor", QString("#%1%2%3").arg(qBlue(rgb), 2, 16, QChar('0')).arg(qGreen(rgb), 2, 16, QChar('0')).arg(qRed(rgb), 2, 16, QChar('0')) + ",ttl");
}
if(Status.IsError())
CSandMan::CheckResults(QList<SB_STATUS>() << Status);
else
accept();
}