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();
            }
        }
Beispiel #2
0
 public static extern void SetStartStopCamerCB(CameraManager.fpStartStopCamera func);