#include "stdafx.h" #include "BoxObject.h" #include "../SandMan.h" #include "../Views/SbieView.h" #include "../Windows/SettingsWindow.h" #include "../QSbieAPI/SbieUtils.h" quint32 CBoxObject::StartTask(const QString& Command, const QVariantMap& Options) { SB_RESULT(quint32) result = theGUI->RunStart(getName(), Command, Options["elevalted"].toBool() ? CSbieAPI::eStartElevated : CSbieAPI::eStartDefault, Options["directory"].toString()); return result.IsError() ? -1 : result.GetValue(); } QVariantList CBoxObject::ListTasks() { QVariantList List; foreach(const CBoxedProcessPtr& pProcess, m_pIni.objectCast()->GetProcessList()) List.append(TaskInfo(pProcess)); return List; } bool CBoxObject::StopTask(quint32 pid) { CBoxedProcessPtr pProcess = m_pIni.objectCast()->GetProcessList().value(pid); if (!pProcess) return false; SB_STATUS Status = pProcess->Terminate(); return !Status.IsError(); } bool CBoxObject::Terminate() { SB_STATUS Status = m_pIni.objectCast()->TerminateAll(); return !Status.IsError(); } QVariantMap CBoxObject::TaskInfo(quint32 pid) { return TaskInfo(m_pIni.objectCast()->GetProcessList().value(pid)); } QVariantMap CBoxObject::TaskInfo(const CBoxedProcessPtr& pProcess) { QVariantMap Info; Info["pid"] = pProcess->GetProcessId(); Info["parentId"] = pProcess->GetParendPID(); Info["name"] = pProcess->GetProcessName(); Info["commandline"] = pProcess->GetCommandLine(); Info["fileName"] = pProcess->GetFileName(); Info["timeStamp"] = pProcess->GetTimeStamp(); Info["flags"] = pProcess->GetProcessFlags(); Info["type"] = pProcess->GetImageType(); if (pProcess->IsTerminated()) { Info["isRunning"] = false; Info["returnCode"] = pProcess->GetReturnCode(); } else Info["isRunning"] = true; return Info; } bool CBoxObject::DeleteContent() { SB_STATUS Status = theGUI->DeleteBoxContent(m_pIni.objectCast(), CSandMan::eCleanUp); return !Status.IsError(); } bool CBoxObject::RemoveSandbox() { SB_STATUS Status = theGUI->DeleteBoxContent(m_pIni.objectCast(), CSandMan::eForDelete); if (Status.GetMsgCode() == SB_Canceled) return false; Status = m_pIni.objectCast()->RemoveBox(); return !Status.IsError(); } bool CBoxObject::MakeShortcut(const QString& Target, const QVariantMap& Options) { QString Location = Options["location"].toString(); QStandardPaths::StandardLocation location = (QStandardPaths::StandardLocation)-1; if (Location.compare("desktop", Qt::CaseInsensitive) == 0) location = QStandardPaths::DesktopLocation; else if (Location.compare("startmenu", Qt::CaseInsensitive) == 0) location = QStandardPaths::ApplicationsLocation; else if (Location.compare("documents", Qt::CaseInsensitive) == 0) location = QStandardPaths::DocumentsLocation; QString Name = Options["name"].toString(); if (location != -1) { QString Path = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation).replace("/", "\\"); if (Target == "default_browser") Path += "\\" + CSettingsWindow::tr("Sandboxed Web Browser") + ".lnk"; else if (!Name.isEmpty()) Path += "\\" + Name + ".lnk"; else return false; QString StartExe = theAPI->GetSbiePath() + "\\SandMan.exe"; return CSbieUtils::CreateShortcut(StartExe, Path, "", getName(), Target); } return CSbieView::CreateShortcutEx(Target, getName(), Name, Options["iconPath"].toString(), Options["iconIndex"].toInt(), Options["workDir"].toString()); } void CSBoxObject::Start(const QString& Command, bool bElevale) { m_pIni.objectCast()->RunStart(Command.isEmpty() ? "run_dialog" : Command, bElevale); } void CSBoxObject::ApplyChanges(bool bApply) { CWizardEngine* pEngine = qobject_cast(parent()); pEngine->SetApplyShadow(m_OriginalName, bApply); }