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
{ NSSM_REG_ROTATE_BYTES_LOW, REG_DWORD, 0, false, 0, setting_set_number, setting_get_number, 0 },\r
{ NSSM_REG_ROTATE_BYTES_HIGH, REG_DWORD, 0, false, 0, setting_set_number, setting_get_number, 0 },\r
{ NSSM_REG_ROTATE_DELAY, REG_DWORD, (void *) NSSM_ROTATE_DELAY, false, 0, setting_set_number, setting_get_number, 0 },\r
+ { NSSM_REG_TIMESTAMP_LOG, REG_DWORD, 0, false, 0, setting_set_number, setting_get_number, 0 },\r
{ NSSM_NATIVE_DEPENDONGROUP, REG_MULTI_SZ, NULL, true, ADDITIONAL_CRLF, native_set_dependongroup, native_get_dependongroup, native_dump_dependongroup },\r
{ NSSM_NATIVE_DEPENDONSERVICE, REG_MULTI_SZ, NULL, true, ADDITIONAL_CRLF, native_set_dependonservice, native_get_dependonservice, native_dump_dependonservice },\r
{ NSSM_NATIVE_DESCRIPTION, REG_SZ, _T(""), true, 0, native_set_description, native_get_description, 0 },\r