OpenSCManager (advapi32)
Last changed: -95.220.199.28

.
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

User-Defined Types:

None.

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#:

        const int SC_MANAGER_CONNECT            = 0x01;
        const int SC_MANAGER_CREATE_SERVICE        = 0x02;
        const int SC_MANAGER_ENUMERATE_SERVICE    = 0x04;
        const int SC_MANAGER_LOCK                = 0x08;
        const int SC_MANAGER_QUERY_LOCK_STATUS    = 0x10;
        const int SC_MANAGER_MODIFY_BOOT_CONFIG    = 0x20;
        const int SC_MANAGER_ALL_ACCESS            = 0x3f;

    IntPtr handle = OpenSCManager( null, null, SCM_ACCESS.SC_MANAGER_ALL_ACCESS );
    if ( handle != IntPtr.Zero )
    {
        CloseServiceHandle( handle );
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation