C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 14 - Перечисление сервисов NT EnumServicesStatus / Win 32 API / Win32 API

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

А вот результат работы.

14.gif (6174 b)


Загрузить проект | | |
Автор Каев Артем.
[AD]