4. Esegui la sandbox

Nelle sezioni precedenti hai preparato l'ambiente limitato tramite sandbox, la policy e l'executor e Sandboxee. Il passaggio successivo consiste nel creare l'oggetto Sandbox2 ed eseguirlo.

Esegui in modo sincrono

La sandbox può essere eseguita in modo sincrono, bloccando l'esecuzione fino a quando non viene restituito un risultato. Lo snippet di codice riportato di seguito mostra l'istanza dell'oggetto Sandbox2 e la sua esecuzione sincrona. Per un esempio più dettagliato, vedi static.

#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();

Esegui in modo asincrono

Puoi anche eseguire la sandbox in modo asincrono, senza bloccare fino a quando non viene restituito un risultato. Ciò è utile, ad esempio, quando comunichi con il Sandboxee. Lo snippet di codice riportato di seguito mostra questo caso d'uso. Per esempi più dettagliati, vedi 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();