- Read a services optional display name from the registry.
- Fix return size bugs in GetServiceDisplayNameW and GetServiceKeyNameW.
Modified: trunk/reactos/lib/advapi32/service/scm.c
Modified: trunk/reactos/subsys/system/services/database.c
Modified: trunk/reactos/subsys/system/services/rpcserver.c
_____
Modified: trunk/reactos/lib/advapi32/service/scm.c
--- trunk/reactos/lib/advapi32/service/scm.c 2005-11-06 17:58:08 UTC
(rev 19029)
+++ trunk/reactos/lib/advapi32/service/scm.c 2005-11-06 18:21:00 UTC
(rev 19030)
@@ -592,6 +592,8 @@
return FALSE;
}
+ (*lpcchBuffer)--;
+
return TRUE;
}
@@ -644,6 +646,8 @@
return FALSE;
}
+ (*lpcchBuffer)--;
+
return TRUE;
}
_____
Modified: trunk/reactos/subsys/system/services/database.c
--- trunk/reactos/subsys/system/services/database.c 2005-11-06
17:58:08 UTC (rev 19029)
+++ trunk/reactos/subsys/system/services/database.c 2005-11-06
18:21:00 UTC (rev 19030)
@@ -123,7 +123,7 @@
{
PSERVICE_GROUP Group;
- DPRINT("IopGetGroupOrderList(%S, %x, %x, %x, %x, %x)\n",
+ DPRINT("CreateGroupOrderListRoutine(%S, %x, %x, %x, %x, %x)\n",
ValueName, ValueType, ValueData, ValueLength, Context,
EntryContext);
if (ValueType == REG_BINARY &&
@@ -253,6 +253,7 @@
HKEY hServiceKey)
{
PSERVICE lpService = NULL;
+ LPWSTR lpDisplayName = NULL;
LPWSTR lpGroup = NULL;
DWORD dwSize;
DWORD dwError;
@@ -326,6 +327,14 @@
DPRINT("Group: %S\n", lpGroup);
+ dwError = ScmReadString(hServiceKey,
+ L"DisplayName",
+ &lpDisplayName);
+ if (dwError != ERROR_SUCCESS)
+ lpDisplayName = NULL;
+
+ DPRINT("Display name: %S\n", lpDisplayName);
+
dwError = ScmCreateNewServiceRecord(lpServiceName,
&lpService);
if (dwError != ERROR_SUCCESS)
@@ -342,6 +351,12 @@
lpGroup = NULL;
}
+ if (lpDisplayName != NULL)
+ {
+ lpService->lpDisplayName = lpDisplayName;
+ lpDisplayName = NULL;
+ }
+
DPRINT("ServiceName: '%S'\n", lpService->lpServiceName);
DPRINT("Group: '%S'\n", lpService->lpServiceGroup);
DPRINT("Start %lx Type %lx Tag %lx ErrorControl %lx\n",
@@ -357,6 +372,9 @@
if (lpGroup != NULL)
HeapFree(GetProcessHeap(), 0, lpGroup);
+ if (lpDisplayName != NULL)
+ HeapFree(GetProcessHeap(), 0, lpDisplayName);
+
return dwError;
}
@@ -456,6 +474,8 @@
RegCloseKey(hServicesKey);
+ /* FIXME: Delete services that are marked for delete */
+
DPRINT("ScmCreateServiceDatabase() done\n");
return ERROR_SUCCESS;
_____
Modified: trunk/reactos/subsys/system/services/rpcserver.c
--- trunk/reactos/subsys/system/services/rpcserver.c 2005-11-06
17:58:08 UTC (rev 19029)
+++ trunk/reactos/subsys/system/services/rpcserver.c 2005-11-06
18:21:00 UTC (rev 19030)
@@ -969,10 +969,10 @@
return ERROR_SERVICE_DOES_NOT_EXIST;
}
- dwLength = wcslen(lpService->lpDisplayName);
+ dwLength = wcslen(lpService->lpDisplayName) + 1;
if (lpDisplayName != NULL &&
- *lpcchBuffer > dwLength)
+ *lpcchBuffer >= dwLength)
{
wcscpy(lpDisplayName, lpService->lpDisplayName);
}
@@ -1019,10 +1019,10 @@
return ERROR_SERVICE_DOES_NOT_EXIST;
}
- dwLength = wcslen(lpService->lpServiceName);
+ dwLength = wcslen(lpService->lpServiceName) + 1;
if (lpServiceName != NULL &&
- *lpcchBuffer > dwLength)
+ *lpcchBuffer >= dwLength)
{
wcscpy(lpServiceName, lpService->lpServiceName);
}