- /* 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