на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Розробка служби Win32

Розробка служби Win32

32

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ

«КИЇВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

ФІЗИКО-ТЕХНІЧНИЙ ІНСТИТУТ

КУРСОВА РОБОТА

з дисципліни «Системне програмування»

на тему

« Розробка служби Win32 »

Виконав: студент IV курсу ФТІ групи ФБ-21

Ігнатьєв Сергій Ігорович

Київ 2009

Зміст курсової роботи

  • 1. Завдання на курсову роботу
  • 2. Ідея розв'язку задачі та теоретичне обгрунтування її вибору
  • 3. Опис функцій, які використовувалися для програмної реалізації служби
  • Висновки
  • Література
  • Програмна реалізація
1. Завдання на курсову роботу

Розробити службу Win32, яка перевантажує комп'ютер не відразу, а через деякий час, щоб користувач міг завершити почату роботу.

2. Ідея розв'язку задачі та теоретичне обгрунтування її вибору

2.1 Теоретичн
і відомості

Служби - це життєво важлива і разом з тим таємнича частина Windows. Якщо раніше ви вже працювали з Windows або адміністрували системи працюючі під цією ОС, то мабуть ви вже зустрічалися зі службами. Що ж це таке? Сама проста відповідь: служба - це програма, яка працює не в контексті користувача. Іншими словами, служби продовжують працювати тоді, коли один користувач відключається від системи і до неї підключається інший користувач. Служби - це єдина категорія програм, які можуть робити в такому режимі.

В Windows служби використовуються для розв'язку багатьох важних задач, наприклад, існує служба, яка дозволяє вам підключатися до комп'ютера, очевидно, що така програма повинна продовжувати працювати навіть в випадку коли до системи не підключено ні одного користувача. Інші служби забезпечують сумісний доступ до диску і принтеру, а також являються допоміжними по відношенню до драйверів дискових пристроїв.

З точки зору програміста, служби - це звичайні програми, які мають засіб зв'язку з диспетчером служб SCM (Service Control Manager). Диспетчер SCM - це внутрішній механізм Windows, який здійснює керування службами. В Windows NT 4 користувач взаємодіє з SCM за допомогою аплету Services Control Panel. В Windows 2000 ту ж функцію виконує один із модулів консолі ММС. Список функцій які зв'язані зі службами, приведений в таблиці 1.

Як і будь-яка інша консольна програма, служба має функцію main. Одна програма може забезпечити роботу одної служби, а може включати в себе зразу декілька служб. Функція main заповнює масив, який описує всі служби, які підтримує програма. Масив передається службою StartServiceCtrlDispatcher. Для кожної служби, яка входить в склад файла, який використовується, цей масив містить текстовий ідентифікатор і точку входу.

Точка входу служби нагадує собою функцію main. Це функція, яка приймає звичайні аргументи argc і argv.

Таблиця 1. Функції служб.

Функція

Призначення

ChangeServiceConfig

Змінити конфігурацію

ChangeServiceConfig2

Змінити додаткову конфігурацію (Win2000)

CloseServiceHandle

Закриває службу або дескриптор SCM

ControlService

Посилає службі керуючий запит

CreateService

Створює службу

DeleteService

Видаляє службу

EnumDependentServices

Визначає служби, які потребує та чи інша служба

EnumServicesStatus

Послідовно перебирає служби в базі даних SCM

GetServiceDisplayName

Повертає ім'я дисплея

GetServiceKeyName

Повертає ключ реєстру для даної служби

LockServiceDatabase

Блокує базу даних SCM

OpenSCManager

Відкриває SCM

OpenService

Відкриває існуючу службу

QueryServiceConfig

Повертає конфігурацію служби

QueryServiceConfig2

Повертає додаткову конфігурацію служби (Win2000)

QueryServiceLockStatus

Повертає інформацію про статус блокування SCM

QueryServiceObjectSecurity

Повертає інформацію про захист служби

QueryServiceStatus

Повертає стан служби

RegisterServiceCtrlHandler

Реєструє функцію керування службою

SetServiceBits

Настроює прапори, які пов'язанні зі службою

SetServiceObjectSecurity

Настроює захист доступу до служби

SetServiceStatus

Встановлює стан служби

StartService

Запускає службу

StartServiceCtrlDispatcher

Реєструє службу в SCM

UnlockServiceDatabase

Деблокує базу даних SCM

В процесі звернення SCM до функції, яка є точкою входу служби, важливу роль грає структура SERVICE_STATUS. Більшість служб зберігають статичну копію цієї структури і відновлюють її в випадку необхідності. Функція, яка є точкою входу, використовує виклик RegisterServiceCtrlHandler для того, щоб зареєструвати обробник, який призначений для взаємодії SCM зі службою. Крім цього підпрограма ініціалізації служби звертається до виклику SetServiceStatus для того, щоб проінформувати SCM про поточний стан служби (служба може знаходитися в одному із станів: ініціалізація, функціонування або зупинка). Якщо ініціалізація потребує більше ніж декілька секунд, то потрібно виконати її в окремому програмному потоці.

