https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9d43950db7bd5402e947b…
commit 9d43950db7bd5402e947b28ff73cbf4cac697b54
Author: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
AuthorDate: Sun Sep 16 23:22:04 2018 +0200
Commit: Hermès Bélusca-Maïto <hermes.belusca-maito(a)reactos.org>
CommitDate: Mon Sep 17 01:22:59 2018 +0200
[SERVICES] Add basic support for setting lpServiceStartName via
RChangeServiceConfigW().
---
base/system/services/rpcserver.c | 47 +++++++++++++++++++++++++++-------------
1 file changed, 32 insertions(+), 15 deletions(-)
diff --git a/base/system/services/rpcserver.c b/base/system/services/rpcserver.c
index 77cf44be73..aa64233350 100644
--- a/base/system/services/rpcserver.c
+++ b/base/system/services/rpcserver.c
@@ -2179,28 +2179,45 @@ RChangeServiceConfigW(
goto done;
}
- if (lpPassword != NULL)
+ /* Start name and password are only used by Win32 services */
+ if (lpService->Status.dwServiceType & SERVICE_WIN32)
{
- if (*(LPWSTR)lpPassword != 0)
+ /* Write service start name */
+ if (lpServiceStartName != NULL && *lpServiceStartName != 0)
{
- /* FIXME: Decrypt the password */
-
- /* Write the password */
- dwError = ScmSetServicePassword(lpService->szServiceName,
- (LPCWSTR)lpPassword);
+ dwError = RegSetValueExW(hServiceKey,
+ L"ObjectName",
+ 0,
+ REG_SZ,
+ (LPBYTE)lpServiceStartName,
+ (DWORD)((wcslen(lpServiceStartName) + 1) *
sizeof(WCHAR)));
if (dwError != ERROR_SUCCESS)
goto done;
}
- else
+
+ if (lpPassword != NULL)
{
- /* Delete the password */
- dwError = ScmSetServicePassword(lpService->szServiceName,
- NULL);
- if (dwError == ERROR_FILE_NOT_FOUND)
- dwError = ERROR_SUCCESS;
+ if (*(LPWSTR)lpPassword != 0)
+ {
+ /* FIXME: Decrypt the password */
- if (dwError != ERROR_SUCCESS)
- goto done;
+ /* Write the password */
+ dwError = ScmSetServicePassword(lpService->szServiceName,
+ (LPCWSTR)lpPassword);
+ if (dwError != ERROR_SUCCESS)
+ goto done;
+ }
+ else
+ {
+ /* Delete the password */
+ dwError = ScmSetServicePassword(lpService->szServiceName,
+ NULL);
+ if (dwError == ERROR_FILE_NOT_FOUND)
+ dwError = ERROR_SUCCESS;
+
+ if (dwError != ERROR_SUCCESS)
+ goto done;
+ }
}
}