Set Tag value in registry when needed.
(Not tested due to bug 1048)
Modified: trunk/reactos/subsys/system/services/rpcserver.c

Modified: trunk/reactos/subsys/system/services/rpcserver.c
--- trunk/reactos/subsys/system/services/rpcserver.c	2005-11-24 09:33:29 UTC (rev 19521)
+++ trunk/reactos/subsys/system/services/rpcserver.c	2005-11-24 11:03:23 UTC (rev 19522)
@@ -219,6 +219,17 @@
 }
 
 
+DWORD
+ScmAssignNewTag(LPWSTR lpServiceGroup,
+                LPDWORD lpdwTagId)
+{
+    /* FIXME */
+    DPRINT("Assigning new tag in group %S\n", lpServiceGroup);
+    *lpdwTagId = 0;
+    return ERROR_SUCCESS;
+}
+
+
 /* Function 0 */
 unsigned long
 ScmrCloseServiceHandle(handle_t BindingHandle,
@@ -599,7 +610,7 @@
 
     /* Open the service key */
     dwError = ScmOpenServiceKey(lpService->szServiceName,
-                                KEY_WRITE,
+                                KEY_SET_VALUE,
                                 &hServiceKey);
     if (dwError != ERROR_SUCCESS)
         goto done;
@@ -614,6 +625,7 @@
                        REG_SZ,
                        (LPBYTE)lpDisplayName,
                        (wcslen(lpDisplayName) + 1) * sizeof(WCHAR));
+        /* FIXME: update lpService->lpDisplayName */
     }
 
     if (dwServiceType != SERVICE_NO_CHANGE)
@@ -627,6 +639,7 @@
                                  sizeof(DWORD));
         if (dwError != ERROR_SUCCESS)
             goto done;
+        /* FIXME: lpService->dwType = dwServiceType; */
     }
 
     if (dwStartType != SERVICE_NO_CHANGE)
@@ -640,6 +653,7 @@
                                  sizeof(DWORD));
         if (dwError != ERROR_SUCCESS)
             goto done;
+        lpService->dwStartType = dwStartType;
     }
 
     if (dwErrorControl != SERVICE_NO_CHANGE)
@@ -653,6 +667,7 @@
                                  sizeof(DWORD));
         if (dwError != ERROR_SUCCESS)
             goto done;
+        lpService->dwErrorControl = dwErrorControl;
     }
 
 #if 0
@@ -700,11 +715,24 @@
                                  (wcslen(lpLoadOrderGroup) + 1) * sizeof(WCHAR));
         if (dwError != ERROR_SUCCESS)
             goto done;
+        /* FIXME: update lpService->lpServiceGroup */
     }
 
     if (lpdwTagId != NULL)
     {
-        /* FIXME: Write tag */
+        dwError = ScmAssignNewTag(lpService->lpServiceGroup,
+                                  &lpService->dwTag);
+        if (dwError != ERROR_SUCCESS)
+            goto done;
+        dwError = RegSetValueExW(hServiceKey,
+                                 L"Tag",
+                                 0,
+                                 REG_DWORD,
+                                 (LPBYTE)&lpService->dwTag,
+                                 sizeof(DWORD));
+        if (dwError != ERROR_SUCCESS)
+            goto done;
+        *lpdwTagId = lpService->dwTag;
     }
 
     /* Write dependencies */
@@ -926,7 +954,18 @@
 
     if (lpdwTagId != NULL)
     {
-        /* FIXME: Write tag */
+        dwError = ScmAssignNewTag(lpService->lpServiceGroup,
+                                  &lpService->dwTag);
+        if (dwError != ERROR_SUCCESS)
+            goto done;
+        dwError = RegSetValueExW(hServiceKey,
+                                 L"Tag",
+                                 0,
+                                 REG_DWORD,
+                                 (LPBYTE)&lpService->dwTag,
+                                 sizeof(DWORD));
+        if (dwError != ERROR_SUCCESS)
+            goto done;
     }
 
     /* Write dependencies */
@@ -964,7 +1003,7 @@
         *hService = (unsigned int)hServiceHandle;
 
         if (lpdwTagId != NULL)
-            *lpdwTagId = 0; /* FIXME */
+            *lpdwTagId = lpService->dwTag;
     }
     else
     {