From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- programs/services/rpc.c | 8 ++++++++ programs/services/services.c | 8 ++++++++ 2 files changed, 16 insertions(+)
diff --git a/programs/services/rpc.c b/programs/services/rpc.c index 835516861f0..d725c6510b4 100644 --- a/programs/services/rpc.c +++ b/programs/services/rpc.c @@ -975,6 +975,14 @@ DWORD __cdecl svcctl_ChangeServiceConfig2W( SC_RPC_HANDLE hService, SC_RPC_CONFI save_service_config( service->service_entry ); service_unlock( service->service_entry ); break; + case SERVICE_CONFIG_DELAYED_AUTO_START_INFO: + WINE_TRACE( "SERVICE_CONFIG_DELAYED_AUTO_START_INFO not implemented: fDelayedAutostart %d\n", + config.delayedstart->fDelayedAutostart); + service_lock( service->service_entry ); + service->service_entry->delayed_autostart = config.delayedstart->fDelayedAutostart; + save_service_config( service->service_entry ); + service_unlock( service->service_entry ); + break; default: WINE_FIXME("level %lu not implemented\n", config.dwInfoLevel); err = ERROR_INVALID_LEVEL; diff --git a/programs/services/services.c b/programs/services/services.c index 273a146c784..9636752438e 100644 --- a/programs/services/services.c +++ b/programs/services/services.c @@ -275,6 +275,14 @@ DWORD save_service_config(struct service_entry *entry) goto cleanup; if ((err = RegSetValueExW(hKey, SZ_PRESHUTDOWN, 0, REG_DWORD, (LPBYTE)&entry->preshutdown_timeout, sizeof(DWORD))) != 0) goto cleanup; + + if (entry->delayed_autostart) + err = RegSetValueExW(hKey, SZ_DELAYED_AUTOSTART, 0, REG_DWORD, (LPBYTE)&entry->delayed_autostart, sizeof(DWORD)); + else + err = RegDeleteValueW(hKey, SZ_DELAYED_AUTOSTART); + if (err != 0 && err != ERROR_FILE_NOT_FOUND) + goto cleanup; + if (entry->is_wow64) { const DWORD is_wow64 = 1;