advapi32: Do not terminate a regular program if it calls StartServiceCtrlDispatcher.
Alexandre Julliard
julliard at winehq.org
Wed Mar 27 06:20:49 CDT 2013
Alexander Morozov <amorozov at etersoft.ru> writes:
> @@ -592,7 +586,26 @@ BOOL WINAPI StartServiceCtrlDispatcherA( const SERVICE_TABLE_ENTRYA *servent )
> services[i] = info;
> }
>
> - service_run_main_thread();
> + disp = HeapAlloc( GetProcessHeap(), 0, sizeof(*disp) );
> +
> + if (!(disp->manager = OpenSCManagerW( NULL, NULL, SC_MANAGER_CONNECT )))
> + {
> + ERR("failed to open service manager error %u\n", GetLastError());
> + HeapFree( GetProcessHeap(), 0, disp );
> + return FALSE;
> + }
> +
> + disp->pipe = service_open_pipe();
> + if (disp->pipe == INVALID_HANDLE_VALUE)
> + {
> + WARN("failed to create control pipe error %u\n", GetLastError());
> + CloseServiceHandle( disp->manager );
> + HeapFree( GetProcessHeap(), 0, disp );
> + SetLastError( ERROR_FAILED_SERVICE_CONTROLLER_CONNECT );
> + return FALSE;
> + }
> +
> + service_run_main_thread( disp );
There's no reason to duplicate that code, just do it in
service_run_main_thread instead.
--
Alexandre Julliard
julliard at winehq.org
More information about the wine-devel
mailing list