Sandboxie/SandboxiePlus/SandMan/SbiePlusAPI.h

162 lines
4.4 KiB
C
Raw Normal View History

2021-10-16 16:19:51 +01:00
#pragma once
#include "../QSbieAPI/SbieAPI.h"
2022-02-05 14:09:53 +00:00
#include "BoxJob.h"
2021-10-16 16:19:51 +01:00
class CSbiePlusAPI : public CSbieAPI
{
Q_OBJECT
public:
CSbiePlusAPI(QObject* parent);
virtual ~CSbiePlusAPI();
virtual void UpdateWindowMap();
virtual QString GetProcessTitle(quint32 pid) { return m_WindowMap.value(pid); }
virtual bool IsRunningAsAdmin();
2022-02-18 19:09:35 +00:00
virtual bool IsBusy() const { return m_JobCount > 0; }
2022-06-13 19:12:53 +01:00
virtual void StopMonitor();
2021-10-16 16:19:51 +01:00
protected:
2022-02-18 19:09:35 +00:00
friend class CSandBoxPlus;
2021-10-16 16:19:51 +01:00
virtual CSandBox* NewSandBox(const QString& BoxName, class CSbieAPI* pAPI);
virtual CBoxedProcess* NewBoxedProcess(quint32 ProcessId, class CSandBox* pBox);
virtual CBoxedProcessPtr OnProcessBoxed(quint32 ProcessId, const QString& Path, const QString& Box, quint32 ParentId);
2022-02-18 19:09:35 +00:00
int m_JobCount;
2021-10-16 16:19:51 +01:00
QMultiMap<quint32, QString> m_WindowMap;
2022-05-16 20:30:40 +01:00
friend class CSandBoxPlus;
class CBoxMonitor* m_BoxMonitor;
2021-10-16 16:19:51 +01:00
};
///////////////////////////////////////////////////////////////////////////////
// CSandBoxPlus
//
class CSandBoxPlus : public CSandBox
{
Q_OBJECT
public:
CSandBoxPlus(const QString& BoxName, class CSbieAPI* pAPI);
virtual ~CSandBoxPlus();
virtual void UpdateDetails();
2022-05-16 20:30:40 +01:00
virtual void SetBoxPaths(const QString& FilePath, const QString& RegPath, const QString& IpcPath);
virtual void OpenBox();
2021-10-16 16:19:51 +01:00
virtual void CloseBox();
2022-05-16 20:30:40 +01:00
virtual SB_PROGRESS CleanBox();
2021-10-16 16:19:51 +01:00
virtual QString GetStatusStr() const;
virtual void SetLogApi(bool bEnable);
virtual bool HasLogApi() const { return m_bLogApiFound; }
virtual void SetINetBlock(bool bEnable);
virtual bool IsINetBlocked() const { return m_bINetBlocked; }
virtual void SetAllowShares(bool bEnable);
virtual bool HasSharesAccess() const { return m_bSharesAllowed; }
virtual void SetDropRights(bool bEnable);
virtual bool IsDropRights() const { return m_bDropRights; }
virtual bool IsUnsecureDebugging() const { return m_iUnsecureDebugging != 0; }
virtual void BlockProgram(const QString& ProgName);
virtual void SetInternetAccess(const QString& ProgName, bool bSet);
virtual bool HasInternetAccess(const QString& ProgName);
virtual void SetForcedProgram(const QString& ProgName, bool bSet);
virtual bool IsForcedProgram(const QString& ProgName);
virtual void SetLingeringProgram(const QString& ProgName, bool bSet);
virtual int IsLingeringProgram(const QString& ProgName);
virtual void SetLeaderProgram(const QString& ProgName, bool bSet);
virtual int IsLeaderProgram(const QString& ProgName);
2022-06-13 19:12:53 +01:00
virtual bool IsEmptyCached() const { return m_IsEmpty; }
2022-05-16 20:30:40 +01:00
virtual void UpdateSize();
virtual quint64 GetSize() const { if(m_TotalSize == -1) return 0; return m_TotalSize; }
virtual void SetSize(quint64 Size); //{ m_TotalSize = Size; }
2022-06-13 19:12:53 +01:00
virtual bool IsSizePending() const;
2022-05-16 20:30:40 +01:00
2021-10-16 16:19:51 +01:00
virtual bool IsRecoverySuspended() const { return m_SuspendRecovery; }
virtual void SetSuspendRecovery(bool bSet = true) { m_SuspendRecovery = bSet; }
const QSet<QString>& GetRecentPrograms() { return m_RecentPrograms; }
enum EBoxTypes
{
2021-11-13 08:28:32 +00:00
eHardenedPlus,
2021-10-16 16:19:51 +01:00
eHardened,
2021-11-13 08:28:32 +00:00
eDefaultPlus,
eDefault,
eAppBoxPlus,
eAppBox,
2021-10-16 16:19:51 +01:00
eInsecure,
2022-07-10 17:28:10 +01:00
eOpen,
2021-10-16 16:19:51 +01:00
2021-11-13 08:28:32 +00:00
eUnknown
2021-10-16 16:19:51 +01:00
};
2022-07-10 17:28:10 +01:00
EBoxTypes GetType() const { return m_BoxType; }
QRgb GetColor() const { return m_BoxColor; }
2021-10-16 16:19:51 +01:00
class COptionsWindow* m_pOptionsWnd;
class CRecoveryWindow* m_pRecoveryWnd;
2022-06-13 19:12:53 +01:00
bool IsBusy() const { return IsSizePending() || !m_JobQueue.isEmpty(); }
2022-02-05 14:09:53 +00:00
SB_STATUS DeleteContentAsync(bool DeleteShapshots = true, bool bOnAutoDelete = false);
public slots:
void OnAsyncFinished();
void OnAsyncMessage(const QString& Text);
void OnAsyncProgress(int Progress);
void OnCancelAsync();
2021-10-16 16:19:51 +01:00
protected:
friend class CSbiePlusAPI;
2022-06-13 19:12:53 +01:00
2021-10-16 16:19:51 +01:00
virtual bool CheckUnsecureConfig() const;
2022-07-10 17:28:10 +01:00
EBoxTypes GetTypeImpl() const;
2021-10-16 16:19:51 +01:00
virtual bool TestProgramGroup(const QString& Group, const QString& ProgName);
virtual void EditProgramGroup(const QString& Group, const QString& ProgName, bool bSet);
2022-02-05 14:09:53 +00:00
void AddJobToQueue(CBoxJob* pJob);
void StartNextJob();
QList<QSharedPointer<CBoxJob>> m_JobQueue;
2021-10-16 16:19:51 +01:00
bool m_bLogApiFound;
bool m_bINetBlocked;
bool m_bSharesAllowed;
bool m_bDropRights;
2021-11-13 08:28:32 +00:00
bool m_bSecurityEnhanced;
bool m_bPrivacyEnhanced;
bool m_bApplicationCompartment;
2021-10-16 16:19:51 +01:00
int m_iUnsecureDebugging;
2022-05-16 20:30:40 +01:00
quint64 m_TotalSize;
2021-10-16 16:19:51 +01:00
bool m_SuspendRecovery;
2022-05-16 20:30:40 +01:00
bool m_IsEmpty;
2022-02-05 14:09:53 +00:00
QString m_StatusStr;
2021-10-16 16:19:51 +01:00
QSet<QString> m_RecentPrograms;
2021-11-13 08:28:32 +00:00
2022-07-10 17:28:10 +01:00
EBoxTypes m_BoxType;
QRgb m_BoxColor;
2021-10-16 16:19:51 +01:00
};