Author: ekohl
Date: Fri Aug 29 15:44:40 2008
New Revision: 35768
URL:
http://svn.reactos.org/svn/reactos?rev=35768&view=rev
Log:
Forgot to commit this file too!
Patch based on bug report #3669 by Michael Martin (aka bugboy)
<martinmnet(a)hotmail.com> just like the patches r35748, r35750, r35752 and r35753.
Modified:
trunk/reactos/base/system/services/database.c
Modified: trunk/reactos/base/system/services/database.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/datab…
==============================================================================
--- trunk/reactos/base/system/services/database.c [iso-8859-1] (original)
+++ trunk/reactos/base/system/services/database.c [iso-8859-1] Fri Aug 29 15:44:40 2008
@@ -172,10 +172,11 @@
/* Set the resume count */
lpService->dwResumeCount = dwResumeCount++;
- /* Append service entry */
+ /* Append service record */
InsertTailList(&ServiceListHead,
&lpService->ServiceListEntry);
+ /* Initialize the service status */
lpService->Status.dwCurrentState = SERVICE_STOPPED;
lpService->Status.dwControlsAccepted = 0;
lpService->Status.dwWin32ExitCode = ERROR_SERVICE_NEVER_STARTED;
@@ -184,6 +185,42 @@
lpService->Status.dwWaitHint = 2000; /* 2 seconds */
return ERROR_SUCCESS;
+}
+
+
+VOID
+ScmDeleteServiceRecord(PSERVICE lpService)
+{
+ DPRINT1("Deleting Service %S\n", lpService->lpServiceName);
+
+ /* Delete the display name */
+ if (lpService->lpDisplayName != NULL &&
+ lpService->lpDisplayName != lpService->lpServiceName)
+ HeapFree(GetProcessHeap(), 0, lpService->lpDisplayName);
+
+ /* Decrement the image reference counter */
+ if (lpService->lpImage)
+ lpService->lpImage->dwServiceRefCount--;
+
+ /* Decrement the group reference counter */
+ if (lpService->lpGroup)
+ lpService->lpGroup->dwRefCount--;
+
+ /* FIXME: SecurityDescriptor */
+
+ /* Close the control pipe */
+ if (lpService->ControlPipeHandle != INVALID_HANDLE_VALUE)
+ CloseHandle(lpService->ControlPipeHandle);
+
+ /* Remove the Service from the List */
+ RemoveEntryList(&lpService->ServiceListEntry);
+
+ DPRINT1("Deleted Service %S\n", lpService->lpServiceName);
+
+ /* Delete the service record */
+ HeapFree(GetProcessHeap(), 0, lpService);
+
+ DPRINT1("Done\n");
}