|
Шаг 14 - Перечисление сервисов NT EnumServicesStatus.
В 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 перебирает все сервисы и заносит их в буфер. Но нужно указать менеджера, тип сервисов, буфер, размер буфера и так далее.
А вот результат работы.
Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
By Artem.
Используются технологии uCoz
|