Windows Insider

Get Under the GUI

Windows NT is essentially a collection of interrelated services. Here’s how to explore the higher-level services to demonstrate their relationships to each other.

Last month I discussed low-level system process components and some of the tools in the NT Server Resource Kit that help you understand these operating system services. In this column we’ll continue with the discussion.

These low-level system components—the messenger, browser, alerter, and so on—lay the foundation for the operating system to provide services that most administrators understand and know how to support. First, the low-level processes are initialized, and then the Winlogon process authenticates the user and launches the USERINIT.EXE process. In turn, the Userinit process reads the registry configuration for that user and launches the default graphical shell process called the Explorer. The Explorer provides the context for the users to interact with the operating system.

You can see this relationship in the Winlogon registry key shown in Figure 1. Userinit launches the Explorer process and then closes down. Any process subsequently created through the shell (in most cases this process is the Explorer) is within the context of the interactive user. Consequently, it has that user’s token associated with it. This determines which system resources the process will be able to access and which system operations it can perform. The hierarchy in the TLIST displayed in Figure 2 is misleading because it shows the Explorer at the same level in the hierarchy as the System process (which I also discussed last month). This hierarchy is displayed as such because the service that calls the Explorer has closed down.

The processes listed below Explorer are user-mode applications that run under the interactive token context, such as the Windows NT Task Manager, Microsoft Word (which I’m using to write this), and the command prompt that ran TLIST. The Explorer process should reside two levels below Winlogon as the child of Userinit, which is sibling to Services, LSASS, and NDDEAGNT. NDDEAGNT handles users’ dynamic data exchange requests across the network during client/server communication. LSASS is used for the security authentication procedure that I discussed last month.

The Services process is the foundation for higher-level Windows NT services, such as Workstation, Browser, and Dynamic Host Configuration Protocol (DHCP). The DHCP service automatically distributes IP addresses so administrators don’t have to manually edit the configuration files in each machine. Before looking further at SERVICES.EXE, however, let’s examine what a service is and how it differs from an application.

Service Defined

A Windows NT service consists of three main components. The first component is the service itself. A service is a special Win32 program that provides specific functionality that extends the scope of the operating system. A program becomes a service when it’s able to be managed by and report its status to the Service Control Manager (SCM). Another characteristic of a service is that they usually run in a detached mode and don’t interact with the desktop. This means that although they often run in user mode, they don’t need an interactive logon. Instead, they can use the context of the System Account to run behind the scenes regardless of whether a user is logged onto the system or not. When a user logs on, the services are already running and ready to provide a benefit to the interactive account or even to a user across the network.

Even though services can run in the System Account context, this can create problems if the service needs to access resources across the network. Although services can provide benefits to processes running remotely, the System Account only has privileges on the local machine. This is why many services, particularly those providing functions for BackOffice applications such as SMS and Exchange, use a standard user account that has the privilege to log on as a service. Using a regular authenticated token-bearing account allows a service to access resources such as shares and disk drives across the network. This is useful for services such as the Message Transfer Agent found in e-mail systems.

Figure 1. The Winlogon process in the Windows NT Registry Editor obtains initialization information for the registry key.

The second component of an NT service is the SCM, which is built into every NT system and runs automatically when the system boots. The SCM is an RPC server process that runs with System Account privileges. It provides a central and secure method for controlling NT services. The SCM communicates with all of the Windows NT services on the system, directing them to start, stop, pause, or continue, and supplying them with configuration information.

The third component is a Service Control Program (SCP). An SCP provides a user interface to the SCM. Because most services interact only with the SCM and not the user, there needs to be a way to configure how the services will be controlled by the SCM.

Figure 2. Running TLIST gives you a display of the system process hierarchies.

The most obvious SCP is the Services Control applet. Most administrators use this applet to tell the SCM to run a particular service automatically at startup, disable it, or leave it in manual mode for another process to initialize when needed. Many BackOffice application services function in this manner. This is also where a seperate account can be assigned to a particular service.

