[DllImport("advapi32.dll", SetLastError=true, CharSet=CharSet.Auto)]
public static extern IntPtr OpenSCManager(string machineName, string databaseName, SC_MANAGER_ACCESS dwAccess);
<DllImport("advapi32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function OpenSCManager(ByVal machineName As String, ByVal databaseName As String, ByVal desiredAccess As SC_MANAGER_ACCESS ) As IntPtr
End Function
[Flags]
public enum SC_MANAGER_ACCESS : uint
{
CONNECT = 0x0001,
CREATE_SERVICE = 0x0002,
ENUMERATE_SERVICE = 0x0004,
LOCK = 0x0008,
QUERY_LOCK_STATUS = 0x0010,
MODIFY_BOOT_CONFIG = 0x0020,
ALL_ACCESS = // STANDARD_RIGHTS_REQUIRED |
CONNECT |
CREATE_SERVICE |
ENUMERATE_SERVICE |
LOCK |
QUERY_LOCK_STATUS |
MODIFY_BOOT_CONFIG
}
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;
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
public const uint GENERIC_EXECUTE = 0x20000000;
public const uint GENERIC_ALL = 0x10000000;
IntPtr handle = OpenSCManager( null, null, SCM_ACCESS.SC_MANAGER_ALL_ACCESS );
if ( handle != IntPtr.Zero )
{
CloseServiceHandle( handle );
}
Do you know one? Please contribute it!