]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
Fix indentation of win32 files.
authorEric Leblond <eric@regit.org>
Mon, 24 Sep 2012 11:24:29 +0000 (13:24 +0200)
committerEric Leblond <eric@regit.org>
Tue, 25 Sep 2012 14:24:40 +0000 (16:24 +0200)
src/win32-misc.c
src/win32-service.c

index 8014c8fb13e85cc5af38f76b95f4b4d9a13d1801..80eb29cd6232272c5901ccb66786a37226104af6 100644 (file)
 
 void setenv(const char *name, const char *value, int overwrite)
 {
-       if (overwrite || NULL == getenv(name)) {
-               char *str = SCMalloc(strlen(name) + strlen(value) + 2);
-               if (unlikely(str == NULL))
-                       return;
-               snprintf(str, strlen(name) + strlen(value) + 1, "%s=%s", name, value);
-               putenv(str);
-               SCFree(str);
-       }
+    if (overwrite || NULL == getenv(name)) {
+        char *str = SCMalloc(strlen(name) + strlen(value) + 2);
+        if (unlikely(str == NULL))
+            return;
+        snprintf(str, strlen(name) + strlen(value) + 1, "%s=%s", name, value);
+        putenv(str);
+        SCFree(str);
+    }
 }
 
 void unsetenv(const char *name)
 {
-       char *str = SCMalloc(strlen(name) + 2);
-       if (unlikely(str == NULL))
-               return;
-       snprintf(str, strlen(name) + 1, "%s=", name);
-       putenv(str);
-       SCFree(str);
+    char *str = SCMalloc(strlen(name) + 2);
+    if (unlikely(str == NULL))
+        return;
+    snprintf(str, strlen(name) + 1, "%s=", name);
+    putenv(str);
+    SCFree(str);
 }
 
 const char* inet_ntop(int af, const void *src, char *dst, uint32_t cnt)
 {
-       if (af == AF_INET)
-       {
-               struct sockaddr_in in;
-               memset(&in, 0, sizeof(in));
-               in.sin_family = AF_INET;
-               memcpy(&in.sin_addr, src, sizeof(struct in_addr));
-               if (0 == getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST))
-                       return dst;
-       }
-       else if (af == AF_INET6)
-       {
-               struct sockaddr_in6 in6;
-               memset(&in6, 0, sizeof(in6));
-               in6.sin6_family = AF_INET6;
-               memcpy(&in6.sin6_addr, src, sizeof(struct in_addr6));
-               if (0 == getnameinfo((struct sockaddr *)&in6, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST))
-                       return dst;
-       }
-       return NULL;
+    if (af == AF_INET)
+    {
+        struct sockaddr_in in;
+        memset(&in, 0, sizeof(in));
+        in.sin_family = AF_INET;
+        memcpy(&in.sin_addr, src, sizeof(struct in_addr));
+        if (0 == getnameinfo((struct sockaddr *)&in, sizeof(struct sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST))
+            return dst;
+    }
+    else if (af == AF_INET6)
+    {
+        struct sockaddr_in6 in6;
+        memset(&in6, 0, sizeof(in6));
+        in6.sin6_family = AF_INET6;
+        memcpy(&in6.sin6_addr, src, sizeof(struct in_addr6));
+        if (0 == getnameinfo((struct sockaddr *)&in6, sizeof(struct sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST))
+            return dst;
+    }
+    return NULL;
 }
 
 int inet_pton(int af, const char *src, void *dst)
 {
-       struct addrinfo hints;
-       memset(&hints, 0, sizeof(struct addrinfo));
-       hints.ai_family = af;
+    struct addrinfo hints;
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = af;
 
-       struct addrinfo* result = NULL;
-       if (0 != getaddrinfo(src, NULL, &hints, &result))
-               return -1;
+    struct addrinfo* result = NULL;
+    if (0 != getaddrinfo(src, NULL, &hints, &result))
+        return -1;
 
-       if (result) {
-               if (result->ai_family == AF_INET) {
-                       struct sockaddr_in* in = (struct sockaddr_in*)result->ai_addr;
-                       memcpy(dst, &in->sin_addr, 4);
-               }
-               else if (result->ai_family == AF_INET6) {
-                       struct sockaddr_in6* in6 = (struct sockaddr_in6*)result->ai_addr;
-                       memcpy(dst, &in6->sin6_addr, 16);
-               }
-               else {
-                       freeaddrinfo(result);
-                       return -1;
-               }
+    if (result) {
+        if (result->ai_family == AF_INET) {
+            struct sockaddr_in* in = (struct sockaddr_in*)result->ai_addr;
+            memcpy(dst, &in->sin_addr, 4);
+        }
+        else if (result->ai_family == AF_INET6) {
+            struct sockaddr_in6* in6 = (struct sockaddr_in6*)result->ai_addr;
+            memcpy(dst, &in6->sin6_addr, 16);
+        }
+        else {
+            freeaddrinfo(result);
+            return -1;
+        }
 
-               freeaddrinfo(result);
-               return 1;
-       }
+        freeaddrinfo(result);
+        return 1;
+    }
 
-       return -1;
+    return -1;
 }
 
 #endif /* OS_WIN32 */
index 62d79ac5a16336618ed79c4e4ce743ec8d615114..257447e5fcd61ce46d154b9504c1c5c32117a134 100644 (file)
@@ -44,14 +44,14 @@ int main(int argc, char **argv);
  */
 int SCRunningAsService(void)
 {
-       HANDLE h = INVALID_HANDLE_VALUE;
-       if ((h = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE) {
-               SCLogInfo("Running as service: yes");
-               return 1;
-       }
-       CloseHandle(h);
-       SCLogInfo("Running as service: no");
-       return 0;
+    HANDLE h = INVALID_HANDLE_VALUE;
+    if ((h = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0)) == INVALID_HANDLE_VALUE) {
+        SCLogInfo("Running as service: yes");
+        return 1;
+    }
+    CloseHandle(h);
+    SCLogInfo("Running as service: no");
+    return 0;
 }
 
 /**
@@ -59,24 +59,24 @@ int SCRunningAsService(void)
  */
 void SCAtExitHandler(void)
 {
-       SERVICE_STATUS status = {
-               SERVICE_WIN32,
-               SERVICE_STOPPED,
-               SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
-               NO_ERROR,
-               NO_ERROR,
-               0,
-               0
-       };
-
-       SCLogInfo("Exit handler called.");
-
-       /* mark service as stopped */
-       if (!SetServiceStatus(service_status_handle, &status)) {
-               SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
-       } else {
-               SCLogInfo("Service status set to: SERVICE_STOPPED");
-       }
+    SERVICE_STATUS status = {
+        SERVICE_WIN32,
+        SERVICE_STOPPED,
+        SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
+        NO_ERROR,
+        NO_ERROR,
+        0,
+        0
+    };
+
+    SCLogInfo("Exit handler called.");
+
+    /* mark service as stopped */
+    if (!SetServiceStatus(service_status_handle, &status)) {
+        SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
+    } else {
+        SCLogInfo("Service status set to: SERVICE_STOPPED");
+    }
 }
 
 /**
@@ -84,34 +84,34 @@ void SCAtExitHandler(void)
  */
 static DWORD WINAPI SCServiceCtrlHandlerEx(DWORD code, DWORD etype, LPVOID edata, LPVOID context)
 {
-       if (code == SERVICE_CONTROL_SHUTDOWN || code == SERVICE_CONTROL_STOP) {
-               SERVICE_STATUS status = {
-                       SERVICE_WIN32,
-                       SERVICE_STOP_PENDING,
-                       SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
-                       NO_ERROR,
-                       NO_ERROR,
-                       0,
-                       0
-               };
-
-               SCLogInfo("Service control handler called with %s control code.",
-                       ((code == SERVICE_CONTROL_SHUTDOWN) ? ("SERVICE_CONTROL_SHUTDOWN") : ("SERVICE_CONTROL_STOP")));
-
-               /* mark service as stop pending */
-               if (!SetServiceStatus(service_status_handle, &status)) {
-                       SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
-               } else {
-                       SCLogInfo("Service status set to: SERVICE_STOP_PENDING");
-               }
-
-               /* mark engine as stopping */
-               EngineStop();
-
-               return NO_ERROR;
-       }
-
-       return ERROR_CALL_NOT_IMPLEMENTED;
+    if (code == SERVICE_CONTROL_SHUTDOWN || code == SERVICE_CONTROL_STOP) {
+        SERVICE_STATUS status = {
+            SERVICE_WIN32,
+            SERVICE_STOP_PENDING,
+            SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
+            NO_ERROR,
+            NO_ERROR,
+            0,
+            0
+        };
+
+        SCLogInfo("Service control handler called with %s control code.",
+                ((code == SERVICE_CONTROL_SHUTDOWN) ? ("SERVICE_CONTROL_SHUTDOWN") : ("SERVICE_CONTROL_STOP")));
+
+        /* mark service as stop pending */
+        if (!SetServiceStatus(service_status_handle, &status)) {
+            SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
+        } else {
+            SCLogInfo("Service status set to: SERVICE_STOP_PENDING");
+        }
+
+        /* mark engine as stopping */
+        EngineStop();
+
+        return NO_ERROR;
+    }
+
+    return ERROR_CALL_NOT_IMPLEMENTED;
 }
 
 /**
@@ -119,48 +119,48 @@ static DWORD WINAPI SCServiceCtrlHandlerEx(DWORD code, DWORD etype, LPVOID edata
  */
 static void WINAPI SCServiceMain(uint32_t argc, char** argv)
 {
-       SERVICE_STATUS status = {
-               SERVICE_WIN32,
-               SERVICE_RUNNING,
-               SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
-               NO_ERROR,
-               NO_ERROR,
-               0,
-               0
-       };
-
-       if ((service_status_handle = RegisterServiceCtrlHandlerEx(PROG_NAME, SCServiceCtrlHandlerEx, NULL)) == (SERVICE_STATUS_HANDLE)0) {
-               SCLogError(SC_ERR_SVC, "Can't register service control handler: %d", (int)GetLastError());
-               return;
-       }
-
-       /* register exit handler */
-       if (atexit(SCAtExitHandler)) {
-               SCLogWarning(SC_ERR_SVC, "Can't register exit handler: %d", (int)GetLastError());
-       }
-
-       /* mark service as running immediately */
-       if (!SetServiceStatus(service_status_handle, &status)) {
-               SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
-       } else {
-               SCLogInfo("Service status set to: SERVICE_RUNNING");
-       }
-
-       SCLogInfo("Entering main function...");
-
-       /* suricata initialization -> main loop -> uninitialization */
-       main(service_argc, service_argv);
-
-       SCLogInfo("Leaving main function.");
-
-       /* mark service as stopped */
-       status.dwCurrentState = SERVICE_STOPPED;
-
-       if (!SetServiceStatus(service_status_handle, &status)) {
-               SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
-       } else {
-               SCLogInfo("Service status set to: SERVICE_STOPPED");
-       }
+    SERVICE_STATUS status = {
+        SERVICE_WIN32,
+        SERVICE_RUNNING,
+        SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN,
+        NO_ERROR,
+        NO_ERROR,
+        0,
+        0
+    };
+
+    if ((service_status_handle = RegisterServiceCtrlHandlerEx(PROG_NAME, SCServiceCtrlHandlerEx, NULL)) == (SERVICE_STATUS_HANDLE)0) {
+        SCLogError(SC_ERR_SVC, "Can't register service control handler: %d", (int)GetLastError());
+        return;
+    }
+
+    /* register exit handler */
+    if (atexit(SCAtExitHandler)) {
+        SCLogWarning(SC_ERR_SVC, "Can't register exit handler: %d", (int)GetLastError());
+    }
+
+    /* mark service as running immediately */
+    if (!SetServiceStatus(service_status_handle, &status)) {
+        SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
+    } else {
+        SCLogInfo("Service status set to: SERVICE_RUNNING");
+    }
+
+    SCLogInfo("Entering main function...");
+
+    /* suricata initialization -> main loop -> uninitialization */
+    main(service_argc, service_argv);
+
+    SCLogInfo("Leaving main function.");
+
+    /* mark service as stopped */
+    status.dwCurrentState = SERVICE_STOPPED;
+
+    if (!SetServiceStatus(service_status_handle, &status)) {
+        SCLogWarning(SC_ERR_SVC, "Can't set service status: %d", (int)GetLastError());
+    } else {
+        SCLogInfo("Service status set to: SERVICE_STOPPED");
+    }
 }
 
 /**
@@ -171,34 +171,34 @@ static void WINAPI SCServiceMain(uint32_t argc, char** argv)
  */
 int SCServiceInit(int argc, char **argv)
 {
-       SERVICE_TABLE_ENTRY     DispatchTable[] = {
-               {PROG_NAME, (LPSERVICE_MAIN_FUNCTION) SCServiceMain},
-               {NULL, NULL}
-       };
+    SERVICE_TABLE_ENTRY        DispatchTable[] = {
+        {PROG_NAME, (LPSERVICE_MAIN_FUNCTION) SCServiceMain},
+        {NULL, NULL}
+    };
 
-       /* continue with suricata initialization */
-       if (service_initialized) {
-               SCLogWarning(SC_ERR_SVC, "Service is already initialized.");
-               return 0;
-       }
+    /* continue with suricata initialization */
+    if (service_initialized) {
+        SCLogWarning(SC_ERR_SVC, "Service is already initialized.");
+        return 0;
+    }
 
-       /* save args */
-       service_argc = argc;
-       service_argv = argv;
+    /* save args */
+    service_argc = argc;
+    service_argv = argv;
 
-       service_initialized = 1;
+    service_initialized = 1;
 
-       SCLogInfo("Entering service control dispatcher...");
+    SCLogInfo("Entering service control dispatcher...");
 
-       if (!StartServiceCtrlDispatcher(DispatchTable)) {
-               /* exit with failure */
-               exit(EXIT_FAILURE);
-       }
+    if (!StartServiceCtrlDispatcher(DispatchTable)) {
+        /* exit with failure */
+        exit(EXIT_FAILURE);
+    }
 
-       SCLogInfo("Leaving service control dispatcher.");
+    SCLogInfo("Leaving service control dispatcher.");
 
-       /* exit with success */
-       exit(EXIT_SUCCESS);
+    /* exit with success */
+    exit(EXIT_SUCCESS);
 }
 
 /**
@@ -209,67 +209,67 @@ int SCServiceInit(int argc, char **argv)
  */
 int SCServiceInstall(int argc, char **argv)
 {
-       char path[2048];
-       SC_HANDLE service = NULL;
-       SC_HANDLE scm = NULL;
-       int ret = -1;
-       int i = 0;
-
-       do {
-               memset(path, 0, sizeof(path));
-
-               if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){
-                       SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError());
-                       break;
-               }
-
-               /* skip name of binary itself */
-               for (i = 1; i < argc; i++) {
-                       if ((strlen(argv[i]) <= strlen("--service-install")) && (strncmp("--service-install", argv[i], strlen(argv[i])) == 0)) {
-                               continue;
-                       }
-                       strlcat(path, " ", sizeof(path) - strlen(path) - 1);
-                       strlcat(path, argv[i], sizeof(path) - strlen(path) - 1);
-               }
-
-               if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
-                       SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
-                       break;
-               }
-
-               service = CreateService(
-                                               scm,
-                                               PROG_NAME,
-                                               PROG_NAME,
-                                               SERVICE_ALL_ACCESS,
-                                               SERVICE_WIN32_OWN_PROCESS,
-                                               SERVICE_DEMAND_START,
-                                               SERVICE_ERROR_NORMAL,
-                                               path,
-                                               NULL,
-                                               NULL,
-                                               NULL,
-                                               NULL,
-                                               NULL);
-
-               if (service == NULL) {
-                       SCLogError(SC_ERR_SVC, "Can't create service: %d", (int)GetLastError());
-                       break;
-               }
-
-               ret = 0;
-
-       } while(0);
-
-       if (service) {
-               CloseServiceHandle(service);
-       }
-
-       if (scm) {
-               CloseServiceHandle(scm);
-       }
-
-       return ret;
+    char path[2048];
+    SC_HANDLE service = NULL;
+    SC_HANDLE scm = NULL;
+    int ret = -1;
+    int i = 0;
+
+    do {
+        memset(path, 0, sizeof(path));
+
+        if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){
+            SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError());
+            break;
+        }
+
+        /* skip name of binary itself */
+        for (i = 1; i < argc; i++) {
+            if ((strlen(argv[i]) <= strlen("--service-install")) && (strncmp("--service-install", argv[i], strlen(argv[i])) == 0)) {
+                continue;
+            }
+            strlcat(path, " ", sizeof(path) - strlen(path) - 1);
+            strlcat(path, argv[i], sizeof(path) - strlen(path) - 1);
+        }
+
+        if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
+            SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
+            break;
+        }
+
+        service = CreateService(
+                scm,
+                PROG_NAME,
+                PROG_NAME,
+                SERVICE_ALL_ACCESS,
+                SERVICE_WIN32_OWN_PROCESS,
+                SERVICE_DEMAND_START,
+                SERVICE_ERROR_NORMAL,
+                path,
+                NULL,
+                NULL,
+                NULL,
+                NULL,
+                NULL);
+
+        if (service == NULL) {
+            SCLogError(SC_ERR_SVC, "Can't create service: %d", (int)GetLastError());
+            break;
+        }
+
+        ret = 0;
+
+    } while(0);
+
+    if (service) {
+        CloseServiceHandle(service);
+    }
+
+    if (scm) {
+        CloseServiceHandle(scm);
+    }
+
+    return ret;
 }
 
 /**
@@ -280,50 +280,50 @@ int SCServiceInstall(int argc, char **argv)
  */
 int SCServiceRemove(int argc, char **argv)
 {
-       SERVICE_STATUS status;
-       SC_HANDLE service = NULL;
-       SC_HANDLE scm = NULL;
-       int ret = -1;
-
-       do {
-               if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
-                       SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
-                       break;
-               }
-
-               if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) {
-                       SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError());
-                       break;
-               }
-
-               if (!QueryServiceStatus(service, &status)) {
-                       SCLogError(SC_ERR_SVC, "Can't query service status: %d", (int)GetLastError());
-                       break;
-               }
-
-               if (status.dwCurrentState != SERVICE_STOPPED) {
-                       SCLogError(SC_ERR_SVC, "Service isn't in stopped state: %d", (int)GetLastError());
-                       break;
-               }
-
-               if (!DeleteService(service)) {
-                       SCLogError(SC_ERR_SVC, "Can't delete service: %d", (int)GetLastError());
-                       break;
-               }
-
-               ret = 0;
-
-       } while(0);
-
-       if (service) {
-               CloseServiceHandle(service);
-       }
-
-       if (scm) {
-               CloseServiceHandle(scm);
-       }
-
-       return ret;
+    SERVICE_STATUS status;
+    SC_HANDLE service = NULL;
+    SC_HANDLE scm = NULL;
+    int ret = -1;
+
+    do {
+        if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
+            SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
+            break;
+        }
+
+        if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) {
+            SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError());
+            break;
+        }
+
+        if (!QueryServiceStatus(service, &status)) {
+            SCLogError(SC_ERR_SVC, "Can't query service status: %d", (int)GetLastError());
+            break;
+        }
+
+        if (status.dwCurrentState != SERVICE_STOPPED) {
+            SCLogError(SC_ERR_SVC, "Service isn't in stopped state: %d", (int)GetLastError());
+            break;
+        }
+
+        if (!DeleteService(service)) {
+            SCLogError(SC_ERR_SVC, "Can't delete service: %d", (int)GetLastError());
+            break;
+        }
+
+        ret = 0;
+
+    } while(0);
+
+    if (service) {
+        CloseServiceHandle(service);
+    }
+
+    if (scm) {
+        CloseServiceHandle(scm);
+    }
+
+    return ret;
 }
 
 /**
@@ -334,61 +334,61 @@ int SCServiceRemove(int argc, char **argv)
  */
 int SCServiceChangeParams(int argc, char **argv)
 {
-       char path[2048];
-       SC_HANDLE service = NULL;
-       SC_HANDLE scm = NULL;
-       int ret = -1;
-       int i = 0;
-
-       do {
-               memset(path, 0, sizeof(path));
-
-               if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){
-                       SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError());
-                       break;
-               }
-
-               /* skip name of binary itself */
-               for (i = 1; i < argc; i++) {
-                       if ((strlen(argv[i]) <= strlen("--service-change-params")) && (strncmp("--service-change-params", argv[i], strlen(argv[i])) == 0)) {
-                               continue;
-                       }
-                       strlcat(path, " ", sizeof(path) - strlen(path) - 1);
-                       strlcat(path, argv[i], sizeof(path) - strlen(path) - 1);
-               }
-
-               if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
-                       SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
-                       break;
-               }
-
-               if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) {
-                       SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError());
-                       break;
-               }
-
-               if (!ChangeServiceConfig(
-                               service,
-                               SERVICE_WIN32_OWN_PROCESS,
-                               SERVICE_DEMAND_START,
-                               SERVICE_ERROR_NORMAL,
-                               path,
-                               NULL,
-                               NULL,
-                               NULL,
-                               NULL,
-                               NULL,
-                               PROG_NAME))
-               {
-                       SCLogError(SC_ERR_SVC, "Can't change service configuration: %d", (int)GetLastError());
-                       break;
-               }
-
-               ret = 0;
-
-       } while(0);
-
-       return ret;
+    char path[2048];
+    SC_HANDLE service = NULL;
+    SC_HANDLE scm = NULL;
+    int ret = -1;
+    int i = 0;
+
+    do {
+        memset(path, 0, sizeof(path));
+
+        if (GetModuleFileName(NULL, path, MAX_PATH) == 0 ){
+            SCLogError(SC_ERR_SVC, "Can't get path to service binary: %d", (int)GetLastError());
+            break;
+        }
+
+        /* skip name of binary itself */
+        for (i = 1; i < argc; i++) {
+            if ((strlen(argv[i]) <= strlen("--service-change-params")) && (strncmp("--service-change-params", argv[i], strlen(argv[i])) == 0)) {
+                continue;
+            }
+            strlcat(path, " ", sizeof(path) - strlen(path) - 1);
+            strlcat(path, argv[i], sizeof(path) - strlen(path) - 1);
+        }
+
+        if ((scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)) == NULL) {
+            SCLogError(SC_ERR_SVC, "Can't open SCM: %d", (int)GetLastError());
+            break;
+        }
+
+        if ((service = OpenService(scm, PROG_NAME, SERVICE_ALL_ACCESS)) == NULL) {
+            SCLogError(SC_ERR_SVC, "Can't open service: %d", (int)GetLastError());
+            break;
+        }
+
+        if (!ChangeServiceConfig(
+                    service,
+                    SERVICE_WIN32_OWN_PROCESS,
+                    SERVICE_DEMAND_START,
+                    SERVICE_ERROR_NORMAL,
+                    path,
+                    NULL,
+                    NULL,
+                    NULL,
+                    NULL,
+                    NULL,
+                    PROG_NAME))
+        {
+            SCLogError(SC_ERR_SVC, "Can't change service configuration: %d", (int)GetLastError());
+            break;
+        }
+
+        ret = 0;
+
+    } while(0);
+
+    return ret;
 }
 
 #endif /* OS_WIN32 */