From df7b108fa6ebe72aed035aa178168e720c094e71 Mon Sep 17 00:00:00 2001 From: osmiy Date: Wed, 15 Nov 2006 07:36:42 +0000 Subject: - fixed 'service_status[*]' for WinXX system (Eugene) git-svn-id: svn://svn.zabbix.com/trunk@3478 97f52cf1-0a1b-0410-bd0e-c28be96e8082 --- src/libs/zbxsysinfo/win32/services.c | 62 +++++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 25 deletions(-) (limited to 'src/libs') diff --git a/src/libs/zbxsysinfo/win32/services.c b/src/libs/zbxsysinfo/win32/services.c index 39288b63..110692de 100755 --- a/src/libs/zbxsysinfo/win32/services.c +++ b/src/libs/zbxsysinfo/win32/services.c @@ -28,8 +28,12 @@ int SERVICE_STATE(const char *cmd, const char *param, unsigned flags, AGENT_RESU mgr, service; + char display_name[MAX_STRING_LEN]; char service_name[MAX_STRING_LEN]; + unsigned long + max_len_display_name = MAX_STRING_LEN; + int ret = SYSINFO_RET_FAIL; int i; @@ -38,11 +42,11 @@ int SERVICE_STATE(const char *cmd, const char *param, unsigned flags, AGENT_RESU return SYSINFO_RET_FAIL; } - if(get_param(param, 1, service_name, sizeof(service_name)) != 0) + if(get_param(param, 1, display_name, sizeof(display_name)) != 0) { - service_name[0] = '\0'; + display_name[0] = '\0'; } - if(service_name[0] == '\0') + if(display_name[0] == '\0') { return SYSINFO_RET_FAIL; } @@ -53,37 +57,45 @@ int SERVICE_STATE(const char *cmd, const char *param, unsigned flags, AGENT_RESU return SYSINFO_RET_OK; } - if(NULL != (service = OpenService(mgr,service_name,SERVICE_QUERY_STATUS)) ) + if(0 == GetServiceKeyName(mgr, display_name, service_name, &max_len_display_name)) { - SERVICE_STATUS status; - - if (QueryServiceStatus(service, &status)) + CloseServiceHandle(mgr); + return SYSINFO_RET_FAIL; + } + else + { + if(NULL != (service = OpenService(mgr,service_name,SERVICE_QUERY_STATUS)) ) { - static DWORD states[7] = + SERVICE_STATUS status; + + if (QueryServiceStatus(service, &status)) { - SERVICE_RUNNING, - SERVICE_PAUSED, - SERVICE_START_PENDING, - SERVICE_PAUSE_PENDING, - SERVICE_CONTINUE_PENDING, - SERVICE_STOP_PENDING, - SERVICE_STOPPED - }; + static DWORD states[7] = + { + SERVICE_RUNNING, + SERVICE_PAUSED, + SERVICE_START_PENDING, + SERVICE_PAUSE_PENDING, + SERVICE_CONTINUE_PENDING, + SERVICE_STOP_PENDING, + SERVICE_STOPPED + }; - for(i=0; i < 7 && status.dwCurrentState != states[i]; i++); - - SET_UI64_RESULT(result, i); + for(i=0; i < 7 && status.dwCurrentState != states[i]; i++); + + SET_UI64_RESULT(result, i); + } + else + { + SET_UI64_RESULT(result, 255); + } + + CloseServiceHandle(service); } else { SET_UI64_RESULT(result, 255); } - - CloseServiceHandle(service); - } - else - { - SET_UI64_RESULT(result, 255); } CloseServiceHandle(mgr); -- cgit