QueryServiceStatus (advapi32)
Last changed: Arjan Mels-77.160.7.209

.
Summary
The QueryServiceStatusEx function retrieves the current status of the specified service based on the specified information level.

C# Signature:

    [DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    static extern bool QueryServiceStatusEx(IntPtr serviceHandle, int infoLevel, IntPtr buffer, int bufferSize, out int bytesNeeded);

VB.net Signature:

<DllImport("advapi32.dll", CharSet := CharSet.Unicode, SetLastError := True)> _
Public Shared Function QueryServiceStatusEx(serviceHandle As IntPtr, infoLevel As Integer, buffer As IntPtr, bufferSize As Integer, ByRef bytesNeeded As Integer) As Boolean
End Function

User-Defined Types:

    [Flags]
    enum ServiceState : int
    {
        SERVICE_CONTINUE_PENDING= 0x00000005,
        SERVICE_PAUSE_PENDING   = 0x00000006,
        SERVICE_PAUSED      = 0x00000007,
        SERVICE_RUNNING     = 0x00000004,
        SERVICE_START_PENDING   = 0x00000002,
        SERVICE_STOP_PENDING    = 0x00000003,
        SERVICE_STOPPED     = 0x00000001
    }

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

For infoLevel only SC_STATUS_PROCESS_INFO (0x0) is allowed .

See SERVICE_STATUS_PROCESS definition.

See OpenService to get the hService.

None.

Tips & Tricks:

Please add some!

Sample Code:

    public static SERVICE_STATUS_PROCESS QueryServiceStatusEx(IntPtr serviceHandle)
    {
        IntPtr buf = IntPtr.Zero;
        try
        {
        int size = 0;

        QueryServiceStatusEx(serviceHandle, 0, buf, size, out size);

        buf = Marshal.AllocHGlobal(size);

        if (!QueryServiceStatusEx(serviceHandle, 0, buf, size, out size))
        {
            throw new Win32Exception(Marshal.GetLastWin32Error());
        }

        return (SERVICE_STATUS_PROCESS)Marshal.PtrToStructure(buf, typeof(SERVICE_STATUS_PROCESS));
        }
        finally
        {
        if (!buf.Equals(IntPtr.Zero))
            Marshal.FreeHGlobal(buf);
        }
    }

Documentation