Официальный сайт студ.городка НГТУ
Программирование и БД » Службы Windows 

#1  19.11.06 22:56

Службы Windows

Никто не знает, как вручную/програмно создать/удалить службу в MustDie?

Offline

#2  23.11.06 19:19

Re: Службы Windows

а програмно можно с помощью CreateService либо Win32_Service.Create

Offline

#3  24.11.06 09:40

Re: Службы Windows

создай в том же билдере или делфи (или в чем ты там работаешь) проект WindowsService... там идет обработка параметров комадной строки... смотри код в -uninstall, /u, /uninstall и т.п.

Offline

#4  24.11.06 13:52

Re: Службы Windows

При старте ОС запускается менеджер служб(SCM Manager).Считывая данные из реестра (имя сервиса, способ загрузки, тип драйвера и т.д.), он составляет базу данных для управления службами. Я опишу некоторые функции, с помощью которых можно управлять сервисами. Сначала требуется создать связь с этой базой данных (SCM database), затем передать указатель баз данных некоторым функциям, управляющими сервисами.

OpenSCManager

Как я уже сказал, первым делом нужно создать связь с базой данных SCM. Для этого служит функция OpenSCManager.

SC_HANDLE OpenSCManager(LPCTSTR lpMachineName, LPCTSTR lpDatabaseName, DWORD dwDesiredAccess);

LPCTSTR lpMachineName - указатель на строку, завершающуюся нулём, указывающую на имя локального компьютера. Этот параметр  можно установить в NULL.

LPCTSTR lpDatabaseName- указатель на строку, завершающуюся нулём, содержащая в себе имя открываемой базы данных.Этот параметр  также слудует установить в NULL.

DWORD dwDesiredAccess - этот параметр содержит в себе флаги, означащие права доступа к базе данных.Я не буду перечислять все флаги, в данной статье я рассматриваю только те возможности программирования служб, нужные для загрузки руткитов.

SC_MANAGER_ALL_ACCESS - стандартные права доступа к БД.
SC_MANAGER_CONNECT - разрешает соединяться с БД SCM.
SC_MANAGER_CREATE_SERVICE- разрешает создание новых сервисов.

Создав связь с БД SCM,вы можете управлять сервисами.

OpenService

Функция OpenService служит для получения описателя службы. Учтите, что эта функция не создаёт службу, для создания службы служит CreateService, а открывает уже созданную ранее службу.

SC_HANDLE OpenService(SC_HANDLE hSCManager, LPCTSTR lpServiceName, DWORD dwDesiredAccess );

SC_HANDLE hSCManager - указатель, возвращенный функцией OpenSCManager.

LPCTSTR lpServiceName - имя открываемого сервиса.

DWORD dwDesiredAccess- права с которыми мы можем открыть службу. Вот некоторые из них:

SERVICE_ALL_ACCESS- это стандартные права доступа.
SERVICE_START-разрешает запуск работы сервиса.
SERVICE_STOP-разрешает остановку работы сервиса.

Данная функция возвращает указатель открываемой службы. Получив его мы можем управлять службой в соответствии с заданными правами.

CreateService

Эта функция нужна для создания сервиса (службы).

SC_HANDLE CreateService(SC_HANDLE hSCManager, LPCTSTR lpServiceName, LPCTSTR lpDisplayName, DWORD dwDesiredAccess, DWORD dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCTSTR lpBinaryPathName, LPCTSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR lpDependencies, LPCTSTR lpServiceStartName, LPCTSTR lpPassword);

Первый параметр (hSCManager) указывает на указатель, возвращенный функцией OpenSCManager. Следующие два параметра указывают на строки, содержащие имя создаваемой службы и имя, которое будет использовано пользовательским интерфейсом. Следующий параметр содержит в себе флаги, определяющие права доступа к службе. Здесь используются те же флаги, что и в функции OpenService. В большинстве случаев понадобится установка этого флага в SERVICE_ALL_ACCESS. Параметр dwServiceType определяет тип создаваемого сервиса. В данном случае нужно установить его в SERVICE_KERNEL_DRIVER, что в свою очередь означает, что сервис будет управлять драйвером уровня ядра. Другие же значения означают, что это будет драйвер файловой системы и т.д. Параметр dwStartType очень важен, т.к определяет способ старта службы. В нашем случае его следует  установить в SERVICE_BOOT_START или SERVICE_AUTO_START, что означает практически одно и тоже - запуск службы во время запуска самой операционной системы. Параметр dwErrorControl указывает на способ обработки возникающих ошибок, в нашем случае его следует установить в SERVICE_ERROR_NORMAL. Следующий параметр - lpBinaryPathName - указатель на завершающуюся нулём строку, указывающую на полный путь к драйверу (в нашем случае руткиту), которым будет управлять служба. Следующие пать параметров следует установить в NULL, т.к. они не важны в данном случае.

Для запуска службы существует функция StartService.

BOOL StartService(SC_HANDLE hService, DWORD dwNumServiceArgs, LPCTSTR *lpServiceArgVectors);

SC_HANDLE hService - указатель службы, возвращённый функцией CreateService или OpenService. Параметр dwNumServiceArgs содержит в себе число параметров, указанных в масиве lpServiceArgVectors. В этом массиве указываются параметры, которые будут переданы службе. Учтите, что сервисы драйверов не используют этот параметр, поэтому два последних параметра в нашем случае нужно установить в NULL. Если функция выполнилась успешно, то она возвращает ненулевое значение. Функции для остановки службы нет, но ее можно легко написать с использованием функции ControlService:

BOOL ControlService(SC_HANDLE hService, DWORD dwControl, LPSERVICE_STATUS lpServiceStatus);

Параметр dwControl содержит флаги, с помощью которых вы задаёте, что нужно сделать со службой. Если вам нужно остановить работу службы, то можете установить её в SERVICE_CONTROL_STOP. С помощью этой функции можно и более удобно останавливать и запускать службу. Например для паузы работы сервиса, установите параметр dwControl в SERVICE_CONTROL_PAUSE, а для продолжения работы в SERVICE_CONTROL_CONTINUE. Параметр lpServiceStatus - указатель на структуру SERVICE_STATUS, куда заносится текущий статус службы. Установите его в NULL, если вам не важен текущий статус работы службы. Эта функция возвращает ненулевое значение при успешном выполнении.

Я перечислил все необходимые функции для загрузки руткитов (драйверов).Для закрытия структуры DT SCM используйте функцию CloseServiceHandle. Она принимает единственный параметр - DT SCM, т.е. описание, возвращённое функцией OpenSCManager.

(с)xakep.ru,кажется.

Offline

#5  24.11.06 21:52

Re: Службы Windows

тогда уж лучше обратиться к первоисточнику ;) Service Functions

Исправлено Logos (24.11.06 21:53)

Offline

Программирование и БД » Службы Windows 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.056 сек.
Выполнено 11 запросов.