Esempio n. 1
0
 public static async Task <IVirtualBox> Init() => await Task.Run(() =>
 {
     try
     {
         //Environment.SetEnvironmentVariable("VBOX_HOME", @"C:\Program Files\Oracle\VirtualBox\");
         //TODO: Only finds the VBoxVMM.dll when placed in the VirtualBox dir (regardless of working dir)
         //Even then there are hardening issues: VERR_SUPDRV_NOT_BUDDING_VM_PROCESS_1
         //https://www.virtualbox.org/svn/vbox/trunk/src/VBox/HostDrivers/Support/win/SUPDrv-win.cpp
         vbc      = new VirtualBoxClientClass();
         var vbox = vbc.VirtualBox;
         RTR3InitExe(0, "", 0);
         var ses     = vbc.Session;
         var machine = vbox.Machines.GetValue(0) as IMachine;
         ses.Name    = "minecraft";
         machine.LockMachine(ses, LockType.LockType_VM);
         Console.WriteLine("Locking...");
         while (ses.State != SessionState.SessionState_Locked)
         {
             ;
         }
         Console.WriteLine("Locked");
         machine = ses.Machine;
         Console.WriteLine("Powering up...");
         ses.Console.PowerUp().WaitForCompletion(10000);
         Console.WriteLine("Framebuffer attach");
         ses.Console.Display.AttachFramebuffer(0, new VBFB(ses.Console.Display));
         return(vbox);
     }
     catch (Exception e)
     {
         Console.WriteLine(e);
         Console.ReadLine();
         return(null);
     }
 });
 public VirtualBoxManager()
 {
     vbox = new VirtualBoxClient();
     
     // Initialize VirtualBox
     try
     {
         vbox.VirtualBox.FindMachine("Red virtual machine");
     }
     catch
     {
         // do nothing
     }
 }
Esempio n. 3
0
        public static void Start(IVDController controller)
        {
            //var rrr = Utils.GetAppInfo($"-input tstimgs\\upgradeelibad.png -name upgradegood -match data\\check\\upgradeeligood.png 10000 -name upgradebad -match data\\check\\upgradeelibad.png 10000");
            //SwitchAccount.CheckAccount();
            //TestAccounts(); //TODO DEBUG REMOVE THIS
            //return;
            controller.Log("info", "Starting vm");
            Utils.executeVBoxMngr($"startvm {Utils.vmname}");
            controller.Log("info", "VmStarted, allocate machine");
            var vbox = new VirtualBox.VirtualBox();

            VirtualBox.IMachine machine    = vbox.FindMachine(Utils.vmname);
            VirtualBoxClient    vboxclient = new VirtualBoxClient();
            var session = vboxclient.Session;

            try
            {
                controller.Log("info", "found machine, lock machine");
                machine.LockMachine(session, LockType.LockType_Shared);
                var          console     = session.Console;
                IEventSource es          = console.EventSource;
                var          listener    = es.CreateListener();
                Array        listenTYpes = new VBoxEventType[] { VBoxEventType.VBoxEventType_InputEvent };
                es.RegisterListener(listener, listenTYpes, 0);
                controller.Log("info", "locked machine, entry try");
                try
                {
                    //session.Console.Display.SetSeamlessMode(1);
                    var  display = console.Display;
                    uint sw, sh, bpp;
                    int  xorig, yorig;
                    GuestMonitorStatus gmstat;
                    display.GetScreenResolution(0, out sw, out sh, out bpp, out xorig, out yorig, out gmstat);
                    //Console.WriteLine($"sw={sw} {sh} bpp {bpp} xorig={xorig} yorig={yorig}");

                    byte[] buf = new byte[sw * sh * bpp / 8];
                    //display.TakeScreenShot(0, ref buf[0], sw, sh, BitmapFormat.BitmapFormat_PNG);

                    var mouse    = session.Console.Mouse;
                    var keyboard = session.Console.Keyboard;
                    //MouseMouseTo(mouse, 515, 660);
                    //MouseClick(mouse);
                    //MouseMouseTo(mouse, 360, 156);
                    //MouseClick(mouse);
                    controller.Log("info", "main loop");
                    while (true)
                    {
                        try
                        {
                            checkLoop(new ProcessingContext(mouse, keyboard, controller));
                        } catch (SwitchProcessingActionException)
                        {
                            continue;
                        }
                        break;
                    }
                }
                finally
                {
                    es.UnregisterListener(listener);
                }
            }
            catch (Exception e)
            {
                controller.Log("error", e.ToString());
            }
            finally
            {
                if (session.State == SessionState.SessionState_Locked)
                {
                    session.UnlockMachine();
                }
                controller.Log("info", "powering off");
                Utils.executeVBoxMngr($"controlvm {Utils.vmname} poweroff");
                controller.KillVBox();
                controller.Log("info", "sleeping 10s after kill vbox");
                controller.Sleep(10000);
                controller.Log("info", "vbox killed, poweroff");
            }
            //Console.WriteLine(machine.VideoCaptureWidth);
        }