Another SCP tool is the NET.EXE command that can be used to list, start, and stop services on a local machine. The Windows NT Server Manager is an SCP that lets administrators control services on remote machines using the RPC client/server architecture of SCM.

Additional Information

If you need a good reference book on NT services, check out Professional NT Services by Kevin Miller (Wrox Press, Inc., $59.99, ISBN 1-86100-130-4). The book covers NT service development, touching on such issues as security, configuration, and implementation.

Starting Services

Services are started by the SCM. The information that the SCM needs in order to control a service is located in the SCM database in the registry under the HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services key. Under normal circumstances, neither applications nor users should make changes to this key. Instead, the services setup program acts as an SCP that communicates with the SCM to make the entries into its database. Although it may sound inefficient, this method ensures that the SCM maintains the integrity of the database, particularly with regard to dependencies. Most services will create an SCP applet for communicating with the SCM. This applet is stored either in the Control Panel or within the Network applet.

As with all applications, a service is a process that runs in its own memory space. While this is great for an application that consumes vast amounts of dynamic resources, many services are simple and won’t need the extra space. To maintain operating system efficiencies, some services share the same process by being included in the same program file image. This is the case with the SERVICES.EXE program. In addition to being the home of the SCM, SERVICES.EXE also includes such fundamental Windows NT services as Alerter, Browser, DHCP Client, Event Log, Messenger, NTLM Security Support Provider, Plug and Play, Server, TCP/IP NetBIOS Helper, and Workstation.

Figure 3. This Registry Editor entry shows that the executable for the Workstation service is SERVICES.EXE.

You can see what the executable is for a particular service by looking in the SCM database in the registry, as described earlier. For example, Figure 3 shows the entry for the Workstation service.

As you can see in Figure 3, the program image for the Workstation service is SERVICES.EXE, but it’ll be displayed as Workstation when the SCM is queried.

You can also view these relationships using an SCP tool provided in the Windows NT 4.0 Resource Kit. The tool, called SC.EXE, lets you communicate with the SCM directly. SC.EXE is a command-line program that displays its options when you enter the SC command by itself, as shown in Figure 4.

Figure 4. SC.EXE lets you communicate directly with the SCM. When you enter the SC command by itself, SC.EXE displays its options.

You have much more flexibility with SC.EXE than with the Control Panel or NET.EXE. Using this SCP tool you can determine the program image that contains each respective service instead of looking for each service in the registry. As shown in Figure 5, the Event Log, Browser, and Alerter all share the same Services executable.

Also notice that SC.EXE displays the services that it depends upon to run, or its dependencies. These relationships are useful for troubleshooting because they illustrate the position each service holds within the operating system.

Sharing one process may be efficient for the operating system. When it comes to troubleshooting, however, this cozy relationship can mask an individual service that may be causing problems. For example, if the Task Manager shows that CPU utilization is very high and a significant portion of that activity is the Services process, how do you know which service may be causing the problem?

Figure 5. SC.EXE lets you find the program image that contains a particular service. This eliminates the need for you to look for each service in the registry. Here it shows some of the services that share the same executable.

One solution is to use some of the tools I discussed last month. Use the Windows NT Performance Monitor to identify the instances of each thread within the services process by monitoring Thread: %Processor Time and Thread: ID thread. Once you have the thread ID, run TLIST SERVICES to display all the threads running and their thread ID and starting addresses. Then correlate the starting address of the threads with the starting addresses of the .DLLs, which are also displayed. Once you associate a .DLL with a thread, you can monitor the CPU activity for the errant thread and determine which service within SERVICES.EXE is running rampant.

You can then use SC.EXE to stop and start the service. If you really want to get dangerous, you can send commands to the SCM and try to reel it in. These maneuvers may not be the best or most practical way to administer your system, but they do show you how the various services are related. They also help remove the GUI cover to demonstrate that NT isn’t a monolithic application. Rather, it’s a large set of interrelated services that come together to create a robust environment for user applications.

comments powered by Disqus
Most   Popular