From b4693503e5eba0270829253d8b75fae238ebb590 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Tue, 1 Nov 2005 13:52:22 +0000 Subject: [PATCH] - Mark service for delete in the registry. svn path=/trunk/; revision=18930 --- reactos/subsys/system/services/config.c | 31 +++++++++++++++++++++++ reactos/subsys/system/services/database.c | 23 +++++++++++++++-- reactos/subsys/system/services/services.h | 4 +++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/reactos/subsys/system/services/config.c b/reactos/subsys/system/services/config.c index 3e406f7a6aa..37451db45dd 100644 --- a/reactos/subsys/system/services/config.c +++ b/reactos/subsys/system/services/config.c @@ -11,6 +11,37 @@ /* FUNCTIONS *****************************************************************/ + +DWORD +ScmOpenServiceKey(LPWSTR lpServiceName, + REGSAM samDesired, + PHKEY phKey) +{ + HKEY hServicesKey = NULL; + DWORD dwError; + + *phKey = NULL; + + dwError = RegOpenKeyExW(HKEY_LOCAL_MACHINE, + L"System\\CurrentControlSet\\Services", + 0, + KEY_READ, + &hServicesKey); + if (dwError != ERROR_SUCCESS) + return dwError; + + dwError = RegOpenKeyExW(hServicesKey, + lpServiceName, + 0, + samDesired, + phKey); + + RegCloseKey(hServicesKey); + + return dwError; +} + + DWORD ScmWriteDependencies(HKEY hServiceKey, LPWSTR lpDependencies, diff --git a/reactos/subsys/system/services/database.c b/reactos/subsys/system/services/database.c index 1e1179eb957..ef57307465d 100644 --- a/reactos/subsys/system/services/database.c +++ b/reactos/subsys/system/services/database.c @@ -987,9 +987,28 @@ ScmAutoStartServices(VOID) DWORD ScmMarkServiceForDelete(PSERVICE pService) { - DPRINT1("ScmMarkServiceForDelete() called\n"); + HKEY hServiceKey = NULL; + DWORD dwValue = 1; + DWORD dwError; - return ERROR_SUCCESS; + DPRINT("ScmMarkServiceForDelete() called\n"); + + dwError = ScmOpenServiceKey(pService->lpServiceName, + KEY_WRITE, + &hServiceKey); + if (dwError != ERROR_SUCCESS) + return dwError; + + dwError = RegSetValueExW(hServiceKey, + L"DeleteFlag", + 0, + REG_DWORD, + (LPBYTE)&dwValue, + sizeof(DWORD)); + + RegCloseKey(hServiceKey); + + return dwError; } /* EOF */ diff --git a/reactos/subsys/system/services/services.h b/reactos/subsys/system/services/services.h index 2e65d890274..4fdd57b3a4a 100644 --- a/reactos/subsys/system/services/services.h +++ b/reactos/subsys/system/services/services.h @@ -43,6 +43,10 @@ extern BOOL ScmShutdown; /* config.c */ +DWORD ScmOpenServiceKey(LPWSTR lpServiceName, + REGSAM samDesired, + PHKEY phKey); + DWORD ScmWriteDependencies(HKEY hServiceKey, LPWSTR lpDependencies, DWORD dwDependenciesLength); -- 2.17.1