QUERY_SERVICE_CONFIG
The QUERY_SERVICE_CONFIG
structure is used by the QueryServiceConfig
typedef struct _QUERY_SERVICE_CONFIG { // qsc
DWORD
dwServiceType;
DWORD
dwStartType;
DWORD
dwErrorControl;
LPTSTR
lpBinaryPathName;
LPTSTR
lpLoadOrderGroup;
DWORD
dwTagId;
LPTSTR
lpDependencies;
LPTSTR
lpServiceStartName;
LPTSTR
lpDisplayName;
} QUERY_SERVICE_CONFIG, LPQUERY_SERVICE_CONFIG;
Members
dwServiceType
The value
returned includes one of the following service type flags to indicate the type
of service. In addition, for a SERVICE_WIN32 service, the
SERVICE_INTERACTIVE_PROCESS flag might be set, indicating that the service
process can interact with the desktop.
Value |
Meaning |
SERVICE_WIN32_OWN_PROCESS |
A service
type flag that indicates a Win32 service that runs in its own process. |
SERVICE_WIN32_SHARE_PROCESS |
A service
type flag that indicates a Win32 service that shares a process with other
services. |
SERVICE_KERNEL_DRIVER |
A service
type flag that indicates a Windows NT device driver. |
SERVICE_FILE_SYSTEM_DRIVER |
A service
type flag that indicates a Windows NT file system driver. |
SERVICE_INTERACTIVE_PROCESS
|
A flag that
indicates a Win32 service process that can interact with the desktop. |
dwStartType
Specifies
when to start the service. One of the following values is specified:
Value |
Meaning |
SERVICE_BOOT_START |
Specifies a
device driver started by the operating system loader. This value is valid
only if the service type is SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER. |
SERVICE_SYSTEM_START |
Specifies a
device driver started by the IoInitSystem function. This value is
valid only if the service type is SERVICE_KERNEL_DRIVER or
SERVICE_FILE_SYSTEM_DRIVER. |
SERVICE_AUTO_START |
Specifies a
device driver or Win32 service started by the service control manager
automatically during system startup. |
SERVICE_DEMAND_START |
Specifies a
device driver or Win32 service started by the service control manager when a
process calls the StartService |
SERVICE_DISABLED |
Specifies a
device driver or Win32 service that can no longer be started. |
dwErrorControl
Specifies the
severity of the error if this service fails to start during startup, and
determines the action taken by the startup program if failure occurs. One of
the following values can be specified:
Value |
Meaning |
SERVICE_ERROR_IGNORE |
|
|
The startup
(boot) program logs the error but continues the startup operation. |
SERVICE_ERROR_NORMAL |
|
|
The startup
program logs the error and displays a message box pop-up but continues the
startup operation. |
SERVICE_ERROR_SEVERE |
|
|
The startup
program logs the error. If the last-known good configuration is being
started, the startup operation continues. Otherwise, the system is restarted
with the last-known-good configuration. |
SERVICE_ERROR_CRITICAL |
|
|
The startup
program logs the error, if possible. If the last-known good configuration is
being started, the startup operation fails. Otherwise, the system is
restarted with the last-known good configuration. |
lpBinaryPathName
Points to a
null-terminated string that contains the fully qualified path to the service
binary file.
lpLoadOrderGroup
Points to a
null-terminated string that names the load ordering group of which this service
is a member. If the pointer is NULL or if it points to an empty string, the
service does not belong to a group. The registry has a list of load ordering
groups located at:
HKEY_LOCAL_MACHINE\System
\CurrentControlSet\Control\ServiceGroupOrder.
The startup program uses this list to load groups of services in a
specified order with respect to the other groups in the list. You can place a
service in a group so that another service can depend on the group.
The order in which a service starts is determined by the following
criteria:
1. The order of groups in the registry s load-ordering group list.
Services in groups in the load-ordering group list are started first, followed
by services in groups not in the load-ordering group list and then services
that do not belong to a group.
2. The service s dependencies listed in the lpszDependencies
parameter and the dependencies of other services dependent on the service.
dwTagId
Specifies a
unique tag value for this service in the group specified by the lpLoadOrderGroup
parameter. A value of zero indicates that the service has not been assigned a
tag. You can use a tag for ordering service startup within a load order group
by specifying a tag order vector in the registry located at:
HKEY_LOCAL_MACHINE\System\CurrentControlSet
\Control\GroupOrderList
Tags are only evaluated for SERVICE_KERNEL_DRIVER and
SERVICE_FILE_SYSTEM_DRIVER type services that have SERVICE_BOOT_START or
SERVICE_SYSTEM_START start types.
lpDependencies
Points to an
array of null-separated names of services or load ordering groups that must
start before this service. The array is doubly null-terminated. If the pointer
is NULL or if it points to an empty string, the service has no dependencies. If
a group name is specified, it must be prefixed by the SC_GROUP_IDENTIFIER
(defined in the WINSVC.H file) character to differentiate it from a service
name, because services and service groups share the same name space. Dependency
on a service means that this service can only run if the service it depends on
is running. Dependency on a group means that this service can run if at least
one member of the group is running after an attempt to start all members of the
group.
lpServiceStartName
Points to a
null-terminated string. If the service type is SERVICE_WIN32_OWN_PROCESS or
SERVICE_WIN32_SHARE_PROCESS, this name is the account name in the form of
DomainName\Username , which the service process will be logged on as when it
runs. If the account belongs to the built-in domain, .\Username can be
specified. If NULL is specified, the service will be logged on as the
LocalSystem account.
If the service type is SERVICE_KERNEL_DRIVER or
SERVICE_FILE_SYSTEM_DRIVER, this name is the Windows NT driver object name
(that is, \FileSystem\Rdr or \Driver\Xns) which the input and output (I/O)
system uses to load the device driver. If NULL is specified, the driver is run
with a default object name created by the I/O system based on the service name.
lpDisplayName
Points to a
null-terminated string that is to be used by user interface programs to
identify the service. This string has a maximum length of 256 characters. The
name is case-preserved in the service control manager. Display name comparisons
are always case-insensitive.
Remarks
The
configuration information for a service is initially specified when the service
is created by a call to the CreateService function. The information can
be modified by calling the ChangeServiceConfig function.
See Also