Initialise hook command widget correctly.
[nssm.git] / settings.cpp
index 11984bc..9e5f666 100644 (file)
@@ -1152,12 +1152,21 @@ int native_dump_objectname(const TCHAR *service_name, void *param, const TCHAR *
   int ret = native_get_objectname(service_name, param, name, default_value, value, additional);\r
   if (ret != 1) return ret;\r
 \r
-  /* Do we need to dump a dummy password? */\r
-  if (! well_known_username(value->string)) {\r
-    /* Parameters are the other way round. */\r
-    value_t inverted;\r
-    inverted.string = _T("****");\r
-    return setting_dump_string(service_name, (void *) REG_SZ, name, &inverted, value->string);\r
+  /* Properly checking for a virtual account requires the actual service name. */\r
+  if (! _tcsnicmp(NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN, value->string, _tcslen(NSSM_VIRTUAL_SERVICE_ACCOUNT_DOMAIN))) {\r
+    TCHAR *name = virtual_account(service_name);\r
+    if (! name) return -1;\r
+    HeapFree(GetProcessHeap(), 0, value->string);\r
+    value->string = name;\r
+  }\r
+  else {\r
+    /* Do we need to dump a dummy password? */\r
+    if (! well_known_username(value->string)) {\r
+      /* Parameters are the other way round. */\r
+      value_t inverted;\r
+      inverted.string = _T("****");\r
+      return setting_dump_string(service_name, (void *) REG_SZ, name, &inverted, value->string);\r
+    }\r
   }\r
   return setting_dump_string(service_name, (void *) REG_SZ, name, value, 0);\r
 }\r