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); } }
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); } }