Something went wrong. Try again.
Reactos
Something went wrong. Try again.
4.1 kB · 152 lines
C
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153/* * PROJECT: ReactOS Services * LICENSE: GPL - See COPYING in the top level directory * FILE: base/applications/sc/description.c * PURPOSE: Query/Set the service description * COPYRIGHT: Copyright 2016 Eric Kohl * */
#include "sc.h"
BOOL QueryDescription(LPCTSTR ServiceName){ SC_HANDLE hManager = NULL; SC_HANDLE hService = NULL; BOOL bResult = TRUE; DWORD cbBytesNeeded = 0; LPSERVICE_DESCRIPTION pServiceDescription = NULL;
#ifdef SCDBG _tprintf(_T("service to show description - %s\n\n"), ServiceName);#endif
hManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); if (hManager == NULL) { _tprintf(_T("[SC] OpenSCManager FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
hService = OpenService(hManager, ServiceName, SERVICE_QUERY_CONFIG); if (hService == NULL) { _tprintf(_T("[SC] OpenService FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
if (!QueryServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, NULL, 0, &cbBytesNeeded)) { if (cbBytesNeeded == 0) { _tprintf(_T("[SC] QueryServiceConfig2 FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; } }
pServiceDescription = HeapAlloc(GetProcessHeap(), 0, cbBytesNeeded); if (pServiceDescription == NULL) { SetLastError(ERROR_OUTOFMEMORY); _tprintf(_T("[SC] HeapAlloc FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
if (!QueryServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, (LPBYTE)pServiceDescription, cbBytesNeeded, &cbBytesNeeded)) { _tprintf(_T("[SC] QueryServiceConfig2 FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
_tprintf(_T("[SC] QueryServiceConfig2 SUCCESS\n\n"));
_tprintf(_T("SERVICE_NAME: %s\n"), ServiceName); _tprintf(_T(" DESCRIPTION : %s\n"), (pServiceDescription->lpDescription) ? pServiceDescription->lpDescription : _T(""));
done: if (bResult == FALSE) ReportLastError();
if (pServiceDescription != NULL) HeapFree(GetProcessHeap(), 0, pServiceDescription);
if (hService) CloseServiceHandle(hService);
if (hManager) CloseServiceHandle(hManager);
return bResult;}
BOOL SetDescription(LPCTSTR ServiceName, LPCTSTR Description){ SC_HANDLE hManager = NULL; SC_HANDLE hService = NULL; BOOL bResult = TRUE; SERVICE_DESCRIPTION ServiceDescription;
#ifdef SCDBG _tprintf(_T("service to set description - %s\n\n"), ServiceName);#endif
hManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); if (hManager == NULL) { _tprintf(_T("[SC] OpenSCManager FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
hService = OpenService(hManager, ServiceName, SERVICE_CHANGE_CONFIG); if (hService == NULL) { _tprintf(_T("[SC] OpenService FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
ServiceDescription.lpDescription = (LPTSTR)Description;
if (!ChangeServiceConfig2(hService, SERVICE_CONFIG_DESCRIPTION, (LPBYTE)&ServiceDescription)) { _tprintf(_T("[SC] ChangeServiceConfig2 FAILED %lu:\n\n"), GetLastError()); bResult = FALSE; goto done; }
_tprintf(_T("[SC] ChangeServiceConfig2 SUCCESS\n\n"));
done: if (bResult == FALSE) ReportLastError();
if (hService) CloseServiceHandle(hService);
if (hManager) CloseServiceHandle(hManager);
return bResult;}