[DllImport("advapi32.dll", EntryPoint="EnumServicesStatusW", ExactSpelling=true, SetLastError=true)]
static extern bool EnumServicesStatus( IntPtr hSCManager,
SERVICE_TYPES dwServiceType,
SERVICE_STATES dwServiceState,
IntPtr lpServices,
int cbBufSize,
ref int pcbBytesNeeded,
ref int lpServicesReturned,
ref int lpResumeHandle );
<DllImportAttribute("advapi32.dll", _
EntryPoint:="EnumServicesStatusW", _
SetLastError:=True, _
ExactSpelling:=True, _
CharSet:=CharSet.Unicode, _
CallingConvention:=CallingConvention.StdCall)> _
Shared Function EnumServicesStatus _
(ByVal hSCManager As IntPtr, _
ByVal dwServiceType As Integer, _
ByVal dwServiceState As Integer, _
ByVal lpServices As IntPtr, _
ByVal cbBufSize As Integer, _
ByRef pcbBytesNeeded As Integer, _
ByRef lpServicesReturned As Integer, _
ByRef lpResumeHandle As Integer) As Boolean
End Function
None.
None.
Please add some!
IntPtr handle = OpenSCManager( null, null, SCM_ACCESS.SC_MANAGER_ALL_ACCESS );
if ( handle != IntPtr.Zero )
{
int iBytesNeeded = 0;
int iServicesReturned = 0;
int iResumeHandle = 0;
if ( !EnumServicesStatus( handle,
SERVICE_TYPES.SERVICE_WIN32,
SERVICE_STATES.SERVICE_STATE_ALL,
IntPtr.Zero,
0,
ref iBytesNeeded,
ref iServicesReturned,
ref iResumeHandle ) )
{
IntPtr buf = Marshal.AllocHGlobal( (int) iBytesNeeded );
if ( !EnumServicesStatus( handle,
SERVICE_TYPES.SERVICE_WIN32,
SERVICE_STATES.SERVICE_STATE_ALL,
buf,
iBytesNeeded,
ref iBytesNeeded,
ref iServicesReturned,
ref iResumeHandle ) )
Debug.WriteLine("EnumServicesStatus Failed " + Marshal.GetLastWin32Error() );
else
{
ENUM_SERVICE_STATUS serviceStatus;
int iPtr = buf.ToInt32();
for ( int i = 0 ; i < (int) iServicesReturned; i++ )
{
serviceStatus = (ENUM_SERVICE_STATUS) Marshal.PtrToStructure(
new IntPtr(iPtr),
typeof(ENUM_SERVICE_STATUS) );
Debug.WriteLine("Service " + serviceStatus.pServiceName );
iPtr += ENUM_SERVICE_STATUS.SizeOf;
}
Debug.WriteLine("EnumServicesStatus Success");
}
}
}
Do you know one? Please contribute it!