Створення окремого програмного потоку потрібне також в випадку, якщо ви хочете створити службу, яка буде працювати виключно в фоновому режимі. Наприклад, якщо ви хочете розробити службу, яка кожну годину видає звуковий сигнал, який імітує роботу години каз боєм, то вам потрібно створити програмний потік, який буде слідкувати за часом і видавати звуковий потік.

Диспетчер SCM звертається до обробника також в випадку, якщо потрібно визначити поточний стан служби. Крім цього служба визначає інші спеціальні види запитів, які можна адресувати службі за допомогою виклику ControlService (цей виклик є частиною диспетчера SCM). Звичайно ж, для того щоб направити службі запит, необхідно мати необхідні полномочиями.

Встановлення служб

Щоб встановити службу, необхідно добавити в реєстр декілька записів. Частіше за все ця процедура виконується за допомогою SCM. Для цього необхідно відкрити SCM (за допомогою виклику OpenSCManager), а потім звернутися до виклику CreateService. В якості аргументів цей виклик приймає ім'я файлу, в якому міститься служба, а також іншу необхідну інформацію. При цьому в реєстр вносяться всі необхідні записи.

Виклик CreateService використовує 13 аргументів, що може визвати легкий переляк в тих програмістів, які не мали з ним діла (список цих аргументів приведений в табл.2). Насправді звернутися до цієї функції зовсім не важко. Діло в тому, що при зверненні до CreateService більшості аргументів можна присвоїти значення за замовчуванням. Параметр dwServiceType може мати одне із значень: SERVICE_WIN32_OWN_PROCESS (у випадку, якщо в файлі, який виповнює, міститься тільки одна служба) або SERVICE_WIN32_SHARE_PROCESS (у випадку, якщо в події файлу, який виконує, входять декілька служб). Інші прапори дозволяють вказувати є служба драйвером ядра чи драйвером файлової системи.

Таблиця2. Аргументи виклику CreateService

Аргумент

Тип

Опис

hSCManager

SC_HANDLE

Обробник для SCM

lpServiceName

LPCTSTR

Коротке ім'я служби

lpDisplayName

LPCTSTR

Ім'я служби, яке відображається

dwDesiredAccess

DWORD

Рівень доступу до служби, який потребується

dwServiceType

DWORD

Тип

dwStartType

DWORD

Коли запускати службу

dwErrorControl

DWORD

Що робити, якщо служба не запрацювала

lpBinaryPathName

LPCTSTR

Ім'я файлу, в якому міститься служба

lpLoadOrderGroup

LPCTSTR

Ім'я групи служб, які запускаються одночасна

lpdwTagId

DWORD

Порядок завантаження в групі

lpDependencles

LPCTSTR

Показник на масив імен служб, які потрібні для роботи даної служби

lpServiceStartName

LPCTSTR

Ім'я облікового запису, який буде використовуватися при запуску служби (NULL відповідає обліковому запису LocalSystem)

lpPassword

LPCTSTR

Пароль для облікового запису (якщо потребується)

Служби NT.

В принципі сервери можуть працювати безкінечно довго, обслуговувати при цьому велику кількість клієнтів, які підключаються, відправляють запити, отримують відповіді і відключаються. Таким чином, ці „сервери” можуть давати неперервні послуги, тобто бути службами, але для повної ефективності служби повинні бути керуючими.

Служби
NT в Windows NT і 2000 дають можливість перетворити сервери в служби, які можна буде запускати по команді або при запуску системи, призупиняти, відновлювати і завершати. Служби NT дозволяють навіть наглядати за „станом здоров'я” служби. В кінці кінців, будь-які серверні системи потрібно перетворювати в служби NT, особливо якщо вони будуть інтенсивно використовуватися в організації або замовниками. А Windows 2000/NT є багато служб, наприклад керування telnet і обліковими записами безпеки, а також драйвери пристроїв. На панелі керування можна визвати програму адміністрування, яка відображає повний набір служб.

Програма JobShell дає елементарні засоби керування серверами, які дозволяють запускати сервер під керуванням завданням і відправляти сигнал завершення. Служби NT набагато складніше і надійніше. Для того, щоб продемонструвати це функція JobShell буде модифікована так, щоб вона могла керувати службами NT.

Також тут буде показано, як перетворити даний консольний додаток в службу NT і як встановити цю службу, керувати нею і контролювати її. Описується також реєстрація подій, завдяки якої служба може фіксувати свої дії в журналі.

Служби Windows NT. Огляд.

Служби NTпрацюють під керуванням диспетчера керування службами (Service Control Manager - SCM). Для перетворення консольного додатку, такого як serverNT чи serverSK, в службу NT, потрібно виконати три основні дії, в результаті яких програма переходить під керування SCM.

1. Створити нову точку входу main(), яка буде реєструвати службу в SCM , інформуючи про точки входу і імена логічних служб.

2. Перетворювати попередню функцію точки входу main() в ServiceMain(), яка буде реєструвати обробник керування служби і інформувати SCM про його стан. Другий код зберігається практично без змін.

Страницы: 1, 2



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.