OpenSCManager  138U7WK 

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 CreateService2WNG26 function to create a service object and add it to the database.

SC_MANAGER_ENUMERATE_SERVICE

 

 

Enables calling of the EnumServicesStatusY21_8W function to list the services that are in the database.

SC_MANAGER_LOCK

 

 

Enables calling of the LockServiceDatabase23K5HC function to acquire a lock on the database.

SC_MANAGER_QUERY_LOCK_STATUS

 

 

Enables calling of the QueryServiceLockStatusDKGKOU function to retrieve the lock status information for the database.

 

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 GetLastError11C2VS7.

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 OpenService20GSKY6, EnumServicesStatusY21_8W, and QueryServiceLockStatusDKGKOU functions. Only processes with Administrator privileges are able to open a database handle used by the CreateService2WNG26 and LockServiceDatabase23K5HC functions.

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

CloseServiceHandle, CreateService, EnumServicesStatus, LockServiceDatabase, OpenService, QueryServiceLockStatus