StartServiceCtrlDispatcher

From aldeid
Jump to navigation Jump to search

Description

Connects the main thread of a service process to the service control manager, which causes the thread to be the service control dispatcher thread for the calling process.

Syntax

BOOL WINAPI StartServiceCtrlDispatcher(
  _In_  const SERVICE_TABLE_ENTRY *lpServiceTable
);

Parameters

lpServiceTable [in]
A pointer to an array of SERVICE_TABLE_ENTRY structures containing one entry for each service that can execute in the calling process. The members of the last entry in the table must have NULL values to designate the end of the table.

Return value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

The following error code can be set by the service control manager. Other error codes can be set by the registry functions that are called by the service control manager.

Return code Description
ERROR_FAILED_SERVICE_CONTROLLER_CONNECT This error is returned if the program is being run as a console application rather than as a service. If the program will be run as a console application for debugging purposes, structure it such that service-specific code is not called when this error is returned.
ERROR_INVALID_DATA The specified dispatch table contains entries that are not in the proper format.
ERROR_SERVICE_ALREADY_RUNNING The process has already called StartServiceCtrlDispatcher. Each process can call StartServiceCtrlDispatcher only one time.

Example

.text:00401003                 lea     eax, [esp+10h+ServiceStartTable]
.text:00401007                 mov     [esp+10h+ServiceStartTable.lpServiceName], offset aMalservice ; "MalService"
.text:0040100F                 push    eax             ; lpServiceStartTable
.text:00401010                 mov     [esp+14h+ServiceStartTable.lpServiceProc], offset sub_401040
.text:00401018                 mov     [esp+14h+var_8], 0
.text:00401020                 mov     [esp+14h+var_4], 0
.text:00401028                 call    ds:StartServiceCtrlDispatcherA

Comments