Esempio n. 1
0
        private void WaitForUsbAgentServiceToStop()
        {
            IntPtr manager = WinApi.OpenSCManager(null, null, WinApi.SC_MANAGER_ALL_ACCESS);

            if (manager == IntPtr.Zero)
            {
                throw new Error("OpenSCManager failed");
            }

            IntPtr service = IntPtr.Zero;

            try
            {
                service = WinApi.OpenService(manager, Constants.UsbAgentName, WinApi.SERVICE_ALL_ACCESS);
                if (service == IntPtr.Zero)
                {
                    throw new Error("OpenService failed");
                }

                WinApi.SERVICE_STATUS status = new WinApi.SERVICE_STATUS();

                progress.ProgressUpdate("Unplug any USB device being monitored now", 100);

                bool stopped = false;

                while (!stopped)
                {
                    if (!WinApi.QueryServiceStatus(service, ref status))
                    {
                        throw new Error("Failed to query for service status: 0x{0:x8}", Marshal.GetLastWin32Error());
                    }

                    stopped = status.dwCurrentState == WinApi.SERVICE_STOPPED;
                    if (!stopped)
                    {
                        Thread.Sleep(250);
                    }
                }
            }
            finally
            {
                if (service != IntPtr.Zero)
                {
                    WinApi.CloseServiceHandle(service);
                }

                WinApi.CloseServiceHandle(manager);
            }
        }
Esempio n. 2
0
        private void WaitForUsbAgentServiceToStop ()
        {
            IntPtr manager = WinApi.OpenSCManager (null, null, WinApi.SC_MANAGER_ALL_ACCESS);
            if (manager == IntPtr.Zero)
                throw new Error ("OpenSCManager failed");

            IntPtr service = IntPtr.Zero;

            try
            {
                service = WinApi.OpenService (manager, Constants.UsbAgentName, WinApi.SERVICE_ALL_ACCESS);
                if (service == IntPtr.Zero)
                    throw new Error ("OpenService failed");

                WinApi.SERVICE_STATUS status = new WinApi.SERVICE_STATUS ();

                progress.ProgressUpdate ("Unplug any USB device being monitored now", 100);

                bool stopped = false;

                while (!stopped)
                {
                    if (!WinApi.QueryServiceStatus (service, ref status))
                        throw new Error ("Failed to query for service status: 0x{0:x8}", Marshal.GetLastWin32Error ());

                    stopped = status.dwCurrentState == WinApi.SERVICE_STOPPED;
                    if (!stopped)
                        Thread.Sleep (250);
                }
            }
            finally
            {
                if (service != IntPtr.Zero)
                    WinApi.CloseServiceHandle (service);

                WinApi.CloseServiceHandle (manager);
            }
        }