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