Microsoft KB Archive/258943

= PRB: Calling CoCreateInstance from a Service During the SERVICE_START_PENDING State May Cause the Call to Stop Responding =

Article ID: 258943

Article Last Modified on 2/12/2007

-

APPLIES TO


 * Microsoft Windows NT Server 4.0 Standard Edition
 * Microsoft Windows NT Workstation 4.0 Developer Edition
 * Microsoft Windows 2000 Standard Edition

-



This article was previously published under Q258943



SYMPTOMS
When the Distributed Component Object Model (DCOM) client is implemented as a service, the CoCreateInstance call is made when the service is in the SERVICE_START_PENDING state. The service is configured to automatically start at boot time. When the computer is restarted, the CoCreateInstance call stops responding until the following error message occurs from the Service Control Manager:

&quot;At least one of the services or drivers failed during system startup&quot;

After this error appears, the CoCreateInstance call then returns successfully.



CAUSE
When a service is in the SERVICE_START_PENDING state, the Service Control Manager is locked and does not start other services. This prevents dependent services from getting started. As a result of the CoCreateInstance call to activate a remote Component Object Model (COM) server, Rpcss.exe makes Synchronization Service Provider (SSP) calls, which in turn try to start the Microsoft Windows NT LAN Manager (NTLM) SSP (NtLmSsp) service. The CoCreateInstance call blocks until the NtLmSsp service starts. This creates a deadlock until the Service Control Manager times out as it tries to start the DCOM client service. After the Service Control Manager times out and then starts the NtLmSsp service, the CoCreateInstance call returns successfully.



RESOLUTION
You can add NtLmSsp as a dependency of the DCOM client service to resolve the problem. You can do this in the CreateService call. See the documentation for CreateService in the Platform software development kit (SDK) in the MSDN Library.

CreateService

CreateService&quot;>http://www.msdn.microsoft.com/library/?url=/library/en-us/dllproc/services_3p9h.asp&quot;>CreateService

NOTE: In Windows 2000, NTLM is the default. However, NTLM is not the only Security Support Provider Interface (SSPI). You must understand what the common security providers are and then make adjustments if appropriate.



STATUS
This behavior is by design.

