Author: tfaber Date: Sat Jun 29 11:10:28 2013 New Revision: 59357 URL: http://svn.reactos.org/svn/reactos?rev=59357&view=rev Log: [SVCHOST] - Convert tabs to spaces. No code changes.
Modified: trunk/reactos/base/services/svchost/svchost.c trunk/reactos/base/services/svchost/svchost.h Modified: trunk/reactos/base/services/svchost/svchost.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/svchost/svchost.c?rev=59357&r1=59356&r2=59357&view=diff ============================================================================== --- trunk/reactos/base/services/svchost/svchost.c [iso-8859-1] (original) +++ trunk/reactos/base/services/svchost/svchost.c [iso-8859-1] Sat Jun 29 11:10:28 2013 @@ -1,9 +1,9 @@ /* - * PROJECT: ReactOS SvcHost - * LICENSE: GPL - See COPYING in the top level directory - * FILE: /base/services/svchost/svchost.c - * PURPOSE: Provide dll service loader - * PROGRAMMERS: Gregor Brunmar (gregor.brun...@home.se) + * PROJECT: ReactOS SvcHost + * LICENSE: GPL - See COPYING in the top level directory + * FILE: /base/services/svchost/svchost.c + * PURPOSE: Provide dll service loader + * PROGRAMMERS: Gregor Brunmar (gregor.brun...@home.se) */ /* INCLUDES ******************************************************************/ @@ -15,12 +15,12 @@ /* DEFINES *******************************************************************/ -static LPCTSTR SVCHOST_REG_KEY = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SvcHost"); -static LPCTSTR SERVICE_KEY = _T("SYSTEM\\CurrentControlSet\\Services\\"); -static LPCTSTR PARAMETERS_KEY = _T("\\Parameters"); - -#define SERVICE_KEY_LENGTH _tcslen(SERVICE_KEY); -#define REG_MAX_DATA_SIZE 2048 +static LPCTSTR SVCHOST_REG_KEY = _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SvcHost"); +static LPCTSTR SERVICE_KEY = _T("SYSTEM\\CurrentControlSet\\Services\\"); +static LPCTSTR PARAMETERS_KEY = _T("\\Parameters"); + +#define SERVICE_KEY_LENGTH _tcslen(SERVICE_KEY); +#define REG_MAX_DATA_SIZE 2048 static PSERVICE FirstService = NULL; @@ -28,127 +28,127 @@ BOOL PrepareService(LPCTSTR ServiceName) { - HKEY hServiceKey; - TCHAR ServiceKeyBuffer[MAX_PATH + 1]; - DWORD LeftOfBuffer = sizeof(ServiceKeyBuffer) / sizeof(ServiceKeyBuffer[0]); - DWORD KeyType; - PTSTR Buffer = NULL; - DWORD BufferSize = MAX_PATH + 1; - LONG RetVal; - HINSTANCE hServiceDll; - TCHAR DllPath[MAX_PATH + 2]; /* See MSDN on ExpandEnvironmentStrings() for ANSI strings for more details on + 2 */ - LPSERVICE_MAIN_FUNCTION ServiceMainFunc; - PSERVICE Service; - - /* Compose the registry path to the service's "Parameter" key */ - _tcsncpy(ServiceKeyBuffer, SERVICE_KEY, LeftOfBuffer); - LeftOfBuffer -= _tcslen(SERVICE_KEY); - _tcsncat(ServiceKeyBuffer, ServiceName, LeftOfBuffer); - LeftOfBuffer -= _tcslen(ServiceName); - _tcsncat(ServiceKeyBuffer, PARAMETERS_KEY, LeftOfBuffer); - LeftOfBuffer -= _tcslen(PARAMETERS_KEY); - - if (LeftOfBuffer < 0) - { - DPRINT1("Buffer overflow for service name: '%s'\n", ServiceName); - return FALSE; - } - - /* Open the service registry key to find the dll name */ - if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, ServiceKeyBuffer, 0, KEY_READ, &hServiceKey)) - { - DPRINT1("Could not open service key (%s)\n", ServiceKeyBuffer); - return FALSE; - } - - do - { - if (Buffer) - HeapFree(GetProcessHeap(), 0, Buffer); - - Buffer = HeapAlloc(GetProcessHeap(), 0, BufferSize); - if (NULL == Buffer) - { - DPRINT1("Not enough memory for service: %s\n", ServiceName); - return FALSE; - } - - RetVal = RegQueryValueEx(hServiceKey, _T("ServiceDll"), NULL, &KeyType, (LPBYTE)Buffer, &BufferSize); - - } while (ERROR_MORE_DATA == RetVal); - - - RegCloseKey(hServiceKey); - - if (ERROR_SUCCESS != RetVal || 0 == BufferSize) - { - DPRINT1("Could not read 'ServiceDll' value from service: %s, ErrorCode: 0x%x\n", ServiceName, RetVal); - HeapFree(GetProcessHeap(), 0, Buffer); - return FALSE; - } - - /* Convert possible %SystemRoot% to a real path */ - BufferSize = ExpandEnvironmentStrings(Buffer, DllPath, _countof(DllPath)); - if (0 == BufferSize) - { - DPRINT1("Invalid ServiceDll path: %s\n", Buffer); - HeapFree(GetProcessHeap(), 0, Buffer); - return FALSE; - } - - HeapFree(GetProcessHeap(), 0, Buffer); - - /* Load the service dll */ - DPRINT("Trying to load dll\n"); - hServiceDll = LoadLibrary(DllPath); - - if (NULL == hServiceDll) - { - DPRINT1("Unable to load ServiceDll: %s, ErrorCode: %u\n", DllPath, GetLastError()); - return FALSE; - } - - ServiceMainFunc = (LPSERVICE_MAIN_FUNCTION)GetProcAddress(hServiceDll, "ServiceMain"); - - /* Allocate a service node in the linked list */ - Service = HeapAlloc(GetProcessHeap(), 0, sizeof(SERVICE)); - if (NULL == Service) - { - DPRINT1("Not enough memory for service: %s\n", ServiceName); - return FALSE; - } - - memset(Service, 0, sizeof(SERVICE)); - Service->Name = HeapAlloc(GetProcessHeap(), 0, (_tcslen(ServiceName)+1) * sizeof(TCHAR)); - if (NULL == Service->Name) - { - DPRINT1("Not enough memory for service: %s\n", ServiceName); - HeapFree(GetProcessHeap(), 0, Service); - return FALSE; - } - _tcscpy(Service->Name, ServiceName); - - Service->hServiceDll = hServiceDll; - Service->ServiceMainFunc = ServiceMainFunc; - - Service->Next = FirstService; - FirstService = Service; - - return TRUE; + HKEY hServiceKey; + TCHAR ServiceKeyBuffer[MAX_PATH + 1]; + DWORD LeftOfBuffer = sizeof(ServiceKeyBuffer) / sizeof(ServiceKeyBuffer[0]); + DWORD KeyType; + PTSTR Buffer = NULL; + DWORD BufferSize = MAX_PATH + 1; + LONG RetVal; + HINSTANCE hServiceDll; + TCHAR DllPath[MAX_PATH + 2]; /* See MSDN on ExpandEnvironmentStrings() for ANSI strings for more details on + 2 */ + LPSERVICE_MAIN_FUNCTION ServiceMainFunc; + PSERVICE Service; + + /* Compose the registry path to the service's "Parameter" key */ + _tcsncpy(ServiceKeyBuffer, SERVICE_KEY, LeftOfBuffer); + LeftOfBuffer -= _tcslen(SERVICE_KEY); + _tcsncat(ServiceKeyBuffer, ServiceName, LeftOfBuffer); + LeftOfBuffer -= _tcslen(ServiceName); + _tcsncat(ServiceKeyBuffer, PARAMETERS_KEY, LeftOfBuffer); + LeftOfBuffer -= _tcslen(PARAMETERS_KEY); + + if (LeftOfBuffer < 0) + { + DPRINT1("Buffer overflow for service name: '%s'\n", ServiceName); + return FALSE; + } + + /* Open the service registry key to find the dll name */ + if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, ServiceKeyBuffer, 0, KEY_READ, &hServiceKey)) + { + DPRINT1("Could not open service key (%s)\n", ServiceKeyBuffer); + return FALSE; + } + + do + { + if (Buffer) + HeapFree(GetProcessHeap(), 0, Buffer); + + Buffer = HeapAlloc(GetProcessHeap(), 0, BufferSize); + if (NULL == Buffer) + { + DPRINT1("Not enough memory for service: %s\n", ServiceName); + return FALSE; + } + + RetVal = RegQueryValueEx(hServiceKey, _T("ServiceDll"), NULL, &KeyType, (LPBYTE)Buffer, &BufferSize); + + } while (ERROR_MORE_DATA == RetVal); + + + RegCloseKey(hServiceKey); + + if (ERROR_SUCCESS != RetVal || 0 == BufferSize) + { + DPRINT1("Could not read 'ServiceDll' value from service: %s, ErrorCode: 0x%x\n", ServiceName, RetVal); + HeapFree(GetProcessHeap(), 0, Buffer); + return FALSE; + } + + /* Convert possible %SystemRoot% to a real path */ + BufferSize = ExpandEnvironmentStrings(Buffer, DllPath, _countof(DllPath)); + if (0 == BufferSize) + { + DPRINT1("Invalid ServiceDll path: %s\n", Buffer); + HeapFree(GetProcessHeap(), 0, Buffer); + return FALSE; + } + + HeapFree(GetProcessHeap(), 0, Buffer); + + /* Load the service dll */ + DPRINT("Trying to load dll\n"); + hServiceDll = LoadLibrary(DllPath); + + if (NULL == hServiceDll) + { + DPRINT1("Unable to load ServiceDll: %s, ErrorCode: %u\n", DllPath, GetLastError()); + return FALSE; + } + + ServiceMainFunc = (LPSERVICE_MAIN_FUNCTION)GetProcAddress(hServiceDll, "ServiceMain"); + + /* Allocate a service node in the linked list */ + Service = HeapAlloc(GetProcessHeap(), 0, sizeof(SERVICE)); + if (NULL == Service) + { + DPRINT1("Not enough memory for service: %s\n", ServiceName); + return FALSE; + } + + memset(Service, 0, sizeof(SERVICE)); + Service->Name = HeapAlloc(GetProcessHeap(), 0, (_tcslen(ServiceName)+1) * sizeof(TCHAR)); + if (NULL == Service->Name) + { + DPRINT1("Not enough memory for service: %s\n", ServiceName); + HeapFree(GetProcessHeap(), 0, Service); + return FALSE; + } + _tcscpy(Service->Name, ServiceName); + + Service->hServiceDll = hServiceDll; + Service->ServiceMainFunc = ServiceMainFunc; + + Service->Next = FirstService; + FirstService = Service; + + return TRUE; } VOID FreeServices(VOID) { - while (FirstService) - { - PSERVICE Service = FirstService; - FirstService = Service->Next; - - FreeLibrary(Service->hServiceDll); - - HeapFree(GetProcessHeap(), 0, Service->Name); - HeapFree(GetProcessHeap(), 0, Service); - } + while (FirstService) + { + PSERVICE Service = FirstService; + FirstService = Service->Next; + + FreeLibrary(Service->hServiceDll); + + HeapFree(GetProcessHeap(), 0, Service->Name); + HeapFree(GetProcessHeap(), 0, Service); + } } /* @@ -156,107 +156,107 @@ */ DWORD LoadServiceCategory(LPCTSTR ServiceCategory) { - HKEY hServicesKey; - DWORD KeyType; - DWORD BufferSize = REG_MAX_DATA_SIZE; - TCHAR Buffer[REG_MAX_DATA_SIZE]; - LPCTSTR ServiceName; - DWORD BufferIndex = 0; - DWORD NrOfServices = 0; - - /* Get all the services in this category */ - if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, SVCHOST_REG_KEY, 0, KEY_READ, &hServicesKey)) - { - DPRINT1("Could not open service category: %s\n", ServiceCategory); - return 0; - } - - if (ERROR_SUCCESS != RegQueryValueEx(hServicesKey, ServiceCategory, NULL, &KeyType, (LPBYTE)Buffer, &BufferSize)) - { - DPRINT1("Could not open service category (2): %s\n", ServiceCategory); - RegCloseKey(hServicesKey); - return 0; - } - - /* Clean up */ - RegCloseKey(hServicesKey); - - /* Load services in the category */ - ServiceName = Buffer; - while (_T('\0') != ServiceName[0]) - { - size_t Length; - - Length = _tcslen(ServiceName); - if (0 == Length) - break; - - if (TRUE == PrepareService(ServiceName)) - ++NrOfServices; - - BufferIndex += Length + 1; - - ServiceName = &Buffer[BufferIndex]; - } - - return NrOfServices; + HKEY hServicesKey; + DWORD KeyType; + DWORD BufferSize = REG_MAX_DATA_SIZE; + TCHAR Buffer[REG_MAX_DATA_SIZE]; + LPCTSTR ServiceName; + DWORD BufferIndex = 0; + DWORD NrOfServices = 0; + + /* Get all the services in this category */ + if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, SVCHOST_REG_KEY, 0, KEY_READ, &hServicesKey)) + { + DPRINT1("Could not open service category: %s\n", ServiceCategory); + return 0; + } + + if (ERROR_SUCCESS != RegQueryValueEx(hServicesKey, ServiceCategory, NULL, &KeyType, (LPBYTE)Buffer, &BufferSize)) + { + DPRINT1("Could not open service category (2): %s\n", ServiceCategory); + RegCloseKey(hServicesKey); + return 0; + } + + /* Clean up */ + RegCloseKey(hServicesKey); + + /* Load services in the category */ + ServiceName = Buffer; + while (_T('\0') != ServiceName[0]) + { + size_t Length; + + Length = _tcslen(ServiceName); + if (0 == Length) + break; + + if (TRUE == PrepareService(ServiceName)) + ++NrOfServices; + + BufferIndex += Length + 1; + + ServiceName = &Buffer[BufferIndex]; + } + + return NrOfServices; } int _tmain (int argc, LPTSTR argv []) { - DWORD NrOfServices; - LPSERVICE_TABLE_ENTRY ServiceTable; - - if (argc < 3) - { - /* MS svchost.exe doesn't seem to print help, should we? */ - return 0; - } - - if (_tcscmp(argv[1], _T("-k")) != 0) - { - /* For now, we only handle "-k" */ - return 0; - } - - NrOfServices = LoadServiceCategory(argv[2]); - - DPRINT("NrOfServices: %lu\n", NrOfServices); - if (0 == NrOfServices) - return 0; - - ServiceTable = HeapAlloc(GetProcessHeap(), 0, sizeof(SERVICE_TABLE_ENTRY) * (NrOfServices + 1)); - - if (NULL != ServiceTable) - { - DWORD i; - PSERVICE Service = FirstService; - - /* Fill the service table */ - for (i = 0; i < NrOfServices; i++) - { - DPRINT("Loading service: %s\n", Service->Name); - ServiceTable[i].lpServiceName = Service->Name; - ServiceTable[i].lpServiceProc = Service->ServiceMainFunc; - Service = Service->Next; - } - - /* Set a NULL entry to end the service table */ - ServiceTable[i].lpServiceName = NULL; - ServiceTable[i].lpServiceProc = NULL; - - if (FALSE == StartServiceCtrlDispatcher(ServiceTable)) - DPRINT1("Failed to start service control dispatcher, ErrorCode: %lu\n", GetLastError()); - - HeapFree(GetProcessHeap(), 0, ServiceTable); - } - else - { - DPRINT1("Not enough memory for the service table, trying to allocate %u bytes\n", sizeof(SERVICE_TABLE_ENTRY) * (NrOfServices + 1)); - } - - DPRINT("Freeing services...\n"); - FreeServices(); + DWORD NrOfServices; + LPSERVICE_TABLE_ENTRY ServiceTable; + + if (argc < 3) + { + /* MS svchost.exe doesn't seem to print help, should we? */ + return 0; + } + + if (_tcscmp(argv[1], _T("-k")) != 0) + { + /* For now, we only handle "-k" */ + return 0; + } + + NrOfServices = LoadServiceCategory(argv[2]); + + DPRINT("NrOfServices: %lu\n", NrOfServices); + if (0 == NrOfServices) + return 0; + + ServiceTable = HeapAlloc(GetProcessHeap(), 0, sizeof(SERVICE_TABLE_ENTRY) * (NrOfServices + 1)); + + if (NULL != ServiceTable) + { + DWORD i; + PSERVICE Service = FirstService; + + /* Fill the service table */ + for (i = 0; i < NrOfServices; i++) + { + DPRINT("Loading service: %s\n", Service->Name); + ServiceTable[i].lpServiceName = Service->Name; + ServiceTable[i].lpServiceProc = Service->ServiceMainFunc; + Service = Service->Next; + } + + /* Set a NULL entry to end the service table */ + ServiceTable[i].lpServiceName = NULL; + ServiceTable[i].lpServiceProc = NULL; + + if (FALSE == StartServiceCtrlDispatcher(ServiceTable)) + DPRINT1("Failed to start service control dispatcher, ErrorCode: %lu\n", GetLastError()); + + HeapFree(GetProcessHeap(), 0, ServiceTable); + } + else + { + DPRINT1("Not enough memory for the service table, trying to allocate %u bytes\n", sizeof(SERVICE_TABLE_ENTRY) * (NrOfServices + 1)); + } + + DPRINT("Freeing services...\n"); + FreeServices(); return 0; } Modified: trunk/reactos/base/services/svchost/svchost.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/svchost/svchost.h?rev=59357&r1=59356&r2=59357&view=diff ============================================================================== --- trunk/reactos/base/services/svchost/svchost.h [iso-8859-1] (original) +++ trunk/reactos/base/services/svchost/svchost.h [iso-8859-1] Sat Jun 29 11:10:28 2013 @@ -1,9 +1,9 @@ /* - * PROJECT: ReactOS SvcHost - * LICENSE: GPL - See COPYING in the top level directory - * FILE: /base/services/svchost/svchost.h - * PURPOSE: Provide dll service loader - * PROGRAMMERS: Gregor Brunmar (gregor.brun...@home.se) + * PROJECT: ReactOS SvcHost + * LICENSE: GPL - See COPYING in the top level directory + * FILE: /base/services/svchost/svchost.h + * PURPOSE: Provide dll service loader + * PROGRAMMERS: Gregor Brunmar (gregor.brun...@home.se) */ #pragma once @@ -24,15 +24,14 @@ /* DEFINES *******************************************************************/ -#define CS_TIMEOUT 1000 +#define CS_TIMEOUT 1000 typedef struct _SERVICE { - PTSTR Name; - HINSTANCE hServiceDll; - LPSERVICE_MAIN_FUNCTION ServiceMainFunc; - struct _SERVICE *Next; + PTSTR Name; + HINSTANCE hServiceDll; + LPSERVICE_MAIN_FUNCTION ServiceMainFunc; + struct _SERVICE *Next; } SERVICE, *PSERVICE; - /* FUNCTIONS *****************************************************************/