#ifndef SANDBOX_WIN_SRC_APP_CONTAINER_H_
#define SANDBOX_WIN_SRC_APP_CONTAINER_H_
#include <vector>
#include "base/win/security_descriptor.h"
#include "base/win/sid.h"
#include "base/win/windows_types.h"
#include "sandbox/win/src/security_capabilities.h"
namespace sandbox {
enum AppContainerType { kNone, kDerived, kProfile, kLowbox };
class [[clang::lto_visibility_public]] AppContainer {
public:
virtual bool AccessCheck(const wchar_t* object_name,
base::win::SecurityObjectType object_type,
DWORD desired_access,
DWORD* granted_access,
BOOL* access_status) = 0;
virtual void AddCapability(const wchar_t* capability_name) = 0;
virtual void AddCapability(base::win::WellKnownCapability capability) = 0;
virtual bool AddCapabilitySddl(const wchar_t* sddl_sid) = 0;
virtual void AddImpersonationCapability(const wchar_t* capability_name) = 0;
virtual void AddImpersonationCapability(
base::win::WellKnownCapability capability) = 0;
virtual bool AddImpersonationCapabilitySddl(const wchar_t* sddl_sid) = 0;
virtual void SetEnableLowPrivilegeAppContainer(bool enable) = 0;
virtual bool GetEnableLowPrivilegeAppContainer() = 0;
virtual AppContainerType GetAppContainerType() = 0;
virtual const std::vector<base::win::Sid>& GetCapabilities() = 0;
virtual const std::vector<base::win::Sid>& GetImpersonationCapabilities() = 0;
virtual std::unique_ptr<SecurityCapabilities> GetSecurityCapabilities() = 0;
};
}
#endif