https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9d43950db7bd5402e947b2...
commit 9d43950db7bd5402e947b28ff73cbf4cac697b54 Author: Hermès Bélusca-Maïto hermes.belusca-maito@reactos.org AuthorDate: Sun Sep 16 23:22:04 2018 +0200 Commit: Hermès Bélusca-Maïto hermes.belusca-maito@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; + } } }