OpenSCManager
The OpenSCManager
function establishes a connection to the service control manager on the
specified computer and opens the specified database.
SC_HANDLE OpenSCManager(
LPCTSTR lpMachineName, |
// pointer to
machine name string |
LPCTSTR lpDatabaseName, |
// pointer to
database name string |
DWORD dwDesiredAccess |
// type of access |
); |
|
Parameters
lpMachineName
Points to a
null-terminated string that names the target computer. If the pointer is NULL
or if it points to an empty string, the function connects to the service
control manager on the local computer.
lpDatabaseName
Points to a
null-terminated string that names the service control manager database to open.
This string should specify ServicesActive. If the pointer is NULL, the
ServicesActive database is opened by default.
dwDesiredAccess
Specifies the
access to the service control manager. Before granting the requested access,
the system checks the access token of the calling process against the discretionary
access-control list of the security descriptor associated with the service
control manager object. The SC_MANAGER_CONNECT access type is implicitly specified
by calling this function. In addition, any or all of the following service
control manager object access types can be specified:
Type |
Description |
SC_MANAGER_ALL_ACCESS |
|
|
Includes
STANDARD_RIGHTS_REQUIRED, in addition to all of the access types listed in
this table. |
SC_MANAGER_CONNECT |
|
|
Enables
connecting to the service control manager. |
SC_MANAGER_CREATE_SERVICE |
|
|
Enables
calling of the CreateService |
SC_MANAGER_ENUMERATE_SERVICE |
|
|
Enables
calling of the EnumServicesStatus |
SC_MANAGER_LOCK |
|
|
Enables
calling of the LockServiceDatabase |
SC_MANAGER_QUERY_LOCK_STATUS |
|
|
Enables
calling of the QueryServiceLockStatus |
The dwDesiredAccess
parameter can specify any or all of the following generic access types:
Generic
access |
Service
manager access |
GENERIC_READ |
Combines
the following access: STANDARD_RIGHTS_READ, SC_MANAGER_ENUMERATE_SERVICE, and
SC_MANAGER_QUERY_LOCK_STATUS. |
GENERIC_WRITE |
Combines
the following access: STANDARD_RIGHTS_WRITE, SC_MANAGER_CREATE_SERVICE, and
SC_MANAGER_MODIFY_BOOT_CONFIG. |
GENERIC_EXECUTE |
Combines
the following access: STANDARD_RIGHTS_EXECUTE, SC_MANAGER_CONNECT, and
SC_MANAGER_LOCK. |
Return Values
If the
function succeeds, the return value is a handle to the specified service
control manager database.
If the
function fails, the return value is NULL. To get extended error information,
call GetLastError
Errors
The following
error codes may be set by the service control manager. Other error codes may be
set by the registry functions that are called by the service control manager.
Error
code |
Meaning |
ERROR_ACCESS_DENIED |
The
requested access was denied. |
ERROR_DATABASE_DOES_NOT_EXIST |
The
specified database does not exist. |
ERROR_INVALID_PARAMETER |
A parameter
that was specified is invalid. |
Remarks
When a
process uses the OpenSCManager function to open a handle to a service
control manager database, the system performs a security check before granting
the requested access. All processes are permitted SC_MANAGER_CONNECT,
SC_MANAGER_ENUMERATE_SERVICE, and SC_MANAGER_QUERY_LOCK_STATUS access to all
service control manager databases. This enables any process to open a service
control manager database handle that it can use in the OpenService
The calling
process can use the returned handle to identify the database in the following
functions, if the appropriate access rights are enabled:
CreateService
EnumServicesStatus
LockServiceDatabase
OpenService
QueryServiceLockStatus
The returned
handle is only valid for the process that called the OpenSCManager function.
It can be closed by calling the CloseServiceHandle function.
See Also