В 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 перебирает все сервисы и заносит их в буфер. Но нужно указать менеджера, тип сервисов, буфер, размер буфера и так далее. |