A ServiceController osztályt felhasználva e kérdésekre is válaszokat kaphatunk. Ennek használatához azonban szükséges a System.ServiceProcess névtérre hivatkozni, melynek eléréséhez egy új referenciát is hozzá kell adnunk projektünkhöz. Ehhez válasszuk a Project - Add reference menüpontot, majd a .NET lapon keressük elő a System.ServiceProcess.dll-t, majd Select és OK gomb. Ettől kezdve a ServiceController osztály már elérhető.
Nézzük mire is lesz szükségünk ebből az osztályból:

GetDevices
Osztály: System.ServiceController
public static ServiceController[] GetDevices();
A GetDevices statikus függvénnyel lekérdezhetjük a lokális gépen lévő eszközmeghajtókat.
Visszatérési érték
Visszatérési értékként kapunk egy tömböt, melynek minden eleme egy-egy ServiceController osztály lesz, ami leírja az adott eszközmeghajtót.

ServiceName
Osztály: System.ServiceController
public string ServiceName {get; set;}
Az eszközvezérlő rövidített neve.

DisplayName
Osztály: System.ServiceController
public string DisplayName {get; set;}
Az eszközvezérlő megnevezése, leírása.

ServiceType
Osztály: System.ServiceController
public ServiceType ServiceType {get;}
Az eszközvezérlő típusa. Lehetséges értéke az alábbiak egyike:
| Típus |
Leírás |
| Adapter |
Hardver eszköz meghajtója. |
| FileSystemDriver |
Állományrendszer meghajtója. |
| InteractiveProcess |
Felhasználói felülettel rendelkező szerviz. |
| KernelDriver |
Kernel szintű eszközmeghajtó. |
| RecognizerDriver |
Állományrendszer meghajtó, mely a gép indulásakor kap szerepet annak eldöntésére, hogy milyen típusú állományrendszer is van a meghajtón. |
| Win32OwnProcess |
Win32 típusú szerviz. |
| Win32ShareProcess |
Win32 típusú szerviz, mely megosztható más szervizekkel. |

Status
Osztály: System.ServiceController
public ServiceControllerStatus Status {get;}
Az eszközvezérlő státusza.

CanPauseAndContinue
Osztály: System.ServiceController
public bool CanPauseAndContinue {get;}
Igaz, ha az eszközvezérlő megállítható és továbbindítható.

CanShutdown
Osztály: System.ServiceController
public bool CanShutdown {get;}
Igaz, ha az eszközvezérlő futása befejezhető.

CanStop
Osztály: System.ServiceController
public bool CanStop {get;}
Igaz, ha az eszközvezérlő leállítható.
private void button1_Click(object sender, System.EventArgs e)
{
ServiceController[] sc = ServiceController.GetDevices();
...
for (int i=0; i<sc.Length; i++)
{
s[0] = sc[i].ServiceName;
s[1] = sc[i].DisplayName;
s[2] = sc[i].ServiceType.ToString();
s[3] = sc[i].CanStop.ToString();
s[4] = sc[i].Status.ToString();
listView1.Items.Add(new ListViewItem(s));
}
}