public void Stop(Service service) { var servicePtr = ADVANCED_API.OpenService(_managerPtr, service.Name, SERVICE_ACCESS.SERVICE_STOP); if (servicePtr == IntPtr.Zero) { var error = Marshal.GetLastWin32Error(); throw new Win32Exception(error); } //var size = Marshal.SizeOf<SERVICE_STATUS>(); //var statusPtr = Marshal.AllocHGlobal(size); //var stopped = Advapi32.ControlService(servicePtr, SERVICE_CONTROL.SERVICE_CONTROL_STOP, statusPtr); //var status = Marshal.PtrToStructure<SERVICE_STATUS>(statusPtr); //Marshal.FreeHGlobal(statusPtr); var stopped = ADVANCED_API.ControlService(servicePtr, SERVICE_CONTROL.SERVICE_CONTROL_STOP, out _); var closed = ADVANCED_API.CloseServiceHandle(servicePtr); if (!stopped || !closed) { var error = Marshal.GetLastWin32Error(); throw new Win32Exception(error); } }