public static void StartZygote(string vmName) { Monitor monitor; while (true) { uint id = MonitorLocator.Lookup(vmName); Manager manager = Manager.Open(); try { monitor = manager.Attach(id, true); } catch (Exception ex) { Logger.Debug("Cannot attach to the monitor: " + ex.ToString()); Thread.Sleep(500); Logger.Debug("Retrying..."); continue; } try { monitor.SendControl(Monitor.BstInputControlType.BST_INPUT_CONTROL_TYPE_START); break; } catch (Exception ex) { Logger.Debug("Cannot start Zygote: " + ex.ToString()); Thread.Sleep(500); Logger.Debug("Retrying..."); } } monitor?.Close(); }
public static void StopZygote(string vmName) { int num = 0; while (num < 3) { ++num; Monitor monitor; try { monitor = Manager.Open().Attach(MonitorLocator.Lookup(vmName), true); } catch (Exception ex) { Logger.Debug("Cannot attach to the monitor: " + ex.ToString()); Thread.Sleep(500); Logger.Debug("Retrying..."); continue; } try { monitor.SendControl(Monitor.BstInputControlType.BST_INPUT_CONTROL_TYPE_STOP); } catch (Exception ex) { Logger.Debug("Cannot stop Zygote: " + ex.ToString()); Thread.Sleep(500); Logger.Debug("Retrying..."); continue; } monitor?.Close(); break; } }
public void Attach(string vmName) { uint vmId = MonitorLocator.Lookup(vmName); this.unitId = (uint)this.random.Next(); this.vmHandle = Command.CommandAttach(vmId, this.unitId); if (this.vmHandle.IsInvalid) { throw new ApplicationException("Cannot attach to monitor: " + Marshal.GetLastWin32Error().ToString()); } }
private static void AttachMonitor() { UIHelper.RunOnUIThread((Control)VMWindow.Instance, (UIHelper.Action)(() => { if (AndroidBootUp.mManager != null) { throw new SystemException("A connection to the manager is already open"); } if (AndroidBootUp.mMonitor != null) { throw new SystemException("Another monitor is already attached"); } uint id = MonitorLocator.Lookup(MultiInstanceStrings.VmName); Manager manager = (Manager)null; Monitor monitor1 = (Monitor)null; bool verbose = false; try { verbose = AndroidBootUp.mFirstMonitorAttachAttempt; AndroidBootUp.mFirstMonitorAttachAttempt = false; manager = Manager.Open(); monitor1 = manager.Attach(id, verbose, false); } catch (Exception ex) { if (!AndroidBootUp.IsExceptionFileNotFound(ex)) { Logger.Error(ex.ToString()); } if (manager != null) { manager = (Manager)null; } } if (monitor1 == null) { return; } Monitor monitor2 = manager.Attach(id, verbose, true); if (monitor2 == null) { Logger.Info("Could not Attach to a monitor"); } AndroidBootUp.forceVideoModeChange = true; AndroidBootUp.mMonitor = monitor2; AndroidBootUp.mManager = manager; if (AndroidBootUp.HideBootProgress()) { return; } AndroidBootUp.ShowConnectedView(); })); }
public void InitCamera(string[] args) { if (args.Length != 1) { throw new SystemException("InitCamera: Should have vmName as one arg"); } string vmName = args[0]; this.keyEnableCam = RegistryManager.Instance.DefaultGuest.Camera; if (this.keyEnableCam != 1) { Logger.Info("Camera is Disabled"); } else { uint vmId = MonitorLocator.Lookup(vmName); lock (CameraManager.s_IoHandleLock) { if (CameraManager.s_IoHandle != IntPtr.Zero) { throw new SystemException("I/O handle is already open"); } Logger.Info("Attaching to monitor ID {0}", (object)vmId); CameraManager.s_IoHandle = HDPlusModule.CameraIoAttach(vmId); if (CameraManager.s_IoHandle == IntPtr.Zero) { throw new SystemException("Cannot attach for I/O", (Exception) new Win32Exception(Marshal.GetLastWin32Error())); } } this.s_fpStartStopCamera = new CameraManager.fpStartStopCamera(this.BstStartStopCamera); HDPlusModule.SetStartStopCamerCB(this.s_fpStartStopCamera); Logger.Info("Waiting for Camera messages..."); new Thread((ThreadStart)(() => { while (!this.bShutDown) { int num = HDPlusModule.CameraIoProcessMessages(CameraManager.s_IoHandle); if (num != 0) { Logger.Error("Camera: Cannot process VM messages. Error: " + num.ToString()); this.Shutdown(); } } })) { IsBackground = true }.Start(); } }