services: Initialize environment block immediately after startup.

Sebastian Lackner sebastian at fds-team.de
Fri Apr 15 03:03:52 CDT 2016


Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
---
 programs/services/services.c |   22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/programs/services/services.c b/programs/services/services.c
index 8f53e7e..0f8615f 100644
--- a/programs/services/services.c
+++ b/programs/services/services.c
@@ -724,17 +724,6 @@ static DWORD service_start_process(struct service_entry *service_entry)
 
     service_lock(service_entry);
 
-    if (!env)
-    {
-        HANDLE htok;
-
-        if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_DUPLICATE, &htok))
-            CreateEnvironmentBlock(&env, htok, FALSE);
-
-        if (!env)
-            WINE_ERR("failed to create services environment\n");
-    }
-
     if ((err = get_service_binary_path(service_entry, &path)))
     {
         service_unlock(service_entry);
@@ -976,9 +965,20 @@ static void load_registry_parameters(void)
 int main(int argc, char *argv[])
 {
     static const WCHAR svcctl_started_event[] = SVCCTL_STARTED_EVENT;
+    HANDLE htok;
     DWORD err;
 
     g_hStartedEvent = CreateEventW(NULL, TRUE, FALSE, svcctl_started_event);
+
+    if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY|TOKEN_DUPLICATE, &htok))
+    {
+        CreateEnvironmentBlock(&env, htok, FALSE);
+        CloseHandle(htok);
+    }
+
+    if (!env)
+        WINE_ERR("failed to create services environment\n");
+
     load_registry_parameters();
     err = scmdatabase_create(&active_database);
     if (err != ERROR_SUCCESS)
-- 
2.7.1



More information about the wine-patches mailing list