/* Stop and uninstall the NetHalt service * Copyright (C) 2008 Daniel Collins * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of the author nor the names of its contributors may * be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include static char *w32_error(DWORD errnum) { static char buf[1024] = {'\0'}; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, errnum, 0, buf, 1023, NULL); buf[strcspn(buf, "\r\n")] = '\0'; return buf; } static void die(char const *fmt, ...) { char msgbuf[256]; va_list argv; va_start(argv, fmt); vsnprintf(msgbuf, 256, fmt, argv); va_end(argv); MessageBox(NULL, msgbuf, NULL, MB_OK | MB_ICONERROR); exit(1); } int main(int argc, char **argv) { int n; SC_HANDLE SCMHandle, SVCHandle; SERVICE_STATUS status; FreeConsole(); SCMHandle = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if(!SCMHandle) { die("Failed to connect to SCM: %s", w32_error(GetLastError())); } SVCHandle = OpenService(SCMHandle, "NetHalt", SERVICE_ALL_ACCESS); if(!SVCHandle) { n = GetLastError(); if(n == ERROR_SERVICE_DOES_NOT_EXIST) { die("NetHalt service is not installed"); }else{ die("Failed to open service: %s", w32_error(n)); } } n = MessageBox( NULL, "Stop and uninstall the NetHalt service?", "Confirm", MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2 ); if(n == IDNO) { return 0; } ControlService(SVCHandle, SERVICE_CONTROL_STOP, &status); if(!DeleteService(SVCHandle)) { die("Failed to uninstall service: %s", w32_error(GetLastError())); } MessageBox( NULL, "NetHalt service stopped and uninstalled", "Finished", MB_OK | MB_ICONINFORMATION ); return 0; }