예제 #1
0
        public static void Initialize(XenGuestAgentLib.XenGuestServices service)
        {
            Program.AssertOffEventThread();
            Thread thread;
            string evname;
            EventWaitHandleSecurity evsec;
            EventWaitHandleAccessRule evrule;
            string user;
            xgsc = service;

            evname = xgsc.RegisterVmsEvent();
            user = Environment.UserDomainName + "\\" + Environment.UserName;
            evvms = EventWaitHandle.OpenExisting(evname,
                EventWaitHandleRights.ReadPermissions | EventWaitHandleRights.ChangePermissions);
            evsec = evvms.GetAccessControl();
            evrule = new EventWaitHandleAccessRule(user,
                EventWaitHandleRights.Synchronize | EventWaitHandleRights.Modify,
                AccessControlType.Deny);
            evsec.RemoveAccessRule(evrule);

            evrule = new EventWaitHandleAccessRule(user,
                EventWaitHandleRights.Synchronize | EventWaitHandleRights.Modify,
                AccessControlType.Allow);
            evsec.AddAccessRule(evrule);
            evvms.SetAccessControl(evsec);

            evvms = EventWaitHandle.OpenExisting(evname);

            // Start the monitor thread
            thread = new Thread(CacheXgsMonitor);
            thread.Name = "XenClient Cache Thread";
            thread.IsBackground = true;

            thread.Start();
        }
예제 #2
0
        private static void OnAlert(XenGuestAgentLib.XenAlertType type, Array alertParams)
        {
            if (type == XenGuestAgentLib.XenAlertType.XenAlertEmpty)
            {
                alertParams = null;
            }

            else if (type == XenGuestAgentLib.XenAlertType.XenAlertError)
            {
                log.Debug("Bad JSON signal received: " + alertParams.GetValue(0));
            }

            if (Alert != null && alertParams != null)
            {
                Alert(alertParams);
            }
        }