Module: wine Branch: stable Commit: 1e259233e7e08c841224aba6291462e21879749e URL: https://source.winehq.org/git/wine.git/?a=commit;h=1e259233e7e08c841224aba62...
Author: Zebediah Figura z.figura12@gmail.com Date: Sat May 12 17:25:16 2018 -0500
advapi32: Correctly translate SERVICE_REQUIRED_PRIVILEGES_INFO to RPC.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 3b8ec3046a62588a145ba8a92a2c257f0a06bbdb) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/advapi32/service.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/dlls/advapi32/service.c b/dlls/advapi32/service.c index 21693fe..d43cd40 100644 --- a/dlls/advapi32/service.c +++ b/dlls/advapi32/service.c @@ -2435,6 +2435,7 @@ BOOL WINAPI ChangeServiceConfig2A( SC_HANDLE hService, DWORD dwInfoLevel, BOOL WINAPI ChangeServiceConfig2W( SC_HANDLE hService, DWORD dwInfoLevel, LPVOID lpInfo) { + SERVICE_RPC_REQUIRED_PRIVILEGES_INFO rpc_privinfo; DWORD err;
__TRY @@ -2442,7 +2443,19 @@ BOOL WINAPI ChangeServiceConfig2W( SC_HANDLE hService, DWORD dwInfoLevel, SC_RPC_CONFIG_INFOW info;
info.dwInfoLevel = dwInfoLevel; - info.u.descr = lpInfo; + if (dwInfoLevel == SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO) + { + SERVICE_REQUIRED_PRIVILEGES_INFOW *privinfo = lpInfo; + WCHAR *p; + + for (p = privinfo->pmszRequiredPrivileges; *p; p += strlenW(p) + 1); + rpc_privinfo.cbRequiredPrivileges = + (p - privinfo->pmszRequiredPrivileges + 1) * sizeof(WCHAR); + rpc_privinfo.pRequiredPrivileges = (BYTE *)privinfo->pmszRequiredPrivileges; + info.u.privinfo = &rpc_privinfo; + } + else + info.u.descr = lpInfo; err = svcctl_ChangeServiceConfig2W( hService, info ); } __EXCEPT(rpc_filter)