[DllImport("advapi32.dll", EntryPoint="OpenSCManagerW", ExactSpelling=true, CharSet=CharSet.Unicode, SetLastError=true)]
public static extern IntPtr OpenSCManager( string machineName, string databaseName, uint dwAccess );
<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
None.
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
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 );
}
Do you know one? Please contribute it!