Important:
This is retired content. This content is outdated and is no longer being maintained. It is provided as a courtesy for individuals who are still using these technologies. This content may contain URLs that were valid when originally published, but now link to sites or pages that no longer exist.
A version of this page is also available for
4/8/2010

You can also start a service by calling the RegisterServicefunction. RegisterServiceis analogous to the RegisterDevicefunction, which is used to start device drivers running under Device.exe.

The ActivateServicefunction loads a service based on the information specified in the HKEY_LOCAL_MACHINE\Services\< Service Name> registry key. RegisterDeviceenables you to define additional parameters, such as the instance of the service, which is specified in the dwIndexparameter. To load a specific instance of a service that has multiple instances running from the same DLL, use RegisterServiceinstead of ActivateService.

The following code example shows how to start the OBEX service using RegisterService.

Copy Code
HANDLE hService = RegisterService("OBX",0,"OBEXSrVr.dll",0);

If the OBEX service is currently running on OBX0, Services.exe will return FALSE and set the last error to ERROR_DEVICE_IN_USE.

The response of a service to xxx_Init (Services.exe)is dependent on the service, although there are flags defined in the Services.h file for the dwContextvalue. The following flags are defined:

Copy Code
#define SERVICE_INIT_STARTED	 0x00000000
#define SERVICE_INIT_STOPPED	 0x00000001

If the SERVICE_INIT_STOPPED flag is not set in dwContext, then the service is responsible for creating a thread, on startup, for it to call the acceptfunction. This scenario assumes that it is a network-based service. If the SERVICE_INIT_STOPPED flag has been set in dwContext, the service will not be required to create a thread because the service will be using super services to handle the accept thread.

Super service sockets associated with a service should be bound to that service if it has been loaded either at the Services.exe initialization or by using the ActivateService. A service that is started by calling the RegisterServicefunction requires an application to bind all ports to the super service if necessary. Services.exe does not automatically bind to the ports of a service that is started with RegisterService, even if the service has ports listed in the registry.

See Also