Registering a Service Programmatically
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 Telnet server using RegisterService.
HANDLE hService = RegisterService("TEL",0,"telnetd.dll",0);
If the Telnet server is currently running on TEL0, Services.exe will return FALSE and set the last error to ERROR_DEVICE_IN_USE.
The response of a service to xxx_Init 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.
Last updated on Saturday, April 10, 2004
© 1992-2003 Microsoft Corporation. All rights reserved.