В Windows NT есть понятие сервисов. Сервис - это исполняемый объект. Простым языком это модуль или драйвер, но сделанный так, что его работой можно управлять - запускать и останавливать в любое время. Посмотреть существующие сервисы можно здесь - Control Panel -> Services.
Давайте попробуем создать свою программу, которая будет перечислять сервисы.
#include "stdafx.h" #include "windows.h" #include "iostream.h" #define SIZE_BUF 4096 void main() { ENUM_SERVICE_STATUS Status[SIZE_BUF]; DWORD Size = sizeof(Status); DWORD Needed = 0; DWORD Return = 0; DWORD Handle = 0; SC_HANDLE Manager; Manager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); if (Manager!=NULL) { if (EnumServicesStatus(Manager,SERVICE_WIN32,SERVICE_ACTIVE, (LPENUM_SERVICE_STATUS)&Status,Size,&Needed,&Return,&Handle)) { for (unsigned int x=0; x < Return; x++) cout << Status[x].lpServiceName << endl; } else cout << "Error Open Manager " << endl; } else cout << "Error enum Services" << endl; }
Давайте попробуем разобраться. Первая функция, которую мы вызываем это OpenSCManager. Эта функция устанавливает связь с менеджером NT ответственным за работу с сервисами. Вот она:
SC_HANDLE OpenSCManager( LPCTSTR lpMachineName, // имя машина LPCTSTR lpDatabaseName, // имя менеджера DWORD dwDesiredAccess // тип доступа );
Как видите некоторые значения можно устанавливать в NULL. Функция EnumServicesStatus перебирает все сервисы и заносит их в буфер. Но нужно указать менеджера, тип сервисов, буфер, размер буфера и так далее.
А вот результат работы.