4. Executar o sandbox

Nas seções anteriores, você preparou o ambiente em sandbox, a política, o executor e o Sandboxee. A próxima etapa é criar o objeto Sandbox2 e executá-lo.

Executar de forma síncrona

O sandbox pode ser executado de maneira síncrona, bloqueando assim até que haja um resultado. O snippet de código abaixo demonstra a instanciação do objeto Sandbox2 e a execução síncrona dele. Para ver um exemplo mais detalhado, consulte estático.

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
sandbox2::Result result = s2.Run();  // Synchronous
LOG(INFO) << "Result of sandbox execution: " << result.ToString();

Executar de maneira assíncrona

Você também pode executar o sandbox de forma assíncrona, para não bloquear até que haja um resultado. Isso é útil, por exemplo, ao se comunicar com o Sandboxee. O snippet de código abaixo demonstra esse caso de uso. Para acessar exemplos mais detalhados, consulte crc4 e tool.

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
if (s2.RunAsync()) {
  // Communicate with sandboxee, use s2.Kill() to kill it if needed
  // ...
}
Sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();