4. Uruchamianie piaskownicy

W poprzednich sekcjach przygotowaliśmy środowisko piaskownicy, zasady, wykonawcę i piaskownicę. Następnym krokiem jest utworzenie obiektu Sandbox2 i jego uruchomienie.

Uruchamianie synchroniczne

Piaskownica może działać synchronicznie, blokując działanie do momentu uzyskania wyniku. Fragment kodu poniżej pokazuje tworzenie instancji obiektu Sandbox2 i jego synchroniczne wykonywanie. Bardziej szczegółowy przykład znajdziesz w sekcji statyczne.

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

Uruchom asynchronicznie

Możesz też uruchomić piaskownicę asynchronicznie, aby nie blokować jej działania do momentu uzyskania wyniku. Jest to przydatne np. podczas komunikacji z Sandboxee. Fragment kodu poniżej ilustruje ten przypadek użycia. Więcej szczegółowych przykładów znajdziesz w sekcjach crc4tool.

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