Zebediah Figura : advapi32: Correctly translate SERVICE_REQUIRED_PRIVILEGES_INFO to RPC.

Alexandre Julliard julliard at winehq.org
Thu Sep 13 03:49:14 CDT 2018


Module: wine
Branch: stable
Commit: 1e259233e7e08c841224aba6291462e21879749e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1e259233e7e08c841224aba6291462e21879749e

Author: Zebediah Figura <z.figura12 at 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 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 3b8ec3046a62588a145ba8a92a2c257f0a06bbdb)
Signed-off-by: Michael Stefaniuc <mstefani at 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)




More information about the wine-cvs mailing list