Share via


Registering a Service Programmatically

A version of this page is also available for

Windows Embedded CE 6.0 R3

4/8/2010

You can also start a service by calling the RegisterService function. RegisterService is analogous to the RegisterDevice function, which is used to start device drivers running under Device.exe.

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

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

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 dwContext value. The following flags are defined:

#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 accept function. 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 RegisterService function 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

Reference

ActivateService
RegisterService
ServiceAddPort
Services.exe Functions
xxx_Init (Services.exe)

Other Resources

accept (Windows Sockets)
Services.exe