Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

OpenSCManager (advapi32)
 
.
Summary
The OpenSCManager function establishes a connection to the service control manager on the specified computer and opens the specified service control manager database.

C# Signature:

    [DllImport("advapi32.dll", EntryPoint="OpenSCManagerW", ExactSpelling=true, CharSet=CharSet.Unicode, SetLastError=true)]
    public static extern IntPtr OpenSCManager(string machineName, string databaseName, uint dwAccess);

VB Signature:

    <DllImport("advapi32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
    Private Shared Function OpenSCManager(ByVal machineName As String, ByVal databaseName As String, ByVal desiredAccess As Int32) As IntPtr
    End Function

VB .NET Signature:

    Declare Function OpenSCManager Lib "advapi32.dll" Alias "OpenSCManagerA" (ByVal lpMachineName As String, ByVal lpDatabaseName As String, ByVal dwDesiredAccess As Integer) As Integer

C# User-Defined Types:

See ACCESS_MASK definition

User-Defined Types:

None.

   [Flags]
    public enum SCM_ACCESS : uint
    {
    /// <summary>
    /// Required to connect to the service control manager.
    /// </summary>
    SC_MANAGER_CONNECT = 0x00001,

C# User-Defined Types:

See ACCESS_MASK definition

   [Flags]
    public enum SCM_ACCESS : uint
    {
    /// <summary>
    /// Required to call the CreateService function to create a service
    /// object and add it to the database.
    /// Required to connect to the service control manager.
    /// </summary>
    SC_MANAGER_CREATE_SERVICE = 0x00002,
    SC_MANAGER_CONNECT = 0x00001,

    /// <summary>
    /// Required to call the EnumServicesStatusEx function to list the
    /// services that are in the database.
    /// Required to call the CreateService function to create a service
    /// object and add it to the database.
    /// </summary>
    SC_MANAGER_ENUMERATE_SERVICE = 0x00004,
    SC_MANAGER_CREATE_SERVICE = 0x00002,

    /// <summary>
    /// Required to call the LockServiceDatabase function to acquire a
    /// lock on the database.
    /// Required to call the EnumServicesStatusEx function to list the
    /// services that are in the database.
    /// </summary>
    SC_MANAGER_LOCK = 0x00008,
    SC_MANAGER_ENUMERATE_SERVICE = 0x00004,

    /// <summary>
    /// Required to call the QueryServiceLockStatus function to retrieve
    /// the lock status information for the database.
    /// Required to call the LockServiceDatabase function to acquire a
    /// lock on the database.
    /// </summary>
    SC_MANAGER_QUERY_LOCK_STATUS = 0x00010,
    SC_MANAGER_LOCK = 0x00008,

    /// <summary>
    /// Required to call the NotifyBootConfigStatus function.
    /// Required to call the QueryServiceLockStatus function to retrieve
    /// the lock status information for the database.
    /// </summary>
    SC_MANAGER_MODIFY_BOOT_CONFIG = 0x00020,
    SC_MANAGER_QUERY_LOCK_STATUS = 0x00010,

    /// <summary>
    /// Includes STANDARD_RIGHTS_REQUIRED, in addition to all access
    /// rights in this table.
    /// Required to call the NotifyBootConfigStatus function.
    /// </summary>
    SC_MANAGER_ALL_ACCESS = ACCESS_MASK.STANDARD_RIGHTS_REQUIRED |
        SC_MANAGER_CONNECT |
        SC_MANAGER_CREATE_SERVICE |
        SC_MANAGER_ENUMERATE_SERVICE |
        SC_MANAGER_LOCK |
        SC_MANAGER_QUERY_LOCK_STATUS |
        SC_MANAGER_MODIFY_BOOT_CONFIG,
    SC_MANAGER_MODIFY_BOOT_CONFIG = 0x00020,

    GENERIC_READ = ACCESS_MASK.STANDARD_RIGHTS_READ |
        SC_MANAGER_ENUMERATE_SERVICE |
        SC_MANAGER_QUERY_LOCK_STATUS,

    GENERIC_WRITE = ACCESS_MASK.STANDARD_RIGHTS_WRITE |
    /// <summary>
    /// Includes STANDARD_RIGHTS_REQUIRED, in addition to all access
    /// rights in this table.
    /// </summary>
    SC_MANAGER_ALL_ACCESS = ACCESS_MASK.STANDARD_RIGHTS_REQUIRED |
        SC_MANAGER_CONNECT |
        SC_MANAGER_CREATE_SERVICE |
        SC_MANAGER_ENUMERATE_SERVICE |
        SC_MANAGER_LOCK |
        SC_MANAGER_QUERY_LOCK_STATUS |
        SC_MANAGER_MODIFY_BOOT_CONFIG,

    GENERIC_EXECUTE = ACCESS_MASK.STANDARD_RIGHTS_EXECUTE |
        SC_MANAGER_CONNECT | SC_MANAGER_LOCK,
    GENERIC_READ = ACCESS_MASK.STANDARD_RIGHTS_READ |
        SC_MANAGER_ENUMERATE_SERVICE |
        SC_MANAGER_QUERY_LOCK_STATUS,

    GENERIC_ALL = SC_MANAGER_ALL_ACCESS,
    }
    GENERIC_WRITE = ACCESS_MASK.STANDARD_RIGHTS_WRITE |
        SC_MANAGER_CREATE_SERVICE |
        SC_MANAGER_MODIFY_BOOT_CONFIG,

VB User-Defined Types:

See ACCESS_MASK definition

    GENERIC_EXECUTE = ACCESS_MASK.STANDARD_RIGHTS_EXECUTE |
        SC_MANAGER_CONNECT | SC_MANAGER_LOCK,

  <Flags()> _
  Public Enum SCM_ACCESS : UInt
    GENERIC_ALL = SC_MANAGER_ALL_ACCESS,
    }

    ''' <summary>
    ''' Required to connect to the service control manager.
    ''' </summary>
    SC_MANAGER_CONNECT = &H1

Notes:

    ''' <summary>
    ''' Required to call the CreateService function to create a service
    ''' object and add it to the database.
    ''' </summary>
    SC_MANAGER_CREATE_SERVICE = &H2

    ''' <summary>
    ''' Required to call the EnumServicesStatusEx function to list the
    ''' services that are in the database.
    ''' </summary>
    SC_MANAGER_ENUMERATE_SERVICE = &H4

Tips & Tricks:

Pass in Null/Nothing for MachineName to use the local machine.

Pass in Null/nothing as the database name to use the default SERVICES_ACTIVE_DATABASE

    ''' <summary>
    ''' Required to call the LockServiceDatabase function to acquire a
    ''' lock on the database.
    ''' </summary>
    SC_MANAGER_LOCK = &H8

Sample Code:

VB:
Const STANDARD_RIGHTS_REQUIRED As Int32 = &HF0000

    ''' <summary>
    ''' Required to call the QueryServiceLockStatus function to retrieve
    ''' the lock status information for the database.
    ''' </summary>
    SC_MANAGER_QUERY_LOCK_STATUS = &H10
    Const SC_MANAGER_CONNECT As Int32 = &H1
    Const SC_MANAGER_CREATE_SERVICE As Int32 = &H2
    Const SC_MANAGER_ENUMERATE_SERVICE As Int32 = &H4
    Const SC_MANAGER_LOCK As Int32 = &H8
    Const SC_MANAGER_QUERY_LOCK_STATUS As Int32 = &H10
    Const SC_MANAGER_MODIFY_BOOT_CONFIG As Int32 = &H20

    ''' <summary>
    ''' Required to call the NotifyBootConfigStatus function.
    ''' </summary>
    SC_MANAGER_MODIFY_BOOT_CONFIG = &H20
    Const SC_MANAGER_ALL_ACCESS As Int32 = STANDARD_RIGHTS_REQUIRED Or _
                        SC_MANAGER_CONNECT Or _
                        SC_MANAGER_CREATE_SERVICE Or _
                        SC_MANAGER_ENUMERATE_SERVICE Or _
                        SC_MANAGER_LOCK Or _
                        SC_MANAGER_QUERY_LOCK_STATUS Or _
                        SC_MANAGER_MODIFY_BOOT_CONFIG

    ''' <summary>
    ''' Includes STANDARD_RIGHTS_REQUIRED, in addition to all access
    ''' rights in this table.
    ''' </summary>
    SC_MANAGER_ALL_ACCESS = ACCESS_MASK.STANDARD_RIGHTS_REQUIRED Or _
    SC_MANAGER_CONNECT Or _
    SC_MANAGER_CREATE_SERVICE Or _
    SC_MANAGER_ENUMERATE_SERVICE Or _
    SC_MANAGER_LOCK Or _
    SC_MANAGER_QUERY_LOCK_STATUS Or _
    SC_MANAGER_MODIFY_BOOT_CONFIG
    Dim scHandle As IntPtr = OpenSCManager(Nothing, Nothing, SC_MANAGER_ALL_ACCESS )
    MsgBox(scHandle.ToString)
    CloseServiceHandle(scHandle)
C#:
    IntPtr handle = OpenSCManager( null, null, (uint)SCM_ACCESS.SC_MANAGER_ALL_ACCESS );
    if ( handle != IntPtr.Zero )
    {
        CloseServiceHandle( handle );
    }

    GENERIC_READ = ACCESS_MASK.STANDARD_RIGHTS_READ Or _
    SC_MANAGER_ENUMERATE_SERVICE Or _
    SC_MANAGER_QUERY_LOCK_STATUS

    GENERIC_WRITE = ACCESS_MASK.STANDARD_RIGHTS_WRITE Or _
    SC_MANAGER_CREATE_SERVICE Or _
    SC_MANAGER_MODIFY_BOOT_CONFIG

Alternative Managed API:

Do you know one? Please contribute it!

    GENERIC_EXECUTE = ACCESS_MASK.STANDARD_RIGHTS_EXECUTE Or _
    SC_MANAGER_CONNECT Or SC_MANAGER_LOCK

    GENERIC_ALL = SC_MANAGER_ALL_ACCESS

  End Enum

Notes:

Tips & Tricks:

Pass in Null/Nothing for MachineName to use the local machine.

Pass in Null/nothing as the database name to use the default SERVICES_ACTIVE_DATABASE

Sample Code:

VB:
Const STANDARD_RIGHTS_REQUIRED As Int32 = &HF0000

    Const SC_MANAGER_CONNECT As Int32 = &H1
    Const SC_MANAGER_CREATE_SERVICE As Int32 = &H2
    Const SC_MANAGER_ENUMERATE_SERVICE As Int32 = &H4
    Const SC_MANAGER_LOCK As Int32 = &H8
    Const SC_MANAGER_QUERY_LOCK_STATUS As Int32 = &H10
    Const SC_MANAGER_MODIFY_BOOT_CONFIG As Int32 = &H20

    Const SC_MANAGER_ALL_ACCESS As Int32 = STANDARD_RIGHTS_REQUIRED Or _
                        SC_MANAGER_CONNECT Or _
                        SC_MANAGER_CREATE_SERVICE Or _
                        SC_MANAGER_ENUMERATE_SERVICE Or _
                        SC_MANAGER_LOCK Or _
                        SC_MANAGER_QUERY_LOCK_STATUS Or _
                        SC_MANAGER_MODIFY_BOOT_CONFIG

    Dim scHandle As IntPtr = OpenSCManager(Nothing, Nothing, SC_MANAGER_ALL_ACCESS )
    MsgBox(scHandle.ToString)
    CloseServiceHandle(scHandle)
C#:
    IntPtr handle = OpenSCManager( null, null, (uint)SCM_ACCESS.SC_MANAGER_ALL_ACCESS );
    if ( handle != IntPtr.Zero )
    {
        CloseServiceHandle( handle );
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions