82653

Разработка программного обеспечения для дистанционного управления компьютерами, включенными в локальную сеть

Дипломная

Информатика, кибернетика и программирование

Целью работы является создание программного комплекса для дистанционного контроля, диагностики и слежения с целью: снижения затрат на обслуживание каждой машины; экономии электроэнергии; сокращения времени реагирования на проблемы пользователей; сокращения обслуживающего персонала...

Русский

2015-03-01

1.61 MB

6 чел.

АННОТАЦИЯ

Пояснительная записка содержит 121 лист, 26 рисунков, 10 таблиц.

В дипломном проекте разработан программный комплекс, для дистанционного управления компьютерами, включенными в локальную сеть.

В первой главе данной работы проведен обзор популярных программ дистанционного управления, сделан выбор технических решений.

Вторая глава посвящена описанию разрабатываемого программного обеспечения в среде «Borland C++ Builder 5.0» (для сервера) и «Microsoft Visual C++ 6.0» (для клиента). В ней перечислены все используемые модули и их функции.

В третьей главе рассмотрена структура программы, описаны основные функции, спроектирован программный интерфейс.

Четвертая глава посвящена экологичности и безопасности проекта, где изложены требования к рабочему месту сетевого администратора. Выполнен расчет систем комбинированного освещения и вентиляции в рабочем помещении.

Пятая глава – организационно-экономическая. В ней проведен расчет трудозатрат  и цены проекта, дано технико-экономическое обоснование целесообразности проекта.

В заключении описана основная цель проектирования и подведены итоги проделанной работы.

В приложении к пояснительной записке представлен листинг реализованной программы для сервера и клиента.

Оглавление

Введение

5

Глава 1. Обзор популярных программ дистанционного управления и выбор технических решений    

9

1.1. Программы дистанционного управления

9

1.2. Описание и обоснование выбора технических решений

12

1.3. Выбор языка программирования

Техническое задание                                                                               

13

16

Глава 2. Описание разрабатываемого программного обеспечения

26

2.1. Модуль захвата видеоинформация

26

2.2. Разрабатываемый mirror драйвер

30

2.3. Модуль регистрации локальных пользователей

32

2.4. Модуль управления устройствами ввода

43

2.5. Удаленное включение компьютеров и модули слежения

за их состоянием     

47

2.6. Модуль слежения за состоянием жёстких дисков                          

51

Глава 3. Структура программного обеспечения для сервера и

клиента              

56

3.1. Описание программы для сервера

56

3.2. Структура ПО для сервера

60

3.3. Описание программы для клиента и его структура

64

Глава 4. Экологичность и безопасность проекта                          

69

4.1. Аннотация                               

69

4.2. Характеристика условий труда

69

4.3. Организация рабочего места сетевого администратора

71

4.4. Карта условий труда

75

4.5. Расчет комбинированного освещения   

81

4.6. Расчет вентиляции

4.7. Выводы

88

92

Глава 5. Организационно-экономический раздел

93

5.1. Аннотация

93

5.2. Расчет трудозатрат и составление сметы затрат на выполнение проекта

94

5.3. Разработка бизнес-плана           

99

5.4. Технико-экономическое обоснование целесообразности проекта

102

Заключение

104

Список использованной литературы             

105

Приложение

106

                           

               

           

Введение

Темой дипломного проекта является “Разработка программного обеспечения  для дистанционного управления компьютерами, включенными в локальную сеть”.

Целью работы является создание программного комплекса для дистанционного контроля, диагностики и слежения с целью:

  •  снижения затрат на  обслуживание каждой машины;
  •  экономии электроэнергии;
  •  сокращения времени реагирования на проблемы пользователей;
  •  сокращения обслуживающего персонала;
  •  своевременного проведения профилактических работ.

Задачи:

  •  проанализировать комплекс вопросов возникающих при управлении;
  •  разработать модель программного комплекса управления;
  •  разработать подход отображения информации о состоянии каждого компьютера;
  •  разработать программное обеспечение для управления группой компьютеров.

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

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

Наконец, проблемы могут возникнуть и во внерабочее время, когда администратор находится дома. В таких случаях желательно, чтобы он, используя свой домашний компьютер и модем, мог удаленно идентифицировать и исправить проблему, а не мчаться сломя голову в офис.

Все сетевые операционные системы имеют средства удаленного администрирования, либо встроенные, либо поставляемые независимыми компаниями. Часть из них реализует концепцию удаленной консоли (или удаленного терминала), часть предоставляет разрозненные средства администрирования, направленные на решение только некоторых конкретных задач.

Крупные корпорации обычно имеют множество отделений и офисов различного масштаба, в которых используется локальная серверная инфраструктура. Количество серверов в этих отделениях может быть разным, но всем им нужна возможность удаленного управления. К сожалению, в последнее время наблюдается тенденция отсутствия квалифицированного IT-персонала для управления серверной инфраструктурой в отделениях компаний. Эта тенденция ставит перед IT-отделами компаний задачу поиска инструментов и процессов удаленной поддержки этой инфраструктуры, а также возможности выполнять задачи по настройке конфигурации, поиску и устранению неисправностей и восстановлению после сбоев с удаленного компьютера.

Прежде чем говорить об удаленном управлении ОС, мы кратко рассмотрим принципы администрирования одной из самой популярных операционных систем: UNIX. В UNIX ядро отделено от графической оболочки, при этом для работы сервера графическая оболочка не нужна, хотя и используется довольно часто. Интерактивное взаимодействие между пользователем и ОС осуществляется через командную оболочку shell. Она имеет несколько реализаций, причем особой популярностью пользуются Bourne shell (sh), C shell (csh), Korn shell (ksh) и Bourne again shell (bash). Каждая из командных оболочек имеет свой собственный язык программирования для написания программ-сценариев. Кроме того, UNIX славится богатейшим набором прикладных утилит, в том числе утилит сортировки, поиска, потокового редактирования, лексического анализа, обработки макросов, фильтров и множеством других. С помощью shell, системных утилит, прикладных программ и конвейеров UNIX позволяет создавать необычайно гибкие программы администрирования.

В UNIX используется графическая оболочка X Window System (X11). В отличие от подобных оболочек в составе Microsoft Windows и Apple MacOS, среда X11 является сетевой и отделена от ядра. Т. е. с точки зрения ядра система X11 представляет собой обычную пользовательскую программу. В рамках X11 любой компьютер UNIX (при наличии соответствующих прав) может выступать в качестве клиента или сервера X11. Следует иметь в виду, что, вразрез с общепринятой практикой, сервером X11 называют компьютер, на дисплее которого выводится изображение, а клиентом — машину, на которой запускается программа. Серверное ПО X11 существует для многих распространенных ОС, включая Windows, MacOS и др., тогда как клиентское ПО реализовано в основном на UNIX.

В современных UNIX для задач управления задействуют утилиты с тремя типами интерфейсов: командной строки, интерактивным текстовым и графическим. Тем не менее наиболее мощными и покрывающими все возможности ОС являются утилиты на базе командной строки. Подобные программы активно используются для выполнения повторяющихся операций вроде создания учетной записи пользователя или назначения прав доступа. Интерактивные текстовые и графические утилиты появились в составе UNIX сравнительно недавно, но из-за интерактивного характера общения выгода от их применения в составе программ на shell далеко неочевидна. Подобные утилиты применяются, главным образом, для эпизодических и тонких настроек ОС и оборудования. Таким образом, для администрирования UNIX подойдет любой эмулятор текстового терминала.

Рассмотрев основные особенности структуры управления сетевыми ОС, мы можем перейти к знакомству с наиболее распространенными программами удаленного управления.

Глава 1. Обзор популярных программ дистанционного управления и выбор технических решений

  1.  Программы дистанционного управления

Famatech – Radmin (Remote admin)

Рис. 1.1. Интерфейс программы Famatech – Radmin (Remote admin)

Основной возможностью является реализация удаленного экрана – полный контроль над удаленной машиной. При этом все нажатия клавиш и работа с мышью передаются удаленному компьютеру, обрабатываются на нем, а клиенту возвращается вид удаленного экрана. Также существует возможность просто просмотра удаленного экрана без управления.

RAdmin позволяет обмениваться файлами с удаленным компьютером с помощью интерфейса, аналогичного Windows Explorer. Еще одно достоинство клиента состоит в том, что с его помощью можно без проблем передавать на удаленный компьютер «горячие» клавиши, включая системные. Еще одной полезной функцией, которая может пригодиться во время работы с удаленным компьютером, — это обмен данными между приложениями локальной и удаленной машины через буфер обмена. Из недостатков стоит отметить полное отсутствие какого либо не визуального способа управления удалённым компьютером, кроме функции файлового обмена.

NetControl - Net Control

Рис. 1.2. Интерфейс программы Net Control

    Мощный, достаточно удобный и простой в использовании инструмент удаленного управления и мониторинга компьютеров в локальных сетях. Ключевой особенностью программы является возможность управления несколькими компьютерами одновременно.

Инструмент Remote Desktop, входящий в состав пакета, предоставляет широкие возможности по удаленному управлению Рабочим столом компьютера, так, как если бы администратор работал за компьютером пользователя. Специальная реализация данного инструмента позволяет дублировать все действия администратора на остальные контролируемые компьютеры, что позволяет, например, несколькими щелчками «мыши», устанавливать, конфигурировать программы на нескольких компьютерах одновременно. Предусмотрен также режим «HelpDesk», когда изображение с компьютера администратора транслируется на выбранные удаленные компьютеры пользователей. Файловый менеджер позволяет копировать файлы и выполнять прочие файловые операции на контролируемых компьютерах.

DameWare Development – DameWare NT Utilities

    

Рис. 1.3. Интерфейс программы DameWare NT Utilities

Представляет собой систему для управления приложениями, построенными на базе Windows NT/2000/XP/2003. Это приложение включает в себя набор административных средств Microsoft Windows NT и централизованный интерфейс для удаленного управления серверами и рабочими станциями Windows NT/2000/XP/2003. Управление пользователями Microsoft Exchange и поддержка Windows Terminal Server доступны из окна "Пользователи" (Users). В состав DameWare NT Utilities входят все стандартные утилиты для серверов Windows NT/2000 и рабочих станций Windows NT/2000/XP, а также большое количество утилит DameWare NT, в том числе облегченный модуль дистанционного управления. В состав DameWare NT Utilities входит обозреватель сети (Network Browser), позволяющий отображать домены сетей Microsoft Windows в виде дерева.

При довольно внушительном объеме функциональности стоит отметить два существенных недостатка данного продукта это – отсутствие эмуляции удалённого рабочего стола и проблемы со стабильностью.

1.2. Описание и обоснование технических решений

Было принято решение в написание собственного программного комплекса для управления группой компьютеров. Что для этого требовалось реализовать:

  •  режим захвата видеоинформации;
  •  возможность вывода на экран управляемых компьютеров сообщений (предупреждений);
  •  обмен текстовыми сообщениями;
  •  контроль режима работы компьютеров (по расписанию, по таймеру);
  •  возможность удаленной регистрации локальных пользователей;
  •  файловый обмен (копирование, удаление, синхронизация);
  •  запуск программ на управляемом компьютере;
  •  управление устройствами ввода;
  •   утилиты администрирования (управление процессами, сервисами, устройствами);
  •  удаленное включение компьютеров;
  •  наблюдение за состоянием жёстких дисков;
  •  наблюдение за загруженностью центрального процессора.

Данный программный комплекс выполнен по клиент-серверной архитектуре т.е. программа состоит из 2-х частей. Первая “rCon” является сервером и установлена на управляющем компьютере, а вторая  “lCon” клиентом и устанавливается на каждом управляемом компьютере.

Рис. 1.4. Схема клиент-серверной архитектуры программного обеспечения

1.3. Выбор языка программирования

При разработке клиентской и серверной части были использованы две разные среды разработки. Так как rCon –программа состоящая из большого количества форм и диалогов в которые выводится информация о состоянии системы, то была выбрана среда визуального объектно-ориентированного программирования Borland C++ Builder 5.0

C++ Builder обладает   широким   набором   возможностей,    начиная    от проектировщика форм и кончая поддержкой всех форматов популярных баз данных. Среда устраняет необходимость  программировать  такие  компоненты Windows общего назначения, как метки, пиктограммы и даже диалоговые  панели.

Работая в Windows, мы неоднократно видем одинаковые  «объекты»  во многих разнообразных приложениях. Диалоговые панели (например, Choose File  и  Save File) являются примерами многократно  используемых  компонентов,  встроенных непосредственно в C++ Builder, который позволяет приспособить  эти  компоненты  к имеющийся задаче, чтобы они работали именно так, как требуется создаваемому приложению. Также здесь имеются предварительно определенные визуальные и  не визуальные  объекты,  включая  кнопки,  объекты с данными, меню и уже построенные диалоговые панели. С  помощью  этих  объектов можно,  например, обеспечить  ввод  данных  просто  несколькими нажатиями  кнопок  мыши,   не прибегая к программированию. Та часть, которая  непосредственно  связана с программированием интерфейса пользователя  системой, получила название визуальное программирование.

Визуальное программирование  как  бы  добавляет  новое  измерение  при создании приложений, давая возможность  изображать  эти  объекты  на  экране монитора до выполнения самой  программы.  Без  визуального  программирования процесс  отображения  требует  написания  фрагмента   кода, создающего и настраивающего объект «по месту». Увидеть закодированные объекты было  возможно только в ходе исполнения  программы.  При  таком  подходе  достижение  того, чтобы  объекты  выглядели  и  вели   себя   заданным   образом,   становится утомительным   процессом,   который   требует   неоднократных    исправлений программного кода с последующей прогонкой программы  и  наблюдения  за  тем, что в итоге получилось.

Благодаря средствам визуальной разработки можно работать с  объектами, держа их перед глазами и получая результаты практически  сразу.  Способность видеть объекты такими, какими они появляются в  ходе  исполнения  программы, снимает необходимость проведения множества операций вручную, что  характерно для работы в среде, не обладающей визуальными средствами —  вне  зависимости от того, является она объектно-ориентированной  или  нет.  После  того,  как объект помещен в форму среды визуального программирования, все его  атрибуты сразу отображаются в виде кода, который соответствует объекту  как  единице, исполняемой в ходе работы программы.

Размещение объектов в C++ Builder связано с более тесными отношениями между объектами и реальным программным кодом. Объекты помещаются в вашу форму, при этом код, отвечающий объектам, автоматически записывается в исходный файл.

Для lCon был выбран другой подход. В связи с необходимостью применения в некоторых модулях средств разработки компании Microsoft, таких как Source Development Kit (SDK) и Driver Development Kit (DDK), а так же реализаций ее в виде системной службы Windows разработка производилась с использованием Microsoft Visual C++ 6.0.

Техническое задание к программному обеспечению для дистанционного управления компьютерами, включенными в локальную сеть

1. Введение

ЗАО «АКАДО-Столица» - крупный  российский телекоммуникационный холдинг, основной деятельностью которого является предоставление услуг телевидения, высокоскоростного интернета и телефонии как корпоративным, так и частным клиентам на базе современных волоконно-оптических кабельных технологий. Одним из важнейших условий успешного функционирования любого предприятия является эффективный обмен информацией между подразделениями. Внедрение программы (для дистанционного управления компьютерами, включенными в локальную сеть) в рабочий процесс компании ЗАО «АКАДО-Столица» приведет к сокращению времени на реагирование проблем пользователей, своевременному проведению профилактических работ, экономии электроэнергии.

2. Основание для разработки

Основанием для проведения разработки является дипломный проект на тему: «Программное обеспечение для дистанционного управления компьютерами, включенными в локальную сеть» по специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных систем», утверждённый деканом Вечернего факультета компьютерных технологий  Н.А.Смирновым 3 марта 2010г.

3. Назначение разработки

У пользователей постоянно возникают те или иные проблемы, и администратор вынужден посещать клиентские места. В таких случаях ему важно иметь возможность удаленного управления компьютером, например для назначения прав доступа, создания новой учетной записи пользователя, увеличения размера файловой системы и т. д. Наконец, проблемы могут возникнуть и  внерабочее время, когда администратор находится дома. В таких случаях желательно, чтобы он, используя свой домашний компьютер и модем, мог удаленно идентифицировать и исправить проблему, экономя свое время.

4. Требования к программному комплексу

4.1 Требования к функциональным характеристикам

4.1.1 Требования к составу выполняемых функций

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

  •  режим захвата видеоинформации;
  •  возможность вывода на экран управляемых компьютеров сообщений (предупреждений);
  •  обмен текстовыми сообщениями;
  •  контроль режима работы компьютеров (по расписанию, по таймеру);
  •  возможность удаленной регистрации локальных пользователей;
  •  файловый обмен (копирование, удаление, синхронизация);
  •  запуск программ на управляемом компьютере;
  •  управление устройствами ввода;
  •  утилиты администрирования (управление процессами, сервисами, устройствами);
  •  удаленное включение компьютеров;
  •  наблюдение за состоянием жёстких дисков;
  •  наблюдение за загруженностью центрального процессора.

4.2. Требования к надежности

4.2.1 Требования к обеспечению надежного функционирования программы

Надежное (устойчивое) функционирование программы должно быть обеспечено выполнением совокупности организационно-технических мероприятий, перечень которых приведен ниже:

- организацией бесперебойного питания технических средств;

-  использованием лицензионного программного обеспечения;

- регулярным выполнением рекомендаций Министерства труда и социального развития РФ, изложенных в Постановлении от 23 июля 1998 г. об утверждении межотраслевых типовых норм времени на работы по сервисному обслуживанию ПЭВМ и оргтехники и сопровождению программных средств»;

- необходимым уровнем квалификации сотрудников профильных подразделений;

- использованием методов объектно-ориентированного программирования и теории проектирования баз данных;

- регулярным выполнением требований ГОСТ 51188-98. Защита информации. Испытания программных средств на наличие компьютерных вирусов;

- созданием   средств   для   контроля   информации,   вводимой пользователем при работе с комплексом;- методикой   организации   и   проведения   приемо-сдаточных испытаний.

4.2.2  Время восстановления после отказа

Время восстановления после отказа, вызванного сбоем электропитания технических средств (иными внешними факторами), не фатальным сбоем (не крахом) операционной системы,
не должно превышать 30-ти минут при условии соблюдения условий эксплуатации технических и программных средств.

Время восстановления после отказа, вызванного неисправностью технических средств, фатальным сбоем (крахом) операционной системы, не должно превышать времени, требуемого на устранение неисправностей технических средств и переустановки программных средств.

4.2.3. Отказы из-за некорректных действий оператора

Отказы программы возможны вследствие некорректных действий пользователя при взаимодействии с операционной системой. Во избежание возникновения отказов программы по указанной выше причине следует обеспечить работу конечного пользователя без предоставления ему административных привилегий.

4.3. Условия эксплуатации

4.3.1 Климатические условия эксплуатации

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

4.3.2 Требования к квалификации и численности персонала

Минимальное количество персонала, требуемого для работы программы, должно составлять не менее 2 штатных единиц — сетевой администратор и конечный пользователь программы. Сетевой администратор должен иметь высшее профильное образование и сертификаты компании-производителя операционной системы. В перечень задач, выполняемых сетевым администратором, должны входить:         

- задача поддержания работоспособности технических средств;
         - задачи установки (инсталляции) и поддержания работоспособности системных программных средств — операционной системы;
         - задача установки (инсталляции) программы.

4.4 Требования к составу и параметрам технических средств

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

Описание программы для сервера (минимальные системные требования):

  •  Процессор – Pentium IV;
  •  Оперативная память – 128 Mb;
  •  видеокарта 800х600, true color;
  •  5 Mb дискового пространства;
  •  Windows 2000/XP.

Описание программы для клиента (минимальные системные требования):

  •  Процессор – Pentium IV;
  •  Оперативная память – 64 Mb;
  •  видеокарта 800х600, true color;
  •  2 Mb дискового пространства;
  •  Windows 2000/XP.

4.5 Требования к информационной и программной совместимости

Серверная часть программы должна функционировать в среде ОС Windows 2000/ХР. Клиентская часть подсистемы должна функционировать в среде  Windows 2000/XP.

4.5.1. Требования к информационным структурам и методам решения

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

4.5.2. Требования к исходным кодам и языкам программирования

Исходные коды программы должны быть реализованы в  среде «Borland C++ Builder 5.0» (для сервера) и «Microsoft Visual C++ 6.0» (для клиента).  В качестве интегрированной среды разработки программы должна быть использована среда Microsoft Visual Studio 2005(локализованная, русская версия).

4.5.3. Требования к программным средствам, используемым программой

Системные программные средства, используемые программой, должны быть представлены локализованной версией операционной системы Windows. Интерфейс должен иметь инструменты настройки параметров, а так же модули ввода, обработки и поиска информации такие как:

  •  Модуль захвата видеоинформации;
  •  Модуль регистрации локальных пользователей;
  •  Модуль управления устройствами ввода;
  •  Удаленное включение компьютеров и модули слежения за их состоянием;
  •  Модуль таймера;
  •  Модуль слежения за загруженностью центрального процессора;
  •  Модуль слежения за состоянием жёстких дисков.

4.6 Требования к интерфейсу пользователя

Интерфейс  пользователя  комплекса должен  разрабатываться  в соответствии с требованиями стандарта System Application Architecture Common User Access Advanced Interfase Design Guide (SAA/CUA). Обязательными являются следующие требования:

- никакие действия пользователя не должны приводить к сбою подсистемы;

- при любых действиях пользователя, влекущих нежелательные или неожиданные последствия, должно запрашиваться подтверждение;

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

5. Требования к программной документации

В составе программной документации комплекса должны быть разработаны следующие документы:

1. «Техническое задание» (ГОСТ 19.201-78);

2. «Текст программы» (ГОСТ 19.401-78);

6. Стадии и этапы разработки

6.1. Стадии разработки

Разработка должна быть проведена в три стадии:
1. разработка технического задания;
2. рабочее проектирование;
3. внедрение.

6.2. Этапы разработки

На стадии разработки технического задания должен быть выполнен этап разработки, согласования и утверждения настоящего технического задания.

На стадии рабочего проектирования должны быть выполнены перечисленные ниже этапы работ:

1. разработка программы;
2. разработка программной документации;
3. испытания программы.

На стадии внедрения должен быть выполнен этап разработки подготовка и передача программы.

Основные сроки и этапы разработки программного обеспечения для дистанционного управления компьютерами, включенными в локальную сеть для  ЗАО «АКАДО-Столица» представлены в нижеследующей таблице:

 

№ этапа

Содержание этапа работы

Результат выполнения этапа

Срок

выполнения

1

Разработка технического задания

Техническое задание

16 .03.2010

2

Программная реализация

Программа

20.04.2010

3

Проектирование программного интерфейса

Интерфейс

27.04.2010

Табл. 1. Этапы работы и сроки выполнения

6.3. Содержание работ по этапам

На этапе разработки технического задания должны быть выполнены перечисленные ниже работы:
1. постановка задачи;
2. определение и уточнение требований к техническим средствам;
3. определение требований к программе;
4. определение стадий, этапов и сроков разработки программы и документации на неё;
5. согласование и утверждение технического задания.
 

На этапе разработки программы должна быть выполнена работа по программированию (кодированию) и отладке программы.  

На этапе разработки программной документации должна быть выполнена разработка программных документов в соответствии с требованиями к составу документации.

На этапе испытаний программы должны быть выполнены  перечисленные ниже виды работ:

1. разработка, согласование и утверждение и методики испытаний;
2. проведение приемо-сдаточных испытаний;
3. корректировка программы и программной документации по результатам испытаний.
 

На этапе подготовки и передачи программы должна быть выполнена работа по подготовке и передаче программы и программной документации в эксплуатацию на объектах Заказчика. 

8. Порядок контроля и приемки

В процессе испытаний осуществляются: контроль комплектности, содержания и качества предъявляемой документации; контроль соответствия технических характеристик предъявляемого комплексу требованиям, сформулированным в Техническом задании. Планируется провести испытания программного обеспечения в одном из офисов компании.


Глава 2. Описание разрабатываемого программного обеспечения

2.1. Модуль захвата видеоинформации.

Существует, по крайней мере, два широко распространенных способа захвата видеоинформации с экрана компьютера. Оба способа основаны на периодическом захвате содержимого всего экрана с последующей компрессией и сохранением в файл. Первый способ использует стандартную графическую подсистему Windows GDI, а второй способ использует функции мультимедиа библиотеки DirectX. Эти механизмы обладают двумя существенными недостатками. Изменения экрана между двумя захватами теряются, а так как передача данных из памяти видеокарты в системную память компьютера в несколько раз медленнее, чем передача данных из системной памяти в системную память, происходит существенное уменьшение общей производительности компьютера во время записи.

Существует ряд улучшений вышеописанных способов, основанных на особенностях ОС Windows. Например, в программе WinVNC используются специальные хуки для определения областей экрана, которые подверглись изменению. Это позволяет существенно уменьшить количество данных, пересылаемых из памяти видеокарты в память компьютера. Но, к сожалению, данный способ не дает 100% гарантии на обнаружение всех изменений экрана.

Для детектирования изменений экрана можно воспользоваться специальным свойством всех ОС Windows, начиная с версии 2000, которое дублирует все вызовы графической подсистемы на mirror видеодрайвер.

Необходимо реализовать собственный mirror драйвер, работающий в нулевом кольце защиты ОС, а также реализовать модуль для lCon, который будет взаимодействуя с mirror драйвером получать видео данные, обрабатывать их и обеспечивать доставку данных на требуемый компьютер.

Следующая схема показывает все необходимые компоненты, требуемые для отображения информации под управлением Windows 2000 и выше.

Рис 2.1. Необходимые компоненты, требуемые для отображения информации под управлением Windows 2000 и выше.

Компоненты, выделенные серым цветом, поставляются вместе с операционной системой и они не зависят от типа видеооборудования и от видеодрайверов. Компоненты белого цвета поставляются сторонними производителями.

Эта схема работает следующим образом. Приложение, работающее в User Mode, пытается вывести на экран некоторую информацию. Все графические функции в User Mode выполняются библиотекой GDI32.DLL подсистемы Win32. Библиотека GDI32.DLL не может работать с видеодрайвером напрямую, так как она (как и приложение) работает в третьем кольце защиты. Поэтому для обработки запроса происходит переход в нулевое кольцо, в котором управление передается в графическую библиотеку GDI в Kernel Mode.

Библиотека Kernel Mode GDI имеет информацию о том, какие из всего набора DDI (Device Driver Interface) функций поддерживаются драйвером дисплея на аппаратном уровне. Если затребованная функция поддерживается, то библиотека GDI вызывает соответствующую DDI функцию в драйвере дисплея. Если требуемая функция не поддерживается, то тогда вызывается программная эмуляция функции. Библиотека Kernel Mode GDI может программно выполнить любую DDI-функцию, она имеет весь необходимый для этого код.

Если драйвер дисплея поддерживает DDI-функцию не полностью, то он может вызывать любую из ENG функций, входящих в состав Kernel Mode GDI для программной эмуляции той ее части, которая не реализована на аппаратном уровне.

Например, приложение вызывает WIN API функцию LineTo. Управление передается в библиотеку GDI32, которая так же, как и приложение, работает в User Mode. Библиотека User Mode GDI использует программное прерывание INT или команду SYSENTER для передачи управления в библиотеку Kernel Mode GDI. Kernel Mode GDI просматривает таблицу поддерживаемых драйвером дисплея DDI-функций. Если в этой таблице имеется точка входа для DDI-функции DrvLineTo, то библиотека GDI вызывает эту функцию в драйвере дисплея. Если драйвер дисплея по каким-то причинам не может выполнить эту функцию, то он может воспользоваться ее программной эмуляцией, имеющейся в библиотеке Kernel Mode GDI – EngLineTo. После того, как линия нарисована, управление передается обратно в библиотеку Kernel Mode GDI. Эта библиотека осуществляет обратный переход в третье кольцо защиты и передает управление User Mode GDI, которая возвращает управление приложению, вызывавшему API-функцию LineTo.

Mirror драйвер это видеодрайвер для виртуального устройства, который отображает графические операции одного и более дополнительных физических устройств. Он должен быть написан как любой другой видеодрайвер, однако часть этого драйвера - miniport - содержит только минимальный набор функций, который требуется для реального видеодрайвера.

Любой видео miniport драйвер для семейства Windows NT является Kernel Mode драйвером. Любая графическая карта должна иметь два драйвера – видео miniport драйвер и драйвер дисплея. Видео miniport драйвер работает в связке с драйвером видеопорта, который поставляется с операционной системой и является динамически загружаемым Kernel Mode драйвером. Для работы с оборудованием и системой miniport драйвер может вызывать только функции драйвера видеопорта VideoPortXxx. Начиная с Windows 2000 все miniport драйверы должны поддерживать технологию Plug and Play.

GDI поддерживает функцию виртуального рабочего стола и обеспечивает возможность реплицирования части этого стола на mirror драйвер. GDI реализовывает виртуальный рабочий стол как слой верхнего уровня над драйвером дисплея. Все графические операции начинаются на этом виртуальном рабочем столе. GDI отсекает и преобразовывает графические операции на конкретный физический дисплей, который существует на виртуальном рабочем столе.

Mirror драйвер может указать любой регион отсечения на виртуальном рабочем столе, включая даже такой, который разделяется между физическими устройствами вывода. GDI посылает для mirror драйвера все графические операции, которые пересекаются с регионом отсечения. Mirror драйвер может установить регион отсечения целиком покрывающий только одно физическое устройство, что гарантируют высокую эффективность отображения всех графический операций этого устройства на mirror драйвер.

Таким образом, mirror драйвер должен состоять как минимум из двух драйверов – это видео miniport драйвер и драйвер дисплея.

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

2.2. Разрабатываемый mirror драйвер

Драйвер состоит из трех компонентов:

  •  видео miniport драйвер bbcap.sys;
  •  драйвер дисплея bbcap.dll;
  •  драйвер для связи с ядром ОС bbchlp.dll.

Любой miniport драйвер должен включать несколько обязательных функций. Самая главная функция, которая является точкой входа, имеет следующее определение: ULONG DriverEntry(PVOID Context1, PVOID Con text2)

    Это единственная функция драйвера, которая должна быть экспортирована. Все остальные функции регистрируются в специальной структуре в теле функции DriverEntry.

    Драйвер дисплея bbcap.dll выполняет самую главную функцию – он перехватывает все графические операции, делает предварительную обработку данных и передает результат на дальнейшую обработку в модуль lCon.

    Видео miniport драйвер и драйвер дисплея инициализируются сразу же после загрузки ядра NT и подсистемы Win32. Система загружает все те драйверы, которые указаны в реестре и затем определяет, какую из пар [miniport драйвер, драйвер дисплея] использовать. В ходе этого процесса GDI открывает все необходимые драйвера дисплея в соответствии с менеджером Windows.

Рис.2.2. Диаграмма, показывающая базовую процедуру инициализации драйвера дисплея

Любой драйвер дисплея экспортирует только одну функцию:

BOOL DrvEnableDriver (

IN ULONG iEngineVersion,

IN ULONG cj,

OUT DRVENABLEDATA *pded );

Все остальные функции драйвера указываются в специальной таблице поддерживаемых функций.

Когда GDI пытается создать первый контекст устройства (DCDevice Context) для видеооборудования, то GDI вызывает функцию DrvEnableDriver в драйвере дисплея. В теле этой функции драйвер заполняет структуру DRVENABLEDATA, в которой указываются все те DDI-функции, которые поддерживаются драйвером, и точки входов в эти функции.

Затем GDI вызывает функцию DrvEnablePDEV для получения описания физических характеристик устройства. В эту функцию передается структура DEVMODEW, идентифицирующая режим, который хочет выставить GDI. Если GDI запросила режим, который не поддерживается miniport драйвером или драйвером дисплея, то функция DrvEnablePDEV должна вернуть ошибку.

Функция DrvEnablePDEV инициализирует структуру PDEV. Надо сказать, что для одного и того же устройства DrvEnablePDEV может быть вызвана несколько раз, но только одна из всего множества созданных структур PDEV является активной в конкретный момент времени. Поэтому драйвер дисплея не должен использовать глобальных переменных. Все свои данные драйвер должен выделять динамически, а указатели на выделенные области хранить в структуре PDEV.

Как только инициализация прошла успешно, то GDI вызывает функцию DrvCompletePDEV. При помощи этой функции GDI передает драйверу сгенерированный дескриптор физического устройства.

На последней стадии инициализации создается поверхность для видео оборудования посредством вызова функции DrvEnableSurface. Создание поверхности разрешает вывод графической информации на физическое устройство.

После успешной инициализации драйвера дисплея GDI может вызывать любую из DDI-функций, поддерживаемых драйвером. Так как целью драйвера дисплея bbcap является перехват всех графических операций, то в него была заложена поддержка всех возможных DDI-вызовов.

Драйвер утилит bbchlp.dll является Kernel Mode драйвером и содержит набор функций, которые используются драйвером дисплея для связи я ядром ОС.

Так как драйвер bbchlp содержит только те функции, которые необходимы для драйвера дисплея bbcap, то bbchlp не содержит точки входа, характерной для всех драйверов.

Драйвер bbchlp экспортирует следующие функции:

Функция

Значение

Init

Выделяет блок памяти в системной области из невыгружаемого на диск пула. В нем хранится структура HelperData с данными, необходимыми для передачи параметров от драйвера дисплея драйверу bbchlp и в обратном направлении.

Done

Освобождается ранее выделенный блок памяти.

Start

Инициализируются поля структуры HelperData.

Stop

Очищаются поля структуры HelperData.

usercall-

back

Производит передачу управления в приложение Win32 User Mode.

createand-

mapmemory

Выделяет память из невыгружаемого на диск пула указанного размера и отображает ее на частное адресное пространство текущего процесса. Такой блок памяти доступен для чтения-записи как драйверу, так и приложению Win32 User Mode.

unmapand-

destroy-

memory

Уничтожает блок памяти, который был выделен функцией createandmapmemory.

querytime-

stamp

Возвращает текущее значение высокоточного таймера.

Таблица 2.1. Драйвер bbchlp, его функции и их значения

Для использования функций утилит драйвер дисплея сначала загружает драйвер bbchlp в системную память при помощи GDI Kernel Mode функции: HANDLE EngLoadImage(IN LPWSTR pwszDriver);

Для получения точек входов необходимых функций используется другая GDI-функция: PVOID EngFindImageProcAddress(IN HANDLE hModul e,IN LPSTR lpProcName);

Взаимодействие между Win32-приложением и драйвером дисплея происходит при помощи специальной GDI-функции:

int DrawEscape(

HDC hdc,// handle to DC

int nEscape,// escape function

int cbInput, // size of structure for input

LPCSTR lpszInData // structure for input);

Данная функция обеспечивает выполнение специальных функций видеоадаптером, которые не поддерживаются библиотекой GDI. Библиотека Kernel Mode GDI вызывает функцию DrvDrawEscape в драйвере дисплея, если она поддерживается драйвером.

ULONG DrvDrawEscape(

IN SURFOBJ *pso,

IN ULONG iEsc,

IN CLIPOBJ *pco,

IN RECTL *prcl,

IN ULONG cj In,

IN PVOID *pvIn);

Таким образом, драйвер дисплея bbcap, работающий в нулевом кольце защиты, может получать команды и параметры из Win32-приложения, работающего в третьем кольце защиты, оставаясь в контексте того процесса, который вызывал функцию DrawEscape.

Драйвер поддерживает следующий набор команд:

Команда

Значение

START

По команде START драйвер производит все необходимые действия, связанные с началом записи. Выделяется память, создаются события, инициализируются структуры, необходимые для записи.

PAUSE

Команда PAUSE переводит драйвер в режим ожидания. После получения этой команды драйвер перестает

обрабатывать графическую информацию и не передает никаких данных в win32 приложение.

STOP

По команде STOP драйвер останавливает все действия по захвату и обработке графической информации,

освобождает память и уничтожает все созданные события.

VERSION

Команда VERSION запрашивает текущую версию драйвера.

Эта команда позволяет записывающей win32

программе корректно обрабатывать данные, поступающие от драйвера.

GET-

SCREEN

Если win32 приложению необходим весь экран, то приложение может послать драйверу команду GETSCREEN для копирования всего экрана целиком.

Таблица 2.2. Команды драйвера и их значения

После старта драйвер производит захват графической информации. Он производит предварительную обработку данных и передает результат на дальнейшую обработку в Win32-приложение. Непосредственный обмен данными идет через специальную область памяти, которая доступна на чтение и запись и драйверу и Win32-приложению. Win32-приложение производит обработку данных, поступивших от драйвера.

Формат пикселей преобразуется в формат 15 + 1.

Рис. 2.3. Преобразование пикселей

  _go32_bp:

mov eax, [esi]

 mov ebx, [esi]

shr eax, 9

shr bh, 3

and ax, 7C00h

shr bx, 3

or ax, bx

  mov  [edi],  ax

add  esi,  4

add  edi,  2

  dec cx

  jnz _go32_bp

  jmp  _exit_

Далее происходит сжатие данных по алгоритму группового кодирования.

Групповое кодирование — от английского Run Length Encoding (RLE) — один из самых старых и самых простых алгоритмов архивации графики. Изображение в нем (как и в нескольких алгоритмах, описанных ниже) вытягивается в цепочку байт по строкам растра. Само сжатие в RLE происходит за счет того, что в исходном изображении встречаются цепочки одинаковых байт. Замена их на пары <счетчик повторений, значение> уменьшает избыточность данных. В том или ином виде он используется во многих популярных сегодня форматах графических файлов и, в частности, в PCX и BMP.

В данном алгоритме признаком счетчика (counter) служит единица в  старшем бите считанного файла:

Рис. 2.4. Признак счетчика в старшем бите

xor  eax, eax

xor  ebx, ebx

xor  edx, edx

mov  edi, lineBuf

add  edi, 4

mov  esi, edi

mov  ecx, lenn

mov  bx, [esi]

dec  ecx

_next_px:   

mov  ax, bx

add  esi, 2

inc dx

mov  bx, [esi]

cmp  ax, bx

je _end_loop  // равно

_rep_px:    

cmp  dx, 3

jl  _put_px // меньше

// ставим старший бит

or dx, 8000h 

mov  [edi], dx

add  edi, 2

mov dx, 1

_put_px:

mov  [edi], ax

add  thash, edx

add  thash, eax

add  edi, 2

dec  dx

jnz  _put_px  // не ноль

_end_loop:  

dec ecx

jnz _next_px

inc dx

inc ecx

cmp dx, 1         // были повторения

jg  _rep_px

2.3. Модуль регистрации локальных пользователей

Для регистрации пользователей в системе используется Graphical Identification and Authentication dynamic-link library (GINA DLL). Пользователь взаимодействует с этим модулем, когда вводит имя и пароль, нажимает на Ctrl-Alt-Del, блокирует рабочую станцию или меняете пароль и т. д. Для того что бы контролировать эти действия достаточно переписать этот модуль.

Подсистема регистрации пользователя в Windows 2000/XP состоит из трех компонентов: Winlogon.exe, GINA DLL и, возможно, нескольких сетевых библиотек (Network Providers), осуществляющих вторичную авторизацию, например на файл-сервере собственной разработки. Регистрация выполняется через LSA API. GINA DLL непосредственно взаимодействует с этой подсистемой и возвращает результаты регистрации Winlogon. В Windows 2000 и более поздних версиях поддерживается механизм notification packages — пакетов уведомлений. Это модули, представляющие собой DLL, которые вызываются Winlogon в моменты, соответствующие тем или иным событиям.

 

Как отмечалось выше, GINA представляет собой DLL, которая экспортирует ряд как обязательных, так и дополнительных функций. Первые необходимо реализовать в своей версии модуля, а для вторых в модуле Winlogon.exe имеется код по умолчанию, который будет выполнен, если библиотека не предоставит их реализацию.

Winlogon взаимодействует с GINA следующим образом:

  1.  вызывает экспортируемые GINA функции;
  2.  передает сообщения в открытые GINA диалоги. Этот механизм рассматривается ниже, в разделе, посвященном диалогам в GINA;
  3.  предоставляет GINA свой API;
  4.  с помощью функции WlxSasNotify() принимает от GINA сообщения.

В основе всех этих механизмов лежит понятие secure attention sequence (SAS).

Полный список экспортируемых GINA для Windows 2000 функций.

Функция GINA

Обязательность реализации

Описание

WlxActivateUserShell

+

Запускает программу пользовательского интерфейса.

WlxDisplayLockedNotice

+

С помощью этой функции, GINA DLL отображает информацию о том, что компьютер заблокирован.

WlxDisplaySASNotice

+

Winlogon вызывает эту функцию, когда пользователь еще не зарегистрировался в системе.

WlxDisplayStatusMessage

+

Winlogon вызывает эту функцию для отображения сообщений о состоянии системы.

WlxGetStatusMessage

+

Winlogon вызывает эту функцию для того, чтобы получить текст сообщения о текущем состоянии системы.

WlxInitialize

+

Функция инициализации GINA DLL.

WlxIsLockOk

+

GINA подтверждает, что рабочую станцию можно заблокировать.

WlxIslogoffOk

+

GINA подтверждает, что можно закрыть сессию текущего пользователя.

WlxLoggedOnSAS

+

Winlogon вызывает эту функцию, когда пользователь зарегистрирован в системе, рабочая станция не заблокирована и получен secure attention sequence (SAS).

WlxLoggedOutSAS

+

Winlogon вызывает эту функцию, когда пользователь еще не зарегистрирован в системе и получен SAS.

WlxLogoff

+

Извещает GINA DLL о том, что запрошен процесс завершения сеанса пользователя.

WlxNegotiate

+

Проверяет, может ли Winlogon работать с данной реализацией GINA.

WlxNetworkProviderLoad

+

Winlogon вызывает эту функцию после загрузки каждого network provider для получения аутентификационной информации о пользователе.

WlxRemoveStatus Message

+

Этим вызовом Winlogon сообщает GINA DLL о том, что не нужно показывать сообщение о статусе процесса загрузки.

WlxScreensaverNotify

Предоставляет GINA возможность для взаимодействия с программой хранителя экрана (screen saver).

WlxShutdown

+

Winlogon вызывает эту функцию до начала процесса завершения работы, предоставляя GINA возможность совершить необходимые действия, например освободить нужные ресурсы или записать в реестр какую-либо информацию.

WlxStartApplication

Winlogon вызывает эту функцию, когда необходимо запустить приложение в контексте текущего пользователя.

WlxWkstaLockedSAS

+

Winlogon вызывает эту функцию, когда компьютер заблокирован и получена SAS.

Таблица 2.3. Функции  модулей и их описание

Рис. 2.6. Схема перехода между состояниями Winlogon

Алгоритм работы Winlogon основан на трех возможных состояниях. На рисунке, взятом из MSDN, представлена схема перехода между состояниями. Для каждого состояния возможен определенный набор функций и задан сценарий взаимодействия с GINA и другими компонентами Windows. Рассмотрим несколько примеров сценариев взаимодействия Winlogon и GINA DLL. Загрузка рабочей станции Winlogon вызывает WlxNegotiate для согласования версий, а потом WlxInitialize — для создания окружения. Ожидание регистрации пользователя GINA ожидает ввода SAS, а потом вызывает WlxSasNotify. Winlogon вызывает WlxLoggedOutSAS, в которой происходит регистрация пользователя. После успешной регистрации Winlogon вызывает WlxActivateUserShell для создания оболочки пользователя и переходит в состояние 2. Пользователь зарегистрирован Если в процессе работы возникает SAS, Winlogon вызывает функцию WlxLoggedOnSAS. Внутри этой функции GINA DLL может предложить пользователю различные варианты действий. Пользователь хочет завершить сеанс и выключить компьютер. Winlogon обращается к WlxLoggedOnSAS, которая возвращает WLX_SAS_ACTION_SHUTDOWN. Далее Winlogon последовательно вызывает функции WlxLogoff и WlxShutdown.

2.4. Модуль управления устройствами ввода

Перед описанием основных принципов работы управления рассмотрим схему, расположенную ниже.

Рис. 2.7. Модель аппаратного ввода системы Windows

При возникновении неких событии ввода (нажатии клавиш, перемещении мыши) события обрабатываются соответствующим драйвером и помещаются в системную очередь аппаратного ввода. В системе имеется особый поток необработанного ввода, называемый RIT (Raw Input Thread), который извлекает события из системной очереди и преобразует их в сообщения. Полученные сообщения помещаются в конец очереди виртуального ввода одного из потоков (виртуальная очередь потока называется VIQVirtualized Input Queue). При этом RIT сам выясняет, в очередь какого конкретно потока необходимо поместить событие. Для событий мыши поток определяется поиском окна, над которым расположен курсор мыши. Клавиатурные события отправляются только одному потоку – так называемому активному потоку (т.е. потоку, которому принадлежит окно, с которым работает пользователь). На самом деле это не совсем так -  в частности, на рисунке показан поток A, не имеющий очереди виртуального ввода. В данном случае получатся, что потоки A и B совместно используют одну очередь виртуального ввода. Это  достигается при помощи вызова API функции AttachThreadInput, которая позволяет одному потоку подключиться к очереди виртуального ввода другого потока.

Следует отметить, что поток необработанного ввода отвечает за обработку специальных сочетаний клавиш, в частности Alt+Tab и Ctrl+Alt+Del.

Слежение при помощи ловушек состоит в применении механизма ловушек (hook) операционной системы. Ловушки позволяют наблюдать за сообщениями, которые обрабатываются окнами других программ. Установка и удаление ловушек производится при помощи хорошо документированных функций API библиотеки user32.dll (функция SetWindowsHookEx позволяет установить ловушку, UnhookWindowsHookEx  - снять ее). При установке ловушки указывается тип сообщений, для которых должен вызываться обработчик ловушки. В частности, есть два специальных типа ловушки WH_KEYBOARD и WH_MOUSE - для регистрации событий клавиатуры и мыши соответственно. Ловушка может быть установлена для заданного потока и для всех потоков системы.

Код обработчика событий ловушки должен быть расположен в DLL. Это требование связано с тем, что DLL с обработчиком ловушки проецируется системой в адресное пространство всех GUI процессов. Интересной особенностью является то, что проецирование DLL происходит не в момент установки ловушки, а при получении GUI процессом первого сообщения, удовлетворяющего параметрам ловушки.

Методика ловушек достаточно проста и эффективна, но у нее есть ряд недостатков. Первым недостатком можно считать то, что DLL с ловушкой проецируется в адресное пространство всех GUI процессов. Кроме того, регистрация событий клавиатуры возможна только для GUI приложений.

Процесс A устанавливает ловушку WH_GETMESSAGE и наблюдает за сообщениями, которые обрабатываются окнами в системе. Ловушка устанавливается вызовом SetWindowsHookEx:

HHOOK hHook = SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, hinstDll, 0);

Аргумент WH_GETMESSAGE определяет тип ловушки, а параметр GetMsgProc — адрес функции, которую система должна вызывать всякий раз, когда окно собирается обработать сообщение. Параметр hinstDll идентифицирует DLL, содержащую функцию GetMsgProc. В Windows значение hinstDll для DLL фактически задаст адрес в виртуальной памяти, по которому DLL спроецирована на адресное пространство процесса. И, наконец, последний аргумент, 0, указывает поток, для которого предназначена ловушка. Поток может вызвать SetWindowsHookEx и передать ей идентификатор другого потока в системе. Передавая 0, мы сообщаем системе, что ставим ловушку для всех существующих в ней GUI-потоков.

Теперь посмотрим, как все это действует:

  1.  Поток процесса B собирается направить сообщение какому-либо окну.
  2.  Система проверяет, не установлена ли для данного потока ловушка WH_GETMESSAGE.
  3.  Затем выясняет, спроецирована ли DLL, содержащая функцию GetMsgProc, на адресное пространство процесса B.
  4.  Если указанная DLL еще не спроецирована, система отображает ее на адресное пространство процесса B и увеличивает счетчик одинаковы, то и адрес GetMsgProc в этих процессах тоже одинаков. Тогда система может просто вызвать GetMsgProc в адресном пространстве процесса A. Если же hinstDll различны, система определяет адрес функции GetMsgProc в адресном пространстве процесса B по формуле: блокировок (lock count) проекции DLL в процессе B на 1.
  5.  Система проверяет, не совпадают ли значения hinstDll этой DLL, относящиеся к процессам A и B Если hinstDll в обоих процессах

GetMsgProc B = histDll B + (GetMsgProc A - hinstDll A) 

Вычитая hinstDll из GetMsgProc A, получаем смещение (в байтах) адреса функции GetMsgProc. Добавляя это смещение к hinstDll В, Мы получаем адрес GetMsgProc, соответствующий проекции DLL в адресном пространстве процесса B.

  1.  Счетчик блокировок проекции DLL в процессе В увеличивается на 1.
  2.  Вызывается GetMsgProc в адресном пространстве процесса B.
  3.  После возврата из GetMsgProc счетчик блокировок проекции DLL в адресном пространстве процесса B уменьшается на 1.

Когда система внедряет или проецирует DLL, содержащую функцию фильтра ловушки, проецируется вся DLL, а не только эта функция. А значит, потокам, выполняемым в контексте процесса B, теперь доступны все функции такой DLL.

Итак, чтобы создать подкласс окна, сформированного потоком другого процесса, можно сначала установить ловушку WH_GETMESSAGE для этого потока, а затем — когда будет вызвана функция GetMsgProc — обратиться к SetWindowLongPtr и создать подкласс. Разумеется, процедура подкласса должна быть в той же DLL, что и GetMsgProc.

В отличие от внедрения DLL с помощью реестра этот способ позволяет в любой момент отключить DLL от адресного пространства процесса, для чего достаточно вызвать:

BOOL UnhookWindowsHookEx(HHOOK hHook);

Когда поток обращается к этой функции, система просматривает внутренний список процессов, в которые ей пришлось внедрить данную DLL, и уменьшает счетчик ее блокировок на 1. Как только этот счетчик обнуляется, DLL автоматически выгружается. Вспомните: система увеличивает его непосредственно перед вызовом GetMsgProc (см. выше п.6). Это позволяет избежать нарушения доступа к памяти. Если бы счетчик не увеличивался, то другой поток мог бы вызвать UnhookWindowsHookEx в тот момент, когда поток процесса B пытается выполнить код GetMsgProc.

2.5. Удаленное включение компьютеров и модули слежения за их состоянием

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

Технология “Wake On Lan” (технология “Magic packet”) используется для включения электропитания удаленного компьютера с помощью отправки на его сетевой адаптер специально сформированного кадра Ethernet.

Удаленный компьютер должен отвечать определенным требованиям:

  •  Иметь блок питания ATX;
  •  Иметь сетевую карту, поддерживающую технологию "Wake On Lan" (WOL);
  •  Иметь материнскую плату, поддерживающую технологию "Wake On Lan";
  •  В настройках BIOS должна быть включена поддержка режима "Wake On Lan".     

Технология WOL основана на том, что сетевой адаптер на выключенном компьютере остается под питанием в режиме ожидания приема пакета, в поле данных которого присутствует последовательность из 6 байт FF и его собственного MAC - адреса, повторенного 16 раз. Получив такой пакет, адаптер вырабатывает сигнал включения электропитания компьютера. То есть, если бы адрес платы выглядел как 01:02:03:04:05:06, то магический пакет оказался бы таким:

“FFFFFFFFFFFF010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506010203040506”

Практически все современные сетевые адаптеры PCI и материнские платы поддерживают данную технологию, однако есть некоторые тонкости. Если материнская плата имеет шину PCI спецификации до 2.2, то на ней должен быть 3-х штырьковый разъем "Wake On Lan" и такой же разъем должен быть на сетевом адаптере. Их нужно соединить специальным кабелем, входящим в комплект поставки адаптера. Для случая с шиной PCI 2.2 такое соединение уже выполнено напрямую. Использовать данную технологию можно не только в локальной сети, но и в Интернет, надо только учитывать тот факт, что сформированный Magic Packet будет проходить через маршрутизаторы, т.е. должен содержать правильные IP и MAC-адреса.

Информация с сайта «Живая наука» – http://livescience.ru:

«Офисные компьютеры, не выключенные сотрудниками после ухода с работы, ежегодно обходятся британскому бизнесу в 123 млн. евро, утверждают исследования Fujitsu Siemens. В своем докладе компания призывает руководство компаний следить за тем, чтобы на ночь компьютеры были выключены, либо переведены в спящий режим. В режиме ожидания, по мнению специалистов, компьютер оставлять не следует, так как он все равно потребляет электричество. Это и деньги экономит, и окружающую среду сохраняет: включенный компьютер сжигает кислород и выделяет углекислый газ. В масштабах страны это тысячи тонн CO2 в год. Опросив 1000 сотрудников, авторы доклада выяснили, что 370 из них никогда не выключают компьютер, уходя домой».

Для решения данной проблемы в программном комплексе предусмотрен модуль таймера, который производит слежение за состоянием компьютера, сравнивая его с расписанием работы организации.

Пример сценария работы модуля показан в нижеследующей схеме:

Рис. 2.8. Модуль слежения за состоянием компьютера пользователя

В компьютере центральный процессор является основным устройством обработки информации. Во время этой работы процессор потребляет электроэнергию, и уровень ее потребления тем больше, чем больше поток  обрабатываемой информации.

В организациях, где установлены сотни или даже тысячи компьютеров, высокое энергопотребление непосредственно сказывается на счёте за электричество. Кроме того, потребляемая энергия превращается в тепло, которое нужно отводить. Поэтому эффективность энергопотребления сегодня является одним из первоочередных вопросов.

Проведём сравнение энергопотребления нескольких процессоров:

Рис. 2.9. Энергопотребление некоторых процессоров

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

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

2.6. Модуль слежения за состоянием жёстких дисков.

Надежности жесткого диска (и любого устройства хранения в самом общем случае) всегда придается огромное значение. И дело отнюдь не в его стоимости, а в ценности той информации, которую он уносит по окончанию срока службы и в потерях прибыли. И вполне естественно, что о таких неприятных моментах хочется знать заранее.

Технология мониторинга и предсказания отказов (Self Monitoring, Analysis and Reporting Technology - SMART) - это технология внутренней оценки состояния диска, и механизм предсказания возможного выхода из строя жесткого диска. Важно отметить, что технология, в принципе, не решает возникающих проблем, она способна лишь предупредить об уже возникшей проблеме либо о проблеме, ожидающейся в ближайшее время.

Рис. 2.10 Основные проблемы, возникающие  с жестким диском

SMART производит наблюдение за основными характеристиками накопителя. Эти параметры называются атрибутами. Необходимые к мониторингу параметры определяются производителем. Каждый атрибут имеет какую-то величину - Value. Обычно изменяется в диапазоне от 0 до 100 (хотя может быть в диапазоне до 200 или до 255), ее величина - это надежность конкретного атрибута относительно некоторого его эталонного значения (определяется производителем). Высокое значение говорит об отсутствии изменений данного параметра или, в зависимости от значения, его медленном ухудшении. Низкое значение говорит о быстрой деградации или о возможном скором сбое, т.е. чем выше значение Value атрибута, тем лучше. Некоторыми программами мониторинга выводится значение Raw или Raw Value - это значение атрибута во внутреннем формате (который так же различен у дисков разных моделей и разных производителей), в том, в котором он хранится в накопителе. Для простого пользователя он малоинформативен, больший интерес представляет посчитанное из него значение Value. Для каждого атрибута производителем определяется минимальное возможное значение, при котором гарантируется безотказная работа накопителя - Threshold. При значении атрибута ниже величины Threshold очень вероятен сбой в работе или полный отказ. Осталось только добавить, что атрибуты бывают критически важными и некритически. Выход критически важного параметра за пределы Threshold фактический означает выход из строя, выход за переделы допустимых значений некритически важного параметра свидетельствует о наличии проблемы, но диск может сохранять свою работоспособность (хотя, возможно, с некоторым ухудшением некоторых характеристик: производительности например). К наиболее часто наблюдаемым критически важным характеристикам относятся: Raw Read Error Rate - частота ошибок при чтении данных с диска, происхождение которых обусловлено аппаратной частью диска.

  •  Spin Up Time - время раскрутки пакета дисков из состояния покоя до рабочей скорости. При расчете нормализованного значения (Value) практическое время сравнивается с некоторой эталонной величиной, установленной на заводе. Не ухудшающееся немаксимальное значение при Spin Up Retry Count Value = max (Raw равном 0) не говорит ни о чем плохом. Отличие времени от эталонного может быть вызвано рядом причин, например блок питания подкачал.
  •  Spin Up Retry Count - число повторных попыток раскрутки дисков до рабочей скорости, в случае если первая попытка была неудачной. Ненулевое значение Raw (соответственно немаксимальное Value) свидетельствует о проблемах в механической части накопителя.
  •  Seek Error Rate - частота ошибок при позиционировании блока головок. Высокое значение Raw свидетельствует о наличии проблем, которыми могут являться повреждение сервометок, чрезмерное термическое расширение дисков, механические проблемы в блоке позиционирования и др. Постоянное высокое значение Value говорит о том, что все хорошо.
  •  Reallocated Sector Count - число операций переназначения секторов. SMART способен произвести анализ сектора на стабильность работы "на лету" и в случае признания его сбойным произвести его переназначение. Ниже мы поговорим об этом подробнее.

Из некритических, так сказать информационных атрибутов, обычно производят наблюдение за следующими:

  •  Start/Stop Count - полное число запусков/остановов шпинделя. Гарантировано, что мотор диска способен перенести лишь определенное число включений/выключений. Это значение выбирается в качестве Treshold. Первые модели дисков со скоростью вращения 7200 оборотов/мин имели ненадежный двигатель, могли перенести лишь небольшое их число и быстро выходили из строя.
  •  Power On Hours - число часов проведенных во включенном состоянии. В качестве порогового значения для него выбирается паспортное время наработки на отказ (MBTF). Принимая во внимание обычно совершенно невероятные величины MBTF, маловероятно, что параметр достигнет когда-либо критического порога. Но даже в этом случае выход из строя диска совершенно не обязателен.
  •  Drive Power Cycle Count - количество полных циклов включения-выключения диска. По этому и предыдущему атрибуту можно оценить, например, сколько использовался диск до покупки.
  •  Temperatue - просто и понятно. Здесь хранятся показания встроенного термодатчика. Температура имеет огромное влияние на срок службы диска (даже если она находится в допустимых пределах).
  •  Current Pending Sector Count - здесь храниться число секторов, являющихся кандидатами на замену. Они не были еще определенны как плохие, но считывание их отличается от чтения стабильного сектора, так называемые подозрительные или нестабильные сектора.
  •  Uncorrectable Sector Count - число ошибок при обращении к сектору, которые не были скорректированы. Возможными причинами возникновения могут быть сбои механики или порча поверхности.
  •  UDMA CRC Error Rate - число ошибок, возникающих при передаче данных по внешнему интерфейсу. Могут быть вызваны некачественными кабелями, нештатными режимами работы.
  •  Write Error Rate - показывает частоту ошибок происходящих при записи на диск. Может служить показателем качества поверхности и механики накопителя.

Глава 3. Структура программного обеспечения для сервера и клиента

3.1. Описание программы для сервера

Минимальные системные требования:

  •  Процессор – Pentium III 600 MHz;
  •  Оперативная память – 128 Mb;
  •  видеокарта 800х600, true color;
  •  5 Mb дискового пространства;
  •  Windows  2000, XP

Диалоги и формы

 Рис. 3.1.  Главное окно программы

Визуально главное окно можно разделить на 4 зоны управления:

Рис. 3.2. Зоны управления

  1.  область главного меню и кнопок часто используемых функций;
  2.  область графического представления контролируемых компьютеров и область вывода отладочной информации;
  3.  область панели управления, разделена на вкладки
    1.   «общие» – редактирование и отправка сообщений пользователям
    2.   «время» – таблица времени работы
    3.   «состояние» – таблица данных о состоянии жестких дисков и загруженности центральных процессоров.
  4.  область вывода данных видеозахвата.

Рис. 3.3. Окно обмена файлами

Окно обмена файлами разделено по горизонтали на 2 панели. Верхняя панель отображает локальные диски и файловые системы, а нижняя диски и файловые системы удаленного компьютера. Обе панели имеют аналогичные элементы управления и поддерживают технологию Drag&Drop (перемещение объектов с помощью мыши).

Рис. 3.4. Диалог редактирования времени

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

Рис. 3.5. Диалог запуска программ

Эта функция служит для ввода имени программы и запуска ее на контролируемых компьютерах.

3.2.Структура программного обеспечения для сервера

Учитывая большое количество и разнообразие функций, необходимых для реализации, автоматизированной обработки и организации интерфейса, был создан проект «rcontrol.bpr», объединяющий следующие файлы:

  •  rcontrol.cpp – файл-точка входа в программу, создание главного окна;
  •  shares.cpp – файл определения секций в памяти;
  •  MainForm.cpp – файл главного окна;
  •  ftransfer.cpp – файл окна обмена файлами;
  •  ExForm.cpp – файл диалога запуска программ;
  •  EditTime.cpp – файл диалога редактирования времени;
  •  AddTimeF.cpp – файл диалога изменения временных интервалов;
  •  MainForm.h – заголовочный файл главного окна;
  •  ftransfer.h – заголовочный файл окна обмена файлами;
  •  ExForm.h – заголовочный файл диалога запуска программ;
  •  EditTime.h – заголовочный файл диалога редактирования времени;
  •  AddTimeF.h – заголовочный файл диалога изменения временных интервалов;
  •  cmdlist.h – файл определений списка команд управления.
  •  client.ini – файл списка компьютеров

Описание заголовочных файлов rCon

cmdlist.h

Файл содержит определения команд управления, кодами которых обмениваются программы rCon и lCon;

MainForm.h

Файл содержит описание класса главного окна TMForm, производного от встроенного класса окна клиента TForm. Так же описаны прототипы вводимых функций и определена карта обработки дополнительных системных сообщений.

ftransfer.h

Файл содержит описание класса окна обмена файлами TFExplForm, производного от встроенного класса окна клиента TForm и описаны прототипы вводимых функций.

ExForm.h

Файл содержит описание класса диалога запуска программ TExecForm, производного от встроенного класса окна клиента TForm.

EditTime.h

Файл содержит описание класса диалога редактирования времени TEditTimeForm, производного от встроенного класса окна клиента TForm.

AddTimeF.h

Файл содержит описание класса диалога изменения временных интервалов TAddTimeForm, производного от встроенного класса окна клиента TForm.

Описание блоков программного обеспечения rCon

rcontrol.cpp

  •  WinMain – создаёт объект приложения класса TExpApp, производного от класса TApplication и передаёт ему управление.
  •  makeInterlock – Вспомогательная функция вызывается перед созданием главного окна приложения для регистрации глобального системного объекта Mutex. Делается это с целью того чтобы при повторных запусках программы можно было определить, то что программа уже запущена.

MainForm.cpp

  •  TMForm – конструктор главной формы. Производит инициализацию массива временных интервалов;
  •  FormCreate – вызывается перед показом главной формы:

– инициализирует сетевые функции

– копирует в разделяемую секцию памяти handle главного окна

– перемещает значек программы с панели задач в системный трэй

производит загрузку информации о контролируемых компьютерах из файла client.ini

  •  SendSimpleCommand – посылает требуемую команду всем компьютерам выделенным в списке;
  •  SendSimpleCommandTo – посылает требуемую команду определённому компьютеру;
  •  NMUDP1DataReceived – функция обработки поступивших данных;
  •  TimerTimer – функция таймера (вызывается каждые 5 секунд), обновления таблицы временных интервалов и эскизов видео захвата;
  •  ToolBtnRefreshClick – обновление информации о состоянии компьютеров;
  •  CompPopMenuWolClick – функция посылки компьютера сигнала WOL;
  •  in_ether – проверка правильности записи MAC адреса;
  •  LoadFromFile – осуществляет чтение файла client.ini и заполняет поля объекта CompListView (список компьютеров).

ftransfer.cpp

  •  TFExplForm – конструктор окна обмена файлами. Производит инициализацию путей просматриваемых каталогов и формирование пакета размером N байт для обмена информацией с удалённым компьютером;
  •  Connect – производит соединение по TCP протоколу к удалённому компьютеру;
  •  FormatLastError – производит преобразование кода последний ошибки в текстовое сообщение;
  •  checkDots – проверяет не является ли каталог точками (“.” – текущий каталог, “..” – родительский каталог);
  •  CheckPath – проверяет является ли данный путь корректным.
  •  CreateDir – создаёт каталог;
  •  DeleteDirectory – рекурсивно удаляет каталог;
  •  CustomSortProc – функция сортировки файлов по параметрам;
  •  FormatItem – перед выводом информации о файле пользователю она оформляется в соответствии со структурой WIN32_FIND_DATA;
  •  RefreshPath – обновляет информацию о каталоге;
  •  RRrefreshPath – обновляет информацию о каталоге удалённой машины;
  •  UploadFile – копировать файл на удалённый компьютер;
  •  DownloadFile – загрузить файл с удалённого компьютера;
  •  UploadDir – копировать каталог на удалённый компьютер;
  •  DownloadDir – загрузить каталог с удалённого компьютера;

client.ini

Файл списка компьютеров представляет собой символьный файл и включает информацию об именах компьютеров, IP адресов и MAC адресов. Структура файла: имя>|<IP>|<MAC>|

Запись о каждом компьютере должна находиться в отдельной строке. Пример файла client.ini приведен в приложении.

3.3. Описание программы для клиента и его структура

Минимальные системные требования:

  •  Процессор – Pentium III 600 MHz;
  •  Оперативная память – 64 Mb;
  •  видеокарта 800х600, true color;
  •  2 Mb дискового пространства;
  •  Windows  2000, XP

Структура программного обеспечения:

  •  Service.cpp – файл-точка входа в программу, регистрация службы;
  •  utils.cpp – вспомогательные функции;
  •  Serv.cpp – основной файл службы;
  •  pjhost.cpp – файл dll библиотеки работы с устройствами ввода;
  •  Pipe.cpp – файл асинхронного канала связи с модулями (lGina);
  •  fexpl.cpp – файл файлового обмена;
  •  videogrub.cpp – файл захвата видеоинформации;
  •  msgwnd.cpp – файл вывода текстовых сообщений;
  •  Service.h – заголовочный системной службы;
  •  utils.h – заголовочный файл вспомогательные функции;
  •  pjhost.h – заголовочный файл dll библиотеки работы с устройствами ввода;
  •  Pipe.h – заголовочный файл асинхронного канала связи с модулями;
  •  fexpl.h – заголовочный файл файлового обмена;
  •  videogrub.h – заголовочный файл захвата видеоинформации;
  •  msgwnd.h – заголовочный файл вывода текстовых сообщений;
  •  cmdlist.h – файл определений списка команд управления.

Описание заголовочных файлов lCon

cmdlist.h

Файл содержит определения команд управления, кодами которых обмениваются программы rCon и lCon;

Service.h

Файл содержит описание параметров регистрации системной службы.

utils.h

Файл содержит описание прототипов вспомогательных функций.

pjhost.h

Файл содержит прототип экспортируемой функции dll.

Pipe.h

Файл содержит прототипы функций управления ассинхроным каналом.

fexpl.h

Файл содержит прототипы функций файлового обмена.

videogrub.h

Файл содержит прототипы функций захвата видеоинформации.

msgwnd.h

Файл содержит описание прототипов функций управления окном сообщения.

Описание блоков программного обеспечения lCon

Service.cpp

  •  main – функция входа в программу. Выполняет установку или удаление данной программы как системной службы;
  •  service_main – функция входа в службу;
  •  service_ctrl – функция обратной связи с диспетчером служб;
  •  ReportStatusToSCMgr – сообщает о текущем состоянии службы диспетчеру;
  •  CmdInstallService – устанавливает службу;
  •  CmdRemoveService – удаляет службу.

Serv.cpp

  •  ServiceStart – основная функция службы;
  •  ServiceStop – устанавливает событие завершения работы службы;
  •  ExecCommand – выполняет полученную команду;
  •  RecvMsgThread – функция получения команд от устройств ввода;
  •  Shoot – выключение компьютера;
  •  LogOFF – завершение сеанса;
  •  CreateProcAs – запуск нового процесса (от имени другого пользователя);
  •  SendCommand – посылает сообщение серверу rCon.

pjhost.cpp

  •  DllMain – функция входа в dll;
  •  HookLLпроверка на действие;
  •  HookControl – установка ловушек работы с устройствами ввода.

Pipe.cpp

  •  CreateServPipeThread – функция создает канал связи с именем “\\\\.\\pipe\\gserv” и новый поток для работы с ним;
  •  pipeCheckпроверка ошибок в канале
  •  InstanceThread – функция производит операции чтение и записи из потока в асинхронном режиме;
  •  CloseServPipeThread – устанавливает событие завершения работы канала.

msgwnd.cpp

  •  ShowMsgWindows  – регистрирует новый класс окна и выводит его на 2-х рабочих столах;
  •  CloseMsgWindows – функция закрытия всех окон;
  •  WndProc – оконная функция.

fexpl.cpp

  •  checkDots – проверяет не является ли каталог точками (“.” – текущий каталог, “..” – родительский каталог);
  •  DeleteDirectory – рекурсивно удаляет каталог;
  •  FormatLastError – производит преобразование кода ошибки в текстовое сообщение;
  •  StartExpl – функция запуска сеанса обмена файлами.

Производит формирование пакета размером N байт для обмена информацией с rCon, инициализирует порт на сетевом интерфейсе для ожидания соединения и создает новый поток для работы;

  •  RecvMsgThread – функция потока для получения сообщений и произведения необходимых действий;
  •  Download – функция загрузки каталога с сохранением файловой структуры.

videogrub.cpp

  •  StartGrub – функция подготовки и запуска видеозахвата;
    1.   инициализация сетевых функций;
    2.   выделение памяти под необходимые массивы;
    3.   открытие порта на сетевом интерфейсе для получения  команд;
    4.   создание нового потока.
  •  RecvMsgThread – функция потока для получения сообщений и произведения необходимых действий;
  •  SendBuf – функция доставки данных и проверки ошибок;
  •  Work – функция захвата и обработки видеоинформации;
  1.   захват видеоинформации;
  2.   преобразование пикселей в формат 15 + 1;
  3.   сжатие данных по алгоритму RLE;
  4.   отправка данных программе rCon.
  •  EndGrub – процедура завершения видеозахвата.

utils.cpp

  •  GoToDesktop – функция переключения на другой рабочий стол;
  •  RestoreDesktop – функция восстановления предыдущего рабочего стола;
  •  LogLastError – записывает в файл сообщение о последней ошибке;
  •  LogAction – записывает в файл текстовую строку.

Глава 4. Экологичность и безопасность проекта

4.1. Аннотация

В разделе «Экологичность и безопасность проекта» необходимо провести анализ потенциальных экологических и производственных опасностей и осуществить разработку технических и организационных способов предотвращения опасных последствий. Создание безопасного рабочего места и микроклимата в помещении, в нашем случае это офис, для сетевого администратора является необходимым для любого предприятия, ведь от этого зависит качество работы не только специалиста, но и всей компании.

Если работа сетевого администратора будет проходить не в безопасных условиях, то специалисту  будет просто не комфортно на рабочем месте, а значит:

-  возрастет количество ошибок в работе;

-  увеличится время решения поставленных задач;

- специалист не будет сконцентрирован на работе из-за посторонних факторов  (слишком яркий или тусклый свет, плохая вентиляция).

Из выше перечисленных пунктов следует, что  для обеспечения оптимальных условий труда требуется в первую очередь обеспечить безопасное рабочее место системного администратора.

4.2. Характеристика условий труда

Помещение, в котором находится рабочее место сетевого администратора, представляет из себя офисную комнату, которая имеет следующие характеристики:

Длина помещения – 5 м;

Ширина помещения – 3 м;

Высота помещения – 3 м;

Количество окон – 1;

Количество работающих – 1;

Количество компьютеров - 1;

Определение площади на одного работающего

Наименьшее допустимое значение площади помещения на одного работающего составляет 6 м2 (СанПиН 2.2.2.542-96).

В данном случае общая площадь помещения составляет 15 м2, на одного работающего приходится площадь S1, которая вычисляется делением общей площади S на количество работающих в помещении работников n:  ; имеем 15 м2, что соответствует санитарным нормам.

Определение объема на одного работающего

Наименьшее допустимое значение объема производственного помещения на одного работающего составляет 20 м3. В данном случае объем помещения м3, а на одного работающего приходится объем V1, который вычисляется делением общего объема V на количество работающих в помещении работников n: ; имеем 45 м3, что соответствует санитарным нормам.

Определив площадь и объем помещения на одного работающего и сравнив с наименьшими допустимыми значениями, делаем вывод, что размеры помещения удовлетворяют требованиям ГОСТа, норм и правил.

4.3. Организация рабочего места сетевого администратора

Рекомендуемые размеры рабочего стола для взрослого человека:

- ширина стола - 1500 мм ;

- глубина стола - 800 мм ;

- высота  - 725 мм.

Главными элементами рабочего места сетевого администратора являются письменный стол и кресло. Основным рабочим положением является положение сидя. Рабочее место для выполнения работ в положении сидя организуется в соответствии с ГОСТ 12.2.032-78.

Рабочая поза сидя вызывает минимальное утомление специалиста. Рациональная планировка рабочего места предусматривает четкий порядок и постоянство размещения предметов, средств труда и документации. То, что требуется для выполнения работ чаще, расположено в зоне легкой досягаемости рабочего пространства. Максимальная зона досягаемости рук это часть рабочего места, ограниченного дугами, описываемыми максимально вытянутыми руками при движении их в плечевом суставе.

Оптимальная зона часть моторного поля рабочего места, ограниченного дугами, описываемыми предплечьями при движении в локтевых суставах с опорой в точке локтя и с относительно неподвижным плечом.

Рис. 4.1. Зоны досягаемости рук в горизонтальной плоскости.

а  зона максимальной досягаемости;

б  зона досягаемости пальцев при вытянутой руке;

в  зона легкой досягаемости ладони;

г  оптимальное пространство для грубой ручной работы;

д  оптимальное пространство для тонкой ручной работы.

Рассмотрим оптимальное размещение предметов труда и документации в зонах досягаемости рук:

ДИСПЛЕЙ размещается в зоне а (в центре);

КЛАВИАТУРА в зоне г/д; 

СИСТЕМНЫЙ БЛОК размещается в зоне б (слева);

ПРИНТЕР находится в зоне а (справа);

ДОКУМЕНТАЦИЯ: в зоне легкой досягаемости ладони  в (слева) литература и документация, необходимая при работе; в выдвижных ящиках стола литература, не используемая  постоянно.

При проектировании письменного стола следует учитывать следующее:

- высота стола должна быть выбрана с учетом возможности сидеть свободно, в удобной позе, при необходимости опираясь на подлокотники;

- нижняя часть стола должна быть сконструирована так, чтобы специалист мог удобно сидеть, не был вынужден поджимать ноги;

- поверхность стола должна обладать свойствами, исключающими появление бликов в поле зрения человека;

- конструкция стола должна предусматривать наличие выдвижных ящиков (не менее 3-х для хранения документации, листингов, канцелярских принадлежностей, личных вещей).

Оборудование и инструменты на рабочем месте

На рабочем месте сетевого администратора предусмотрено следующее оборудование:

- персональный компьютер типа IBM PC;

- видео дисплейный терминал (монитор);

- источник бесперебойного питания (UPS);

- клавиатура;

- мышь.

Эскиз рабочего места сетевого администратора

Рис. 4.2. Эскиз рабочего места сетевого администратора (вид спереди).

Рис. 4.3. Эскиз рабочего места сетевого администратора (вид сверху и сбоку).

1) Необходимая ДОКУМЕНТАЦИЯ расположена в зоне легкой досягаемости ладони (слева) литература и документация, необходимая при работе;

2) ДИСПЛЕЙ размещается в центре;

3) ПРИНТЕР находится справа;

4) ПОДСТАВКА ДЛЯ НОГ;

5) СИСТЕМНЫЙ БЛОК размещается в нижней зоне (справа);

6) КЛАВИАТУРА;

7) В выдвижных ЯЩИКАХ СТОЛА – документация и литература.

4.4. Карта условий труда для сетевого администратора

Составим карту условий труда, учитывая специфические факторы и особенности, относящиеся к нашему офису.

Карта условий труда для сетевого администратора на рабочем месте

Показатели условий труда. Единицы измерения.

ПДУ, ПДК

Оценка

показателя

Длительность воздействия (экспозиция)

Балл с учетом экспозиции

Абсолютная

В баллах

Мин.

В % смены

1

2

3

4

5

6

7

8

А. Психофизиологические нагрузки.

1

Напряжение зрения:

освещенность рабочего места, лк

На уровне санитарн. норм

2

95

2

размеры объекта, мм

0.3-0.15

3

90

3

энтропия зрительной информации, бит/сигнал

32

4

80

4

число информационных сигналов в час

>300

4

80

4

2

Напряжение слуха:

уровень шума, дб

ПДУ

2

90

2

соотношение сигнал-шума , %

70

2

85

2

энтропия слуховой информации, бит/сигнал

24

3

85

3

3

Напряжение внимания:

длительность сосредоточенного наблюдения, % времени смены

90

4

95

4

число важных объектов наблюдения

>25

4

85

4

число движения пальцев в час

1080

3

95

3

4

Напряжение памяти:

необходимость помнить об элементах работы свыше 2-х часов (кол-во эл.)

3-5

6

87

6

поиск рассогласований, в % от числа регулируемых параметров

50

3

60

1.8

5

Нервно-эмоциональное напряжение. Экспертная оценка.

4

65

2.5

6

Интеллектуальное напряжение. Экспертная оценка.

4

70

4

7

Физическая нагрузка:

энергозатраты, Вт

232

2

30

0.6

внешняя механическая работа, Вт

37

2

40

0.8

8

Статическая нагрузка в течение смены, кгс.сек

36000

2

90

2

на обе руки

86000

2

90

2

на весь корпус

123000

2

90

2

9

Рабочее место, рабочая поза, перемещение в пространстве. Экспертная оценка.

1

97

1

10

Сменность

Одна

1

1

11

Продолжительность работы в течение суток, час

8

2

100

2

12

Монотонность:

число приемов в операции

5-3

4

95

4

Абсолютная

В баллах

Мин.

В долях смены

Абсолютная

В баллах

Мин.

В долях смены

длительность повторяющихся операций, с

5-9

5

80

5

13

Режим труда и отдыха

Без гимнастики и музыки

2

10

0.2

Б. Санитарно-гигиенические условия труда.

14

Температура воздуха на рабочем месте:

теплый период, С

21-22

2

97

2

холодный период, С

17-19

2

97

2

15

Вредные химические в-ва, кратность превышения ПДК

ПДК

2

97

2

16

Промышленная пыль, кратность превышения ПДК

ПДК

2

97

2

В. Оценка условий труда.

17

Число факторов, формирующих тяжесть труда, n

29

18

Сумма балов, i

73.9

19

Усредненный бал kср

2.548

20

Показатель интегральной оценки условий труда, kz

39.81

21

Категория тяжести труда,

III

Табл. 4.1. Карта условий труда

С помощью карты условий труда мы видим, что работа определяется III категорией тяжести труда, а это значит, что необходимо предусмотреть специальные меры по восстановлению исходного до рабочего состояния: это отдых и перерывы после работы рационализация режима труда и отдыха, оздоровление условий труда. Из карты видно, что основная нагрузка программиста - психологическая. Это напряжение памяти, внимания, монотонность работы. Из физических нагрузок наибольшим показателем категории тяжести труда является напряжение зрения (т.к. программист все свое рабочее время проводит перед монитором). Остальные физические показатели, такие как уровень шума, физическая нагрузка, невелики и не выходят за пределы допустимых норм. Для оптимизации условий труда на рабочем месте рекомендуются следующие организационные меры: во-первых предлагается оборудовать рабочее место сетевого администратора только такими компьютерами, в технической документации которых указаны стандарты электрической и магнитной излучаемости (такие как MPR-II, TCO’92), так как в противном случае на специалиста будет воздействовать повышенная доза излучения, что приведет к быстрому утомлению, снижению внимания и памяти, ухудшению здоровья. Мониторы предлагается выбирать такие, которые имеют кадровую частоту не менее 75 герц. Это позволяет ослабить эффект мерцания экрана, от которого в основном и устает зрение человека, наблюдающего за экраном долгое время. Так же предлагается выбирать мониторы с размером диагонали экрана не менее 17 дюймов, т.к. на экранах меньшего размера буквы текста будут мелкими, что приведет к быстрому зрительному переутомлению. Оборудовать помещение радиоузлом или магнитофоном, посредством которых воспроизводить спокойную тихую музыку, помогающую отвлечься, но и не мешающую работе. Смена обстановки, прогулка по улице позволяют практически полностью восстановить исходное рабочее состояние, ослабленное после первой половины рабочего дня. Такие паузы помогают сбросить усталость, снять умственное и психологическое напряжение и позволяют поддерживать работоспособность человека на высоком уровне в течение всего рабочего дня.

, где         

n – число факторов;

ki – балл i – того показателя.

Определим интегральный показатель воздействия всех факторов:

       

Отсюда

По интегральному показателю из таблицы находят категорию тяжести труда.

1 категория - оптимальные условия труда, т.е. такие, которые при систематическом и длительном воздействии на человека обеспечивают нормальное состояние его организма. Опасные и вредные факторы отсутствуют.  Работоспособность высокая,  отсутствуют функциональные сдвиги по медицинским показателям.

2 категория - условия труда допустимые, т.е. такие, которые могут вызывать временное ухудшение самочувствия человека. После отдыха состояние человека нормализуется. .

3 категория  - условия на грани допустимых. Если по расчету категория тяжести труда окажется выше 2 категории, то необходимо принимать технологические решения по рационализации наиболее тяжелых факторов и доводить их до нормальных условий.

4 категория – отличающиеся условия от допустимых.

5 категория - резко отличается от допустимых условий.

6 категория – за гранью допустимых условий.

Согласно полученному показателю можно сделать вывод, что данная работа относится к третьей категории тяжести труда.

Рассчитаем коэффициент  работоспособности по формуле:

 

Отсюда:      

 

4.5. Расчет комбинированного освещения

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

Как правило, используется освещение трех видов: естественное, обусловленное лучистой энергией солнца, искусственное, осуществляемое электрическими лампами и смешанное, т.е. сочетание естественного и искусственного освещения. Освещенность на поверхности стола в зоне размещения рабочего документа должна быть 300 - 500 лк. По СанПин допускается установка светильников местного освещения для подсветки документов.

В соответствии с вышеуказанными нормами производится выбор системы освещения, типа ламп, их мощности, количества, их расположения и высоты подвеса.

Выбираем светильники ОД с газоразрядными лампами, расположены они параллельными рядами.

Тип проводки – закрытая, в строительных конструкциях под штукатуркой, провода.

Минимальная освещённость от комбинированного освещения 400 лк, общее освещение 200 лк.

Система освещения – комбинированная: общее равномерное, естественное плюс местное; потребная освещённость при комбинированном освещении газоразрядными лампами от светильников общего освещения 200 лк, от местного – 150 лк;

Необходимый коэффициент запаса (по выделяемой пыли) 1,6;

Наиболее выгодное отношение расстояния между светильниками к высоте подвески светильников  

 0,66;

 0,66*3 = 2 м;

 1.2 м;

Расстояние между светильниками по ширине примем равным длине светильника плюс 0.05 м;

Расстояние от стены до первого ряда светильников:

0.30.3 * 2 = 0.6 м;

Расстояние между крайними рядами по ширине помещения:

 25 - 2* 0.6 = 3,8 м;

Число рядов, которое можно расположить между крайними рядами по ширине помещения:

3,8/1.2 - 1 = 2,1;

Общее число рядов светильников по ширине:

2,1 + 2 = 4.5;

Расстояние между крайними рядами светильников по длине помещения:

 3 – 2* 0.6 = 1.8 м;

Число светильников, которое можно расположить между крайними рядами по длине: 1.8/2-1 =0.1;

Общее число рядов светильников по длине:

0,1 + 2 = 2,3;

Общее число рядов светильников, которые необходимо установить по длине и ширине:

4,5 + 2,3 = 6,7;

Коэффициенты отражения от стен () и потолков () – по окраске стен и потолков: 56%, 73%;

Коэффициент,учитывающий равномерность освещения в зависимости от типа светильников и отношения : 1.13;

Площадь пола освещаемого помещения:   3 * 5 = 15 кв.м;

По длине и ширине помещения, и высоте подвески светильников находим показатель помещения:

15 /(3+5)*3 = 0.6;

Коэффициент использования светового потока: 0.53;

Расчётный (потребный) световой поток одной лампы:

150* 1.6 *1.13 *15/(4,5*0.53) = 1705 лм;

По напряжению в сети и световому потоку одной лампы  1705 лм по справочным таблицам (ГОСТ 2239-70) определяем необходимую мощность электролампы ЛД-65 40 Вт. В каждом светильнике имеется лампа ЛД-65 со световым потоком 1705   лм;

Рис.4.4. Используемая электролампа

Расчёт местного освещения (точечным методом)

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

Определение светового потока от лампы местного освещения, создающей над рабочей поверхностью освещённость Емест. :

Fл = , где

- коэффициент запаса (для ламп накал. - 1,3) ;

m - коэффициент, учитывающий влияние отражённого света и удалённых светильников (m » 1,1), e - условная освещённость (освещённость, создаваемая условной лампой со световым потоком Fл = 1000 лм, зависящая от светораспределения светильника и определяемая по графикам пространственных изолюкс. По рис. 4.5. для светильника типа “Альфа”,

Рис. 4.5. Кривые пространственных изолюкс.

h = 0,5 м и d = 0,3 м определяем : e = 320 лк .

Fл = = = 1477,3 лм.

Качественные показатели искусственного освещения

Для качественной оценки условий зрительной работы используют такие показатели, как фон, контраст объекта с фоном, коэффициент пульсации освещенности, показатель освещенности, спектральный состав света.

Фон (, доли ед.) - поверхность, прилегающая непосредственно к объекту различения, на которой он рассматривается. Фон характеризуется способностью поверхности отражать падающий на нее световой поток и определяется как отношение отражаемого от поверхности светового потока Фотр к падающему на нее световому потоку Фпад.:

.

В зависимости от цвета и фактуры поверхности значения коэффициента отражения находятся в пределах 0,02-0,95; при р > 0.4 фон считается светлым; при р = 0,2.. .0,4 - средним; при р < 0,2 - темным.

Фон:

=  716 лм/ 3411 лм = 0.209

Фон считается средним.

Контраст объекта различения с фоном (К, доли ед.) - определяется отношением абсолютной величины разницы между яркостью объекта (L0) и фона к яркости фона (Lф):

.

= (200 - 120)/200  = 0.4

Контраст объекта различения с фоном средний.

Контраст объекта различения с фоном считается: большим - при К > 0,5 (объект резко выделяется на фоне); средним - при К = 0,2.. .0,5 (объект заметно выделяется на фоне); малым - при К < 0,2 (объект и фон мало отличаются по яркости).

Коэффициент пульсации освещенности (Кп,%) - это критерий оценки глубины колебаний освещенности в результате изменения во времени светового потока.

Коэффициент пульсации освещённости – критерий оценки относительной глубины колебаний освещённости в результате изменения во времени светового потока. Рассчитывается по формуле:

, где и - максимальное и минимальное значение освещённости,

  •  - среднее значение освещённости за тот же период.

Минимальная освещённость рассчитывается по формуле:

,

где N – количество ламп,

Ф – световой поток одной лампы,

- коэффициент использования,

S- площадь помещения,

z – коэффициент неравномерной освещённости. Зависит от расстояния между светильниками и их типов. Для люминесцентных ламп z=1,1

=413  лк

Коэффициент нормальной освещённости равен отношению значения среднего освещения к минимальному, следовательно, среднее значение освещённости рассчитывается по формуле:

Eср =413 * 1,1 = 454,3 лк    

Eср =372 * 1,1 = 409,2 лк    

Emax = (Eср - Emin)+Eср = 2Eср – Emin

Emax = 744-413 = 331 лк  

Kп = 12%

Наименьший объект различения = 0,3 – 0,5 мм

Характеристика зрительной работы – высокой точности

Разряд зрительной работы: В

Коэффициент пульсации не должен превышать 15%, следовательно, глубина колебаний освещённости допустима.

Показатель ослепленности (Р) - критерий оценки слепящего действия осветительной установки, определяемый выражением

,

Показатель ослепленности:

=  (0.112/0.1 - 1)*1000 = 120

где S - коэффициент ослепленности, равный отношению пороговых разностей яркости при наличии и отсутствии слепящих источников в поле зрения; V1 и V2 - видимость объекта различения соответственно при экранировании и наличии ярких источников света в поле зрения.

Видимость (V) - способность глаза воспринимать объект. Она зависит от освещенности, размера объекта, его яркости, контраста объекта с фоном, длительности экспозиции. Видимость определяется числом пороговых контрастов в контрасте объекта с фоном, то есть, где kпор - пороговый или наименьший различимый глазом контраст, при небольшом уменьшении которого объект становиться не различимым на этом фоне.

Видимость:

V = 0.4/0.1 = 4

4.6. Расчет вентиляции

Системы отопления и системы кондиционирования следует устанавливать так, чтобы ни теплый, ни холодный воздух не направлялся на людей. На производстве рекомендуется создавать динамический климат с определенными перепадами показателей. Температура воздуха у поверхности пола и на уровне головы не должна отличаться более, чем на 5 градусов. В производственных помещениях помимо естественной вентиляции предусматривают приточно-вытяжную вентиляцию. Основным параметром, определяющим характеристики вентиляционной системы, является кратность обмена, т.е. сколько раз в час сменится воздух в помещении.

Оптимальным вариантом является кондиционирование воздуха, т.е. автоматическое поддержание его состояния в помещении в соответствии с определенными требованиями (заданная температура, влажность, подвижность воздуха) независимо от изменения состояния наружного воздуха и условий в самом помещении.

Учитывая, что сетевой администратор находится в офисной комнате целесообразно использовать общеобменную механическую вентиляцию.

Расчет для помещения

Vвент  объем воздуха, необходимый для обмена;

Vпом  объем рабочего помещения.

Для расчета примем следующие размеры рабочего помещения:

- длина  В = 5 м;

- ширина А = 3 м;

- высота  Н = 3 м.

Из этого следует, что объем помещения равен:

 м3

Необходимый для обмена объем воздуха Vвент определим, исходя из уравнения теплового баланса:

Qизбыт  избыточная теплота (Вт);

С = 1000 удельная теплопроводность воздуха (Дж/кгК);

Y = 1,2 плотность воздуха (мг/см).

Температура уходящего воздуха определяется по формуле:

, где

t = 15 градусов превышение t на 1 м высоты помещения;

tр.м. = 22 градусов температура на рабочем месте;

по ГОСТ 12.1.005-88, 220С

Н = 3 м высота помещения;

tприход = 18 градусов.

Расчет теплопоступления от офисного оборудования

Из уравнения теплового баланса следует:

 м3

Определим  кратность вентиляции в помещении.

Расчет потерь давления в вентиляционной системе. Выбор вентилятора и электродвигателя

Вентиляционная система состоит из  нескольких элементов:

1. Приточной камеры, в состав которой входят вентилятор с электродвигателем, калорифер для подогрева воздуха в холодное время года и жалюзная решетка для регулирования объема поступающего воздуха;

2.   Круглого стального воздуховода длиной 1,5 м;

3.   Воздухораспределителя для подачи воздуха в помещение.

Потери давления в вентиляционной системе определяются по формуле:

, где

Н потери давления, Па;

R удельные потери давления на трение в воздуховоде, Па/м;

l длина воздуховода, м;

V скорость воздуха, (V = 3 м/с );

р плотность воздуха, (р = 1,2 кг/м ).

Необходимый диаметр воздуховода для данной вентиляционной системы:

м

Принимаем в качестве диаметра большую стандартную ближайшую величину 0,62 м, при которой удельные потери давления на трение в воздуховоде R = 0,35 Па/м.

Местные потери возникают в железной решетке ( = 1,2), воздухораспределителе ( = 1,4) и калорифере ( = 2,2). Отсюда, суммарный коэффициент местных потерь в системе:

 

Тогда

Па

С учетом 10 %-го запаса:

Н = 110% * 26,04 = 28,64 Па;

Vвент = 110% *241 = 265,1 м3/ч.

По каталогу выбираем вентилятор осевой серии МЦ4: давление 40 Па, КПД 65%, скорость вращения 960 об/мин, диаметр колеса 400 мм, мощность электродвигателя 0,032 кВт, производительность до 8500 м3/ч.

Рис. 4.6. Схема вентиляции в помещении.

4.7. Выводы

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

Глава 5. Организационно-экономический раздел

5.1. Аннотация

В современном мире, когда компьютеры уже окончательно проникли в нашу жизнь, сложно представить себе какую-либо сферу деятельности человека, где не потребовался бы компьютер. Все больше и больше рабочих мест оборудуется компьютером как основным рабочим инструментом.

В связи с этим стремительным ростом количества компьютеров существенно повышаются затраты на обслуживающий персонал и на оплату счетов за электроэнергию. Данный программный комплекс разрабатывался как альтернатива существующим решениям, но с добавлением собственных оригинальных решений существующих задач.

В данном разделе дипломного проекта представлено технико-экономическое обоснование разработки программного обеспечения для дистанционного управления компьютерами, включенными  в локальную сеть. Областью применения разрабатываемого программного обеспечения является ЗАО «АКАДО-Столица», крупный  российский телекоммуникационный холдинг. Целесообразность разработки проекта в том, что в результате внедрения данного продукта будут обеспечены:

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

  •  режим захвата видеоинформации;
  •  возможность вывода на экран управляемых компьютеров сообщений (предупреждений);
  •  обмен текстовыми сообщениями;
  •  контроль режима работы компьютеров (по расписанию, по таймеру);
  •  возможность удаленной регистрации локальных пользователей;
  •  файловый обмен (копирование, удаление, синхронизация);
  •  запуск программ на управляемом компьютере;
  •  удаленное включение компьютеров;
  •  наблюдение за загруженностью центрального процессора и т.д.

5.2. Расчет трудозатрат и составление сметы затрат на выполнение проекта

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

В данной работе рассмотрены следующие типовые статьи затрат:

  •  материальные затраты (материалы, покупные изделия и полуфабрикаты (за вычетом отходов);
  •  основная заработная плата научного и производственного персонала;
  •  дополнительная заработная плата научного и производственного персонала;
  •  единый социальный налог;
  •  накладные расходы;
  •  стоимость;
  •  прибыль;
  •  оптовая цена предприятия;
  •  договорная цена.

Материальные затраты

В эту статью относится стоимость материалов, покупных изделий, полуфабрикатов и других материальных ценностей, расходуемых непосредственно в разработке. Цена материальных ресурсов определяется по соответствующим ценникам.

Расчет статьи «материальные и покупные изделия» приводится в  таблице 5.1.

Наименование

Единицы измерения

Кол-во

Цена за единицу руб.

Сумма руб.

Картридж

Шт.

1

2100

2100

Бумага

Пачка, 500 листов

3

200

600

Накопитель USB 4ГБ

Шт.

2

350

700

Органайзер настольный (набор) на 13 предметов

Шт.

2

200

400

ИТОГО

3800

Таблица 5.1. Расчет статьи «Материалы и покупные изделия»

Транспортно-заготовительные расходы ТР рассчитываются в размере 18% от стоимости материалов по формуле:

ТР = 0,18 * М,   где М - стоимость материалов и покупных изделий.

Получаем:

ТР = 0,18 * 3800 = 684 руб.

Стоимость материалов с учетом транспортных расходов:

СМ = 3800 + 684 = 4484 руб.

Основная заработная плата научного и производственного персонала

Основная зарплата – это выплаты заработной платы за фактическую выполненную работу. Расчет основной заработной платы выполняется на основе трудоемкости выполнения каждого этапа в человеко-днях и величины месячного должностного оклада исполнителя.

Среднее количество рабочих дней в месяце равно 22-м. Следовательно, дневная заработная плата определяется делением размера оклада на количество рабочих дней в месяце. Трудоемкость известна, и по ней находится количество дней, которое необходимо потратить на каждый этап.

Произведение продолжительности выполнения каждого этапа каждым работником на его дневную заработную плату, определяет затраты по зарплате на каждого работника. Далее суммируя все выплаты по этапам, получаем сумму, выплаченную за все время разработки.

Расчет основной заработной платы по теме приведен в таблице 5.2.

Исполнитель должность

Трудоемкость, чел. - дн.

Должностной оклад,

руб.

Стоимость

1 чел. дня,

руб.

Затраты по зарплате,

руб.

Начальник сектора

40

9100

413

16550

Инженер-программист   1 категории

60

7000

318

19090

Инженер-программист    2 категории

50

6000

272

13636

ИТОГО

49276

Таблица 5.2. Основная заработная плата производственного персонала

Дополнительная заработная плата

На эту статью относятся выплаты, предусмотренные законодательством о труде за не отработанное по уважительным причинам время: оплата очередных и дополнительных отпусков и т.п. (принимается в размере 25% от суммы основной заработной платы):

Дзп = 0,25 * 49276 = 12319 руб.

Фонд оплаты труда: ФОТ = Основная з/п +Дополнительная з/п

ФОТ = 49276 + 12319 = 61595 руб.

Единый социальный налог

Затраты по этой статье определяются в процентном соотношении (26%) от суммы основной и дополнительной заработной платы (ФОТ):

ЕСН = 0,26 * ФОТ = 0,26 * 61 559 =  16 005 руб.

Накладные расходы

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

Накладные расходы принимаются в размере 200% от суммы основной заработной платы.

НР = 2 * 49 276 = 98 552 руб.

Стоимость

Стоимость программного продукта расчитывается как сумма по статьям 3.1 – 3.9 и равна 176 152 руб.

Прибыль

Прибыль определяется на уровне 30% от стоимости:

Пр = 0,3 * С = 0,3 * 176 152 = 52 845 руб.

Оптовая цена предприятия

Оптовая цена предприятия равна сумме стоимости продукта и прибыли от продаж:

ОЦ = С + Пр = 176 152 + 52 845 = 228 997 руб.

Договорная цена

Договорная цена программного продукта равна сумме оптовой цены предприятия и налога на добавленную стоимость:

ДЦ = ОЦ + НДС

Налог на добавленную стоимость (НДС) – это косвенный налог, которым государство облагает по постоянной ставке (в %) добавленную стоимость товара или услуги. НДС равен стоимости умноженной на ставку НДС и деленную на 100%.

НДС = (СТ * СтНДС)/100%

В Российской Федерации сосуществуют 3 ставки НДС: 18%, 10% и 0%, что зависит от вида деятельности предприятия и реализуемой продукции (регламентируется главой 21 Налогового кодекса Российской Федерации).В нашем случае

НДС = (176 152 * 18%)/100% = 31 707

Поэтому договорная цена равна   

228 997 + 31 707 = 260 70

Статьи затрат

Сумма, руб

1

Материальные затраты

3 800

2

Специальное оборудование для научных (экспериментальных) работ

3

Основная заработная плата научного и производственного персонала

49 276

4

Дополнительная заработная плата научного и производственного персонала

12 319

5

Единый социальный налог

16 005

6

Расходы на научные и производственные командировки

7

Оплата работ, выполняемых сторонними организациями и предприятиями

8

Прочие расходы (связанные с арендой машинного времени)

9

Накладные расходы

98 552

10

Стоимость

176 152

11

Прибыль

52 845

12

Оптовая цена предприятия

228 997

13

НДС

31 707

14

Договорная цена

260 704

Таблица 5.3. Структура договорной цены

5.3. Разработка бизнес-плана и составление календарного графика выполнения проекта

Бизнес-план - это программа предпринимательской деятельности. Бизнес план описывает предприятие, планируемую продукцию или услуги, рынок их реализации, финансовые потребности и планируемые финансовые результаты. Прежде чем вкладывать в проект деньги, необходимо провести его комплексную экспертизу, чтобы проверить его целесообразность и выполнимость, а также оценить его эффективность. Результатом такой экспертизы, и является документ, называемый бизнес планом, описывающий все аспекты задуманного проекта. Цель раздела - разработка рыночной стратегии предприятия. Каким образом можно достигнуть успеха на рынке. Анализируется деятельность предприятия и его конкурентов на рынке. Изучаются тенденции развития рынка и спрос на товар.

В следующей таблице, для сравнения, представлены стоимость и функциональность существующих решений и разрабатываемого проекта (стоимость приведена в расчёте на 100 обслуживаемых компьютеров).

Произво-дитель

Название Программы

Стоимость (руб.)

Функцио-

нальность

Быстро-дей-ствие

Famatech

Remote Administrator (Radmin)

29 500

3

5

DameWare Development

DameWare NT Utilities

8 100

4

3

NetControl

NetControl

11 000

3

4

Данный проект

rCon

5 500

3

4

Таблица 5.4. Стоимость и функциональность существующих программ и разрабатываемого проекта

Для наглядного отображения давайте посчитаем эффективность использования каждого программного продукта по формуле:

Ф = F * S / P

Где:

F – Функциональность;

S – Быстродействие;

P – Стоимость.

Рис.5.1. Эффективность использования каждого программного обеспечения

Небольшой круг исполнителей и простая взаимосвязь выполняемых ими работ позволяют нам использовать ленточный график.

Перед построением графика следует определить:

  •  перечень основных работ;
  •  исполнители работ;
  •  трудоемкость работ;
  •  длительность цикла по каждому виду работ и возможная степень их совмещения (параллельности).

Номер работы

Наименование работы

Трудоемкость, чел. дн.

1

Технико-экономическое обоснование разработки программы

5

2

Выбор языков программирования

4

3

Согласование и утверждение технического задания

6

4

Предварительная разработка структуры входных и выходных данных

12

5

Уточнение методов решения задачи

5

6

Разработка общего описания алгоритма решения задачи

12

7

Определение формы представления входных и выходных данных

4

8

Разработка структуры программы

7

9

Утверждение технического проекта

6

10

Программирование и отладка программы

35

11

Испытание программы

18

12

Корректировка программы по результатам испытаний

7

ИТОГО

121

Таблица 5.5. Перечень основных работ и их длительность

Рис.5.2. График работ

5.4. Технико-экономическое обоснование целесообразности проекта

    

Экономия от эксплуатации системы определяется путем сокращения количества потребляемой электроэнергии за счет сокращения времени «холостой» работы парка контролируемых ПЭВМ. Используя режим таймера, реализуется возможность контролирования их состояний т.е. выключение или перевод в режим пониженного энергопотребления.          Применяя модуль слежения за состоянием контролируемых ПЭВМ, реализуется возможность определения режимов повышенного энергопотребления как следствие программных ошибок или не корректных действий пользователя. Так же имеется возможность наблюдения за состоянием оборудования ПЭВМ. При слежении за данными параметрами определяется возможная необходимость в проведении профилактических работ или своевременной замене комплектующих, во избежание выхода их из строя и простоя рабочего места.

За счёт коммуникационных возможностей программного комплекса уменьшается время реагирования обслуживающего персонала на возникающие проблемы с ПЭВМ, а так же возможность дистанционного решения большей части программных ошибок.

Экономию по времени считаем как сокращение времени простоя рабочих мест в результате своевременного проведения профилактических и ремонтных работ.

Эксплуатационные затраты снижаются за счёт снижения энергопотребления, сокращения затрат на техническое обслуживание и уменьшения затрат на содержание обслуживающего персонала.

Следя за показателями в течение полугода, были получены примерно следующие результаты:

  •  Сокращение затрат на техническое обслуживание – 10 %
  •  Сокращение затрат на электроэнергию – 20 %
  •  Сокращение затрат на содержание обслужающего персонала – 20 %

В результате проведенного анализа установлено, что внедрение программного обеспечения для дистанционного управления компьютерами, включенными в локальную сеть, для компании оправдано и экономически целесообразно.

Заключение

В дипломном проекте разработан программный комплекс, для дистанционного управления компьютерами, включенными в локальную сеть для российского телекоммуникационного холдинга ЗАО «АКАДО-Столица». Он разрабатывался как альтернатива существующим решениям, путем объединения требуемого функционала и добавления собственных решений. Применение данного программного обеспечения позволяет решать актуальные задачи автоматизации сетевого администрирования в компании, с разветвленной сетью офисов, дает возможность оперативно решать большинство проблем, замедляющих или даже останавливающих ритм работы предприятия. Позволяет сетевому администратору быстро получать список существующих проблем и неисправностей для их немедленного устранения. В связи с чем снижаются затраты на обслуживание компьютеров, своевременно проводятся профилактические работы, уменьшается расход электроэнергии (за счет функции таймера). Данная компания имеет несколько офисов с  десятком рабочих станций, и держать в каждом технического специалиста было бы слишком накладно, но благодаря существующему  программному комплексу вопрос об  эффективном контроле и обслуживании решен.  

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


Список использованной литературы

  1.  Архангельский А. Я., «Программирование в C++ Builder 5», Москва, 2000г.;
  2.  В. Г. Олифер, Н.А. Олифер, «Компьютерный сети» (3-е издание), Питер, СПб, 2006 г.
  3.  Зубков С. В. «Assembler для DOS, Windows, UNIX», Москва, 2004 г.;
  4.  А. Побегайло, «Системное программирование в Windows», Санкт-Петербург, 2006 г.;
  5.  Юджин Олафсер, Кенн Скрайбнер, Дэвид Уайт; «Visual C++ 6», Москва, 2004 г.;
  6.  Джеффри Рихтер, «Windows для профессионалов», Москва, 2004 г.;
  7.  Дэвид Соломон, «Внутреннее устройство Microsoft Windows 2000»,Москва, 2004 г.;
  8.  Feng Yuan. «Windows Graphics Programming Win32 GDI and DirectDraw», 2003 г.;
  9.  Шураков В. В. «Надежность программного обеспечения систем обработки данных», М., Финансы и статистика, 1987 г.;
  10.  «Охрана труда на предприятиях», Москва, ГосНИИ ГА, 1995 г.;
  11.  «Руководство администратора безопасности системы “Secret Net NT”»,  Информзащита, Москва, 2004 г.;
  12.   Кент Рейсдорф. Borland C++ Builder 3. Москва 1999 г.;
  13.   Д. Иртегов, «Введение в операционные системы», Санкт-Петербург, 2002 г.;
  14.   В.Г. Олифер, Н.А. Олифер, «Сетевые операционные системы», Питер, СПб, 2005г.
  15.  «Выполнение организационно-экономической части дипломного проекта», Методические указания, МИРЭА, Москва, 2007 г.;
  16.   «Экологичность и безопасность проекта», Методические указания, МИРЭА, Москва, 2009г.;

Приложение

rCon

MainForm.cpp

int in_ether(char *bufp, unsigned char *addr)

{

char c, *orig;

int i;          // определение переменной

unsigned char *ptr = addr;

unsigned val;

i = 0;

orig = bufp;

while((*bufp != '\0') && (i < 6))

{

val = 0;

c = *bufp++;

if(isdigit(c))

val = c - '0';

else if(c >= 'a' && c <= 'f')

val = c - 'a' + 10;

else if(c >= 'A' && c <= 'F')

val = c - 'A' + 10;

else

return (-1);

val <<= 4;

c = *bufp;

if(isdigit(c))

val |= c - '0';

else if(c >= 'a' && c <= 'f')

val |= c - 'a' + 10;

else if(c >= 'A' && c <= 'F')

val |= c - 'A' + 10;

else if(c == ':' || c == 0)

val >>= 4;

else

return (-1);

if(c != 0)

bufp++;

*ptr++ = (unsigned char)(val & 0377);

i++;

// Убираем разделители

if(*bufp == ':' || *bufp == '-')

bufp++;

}

// Должны были обработать 17 символов

if(bufp - orig != 17)

return (-1);

return 0;

}

//---------------------------------------------------------------------------

void __fastcall TMForm::CompPopMenuWolClick(TObject *Sender)

{

unsigned long bcast = 0xffffffff;

unsigned int port = 60000;

int i, j;

int packet;

struct sockaddr_in sap;

unsigned char ethaddr[8];

unsigned char *ptr;

unsigned char buf [128];  //

unsigned long bc;

char mask[32];

char *tmp;

int err;

int optval = 1;

TListItem *pItem;

bc = bcast;

if((packet = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)

{

ReportRichEdit->SelAttributes->Color = clRed;

ReportRichEdit->Lines->Add("\"socket\" Error");

return;

}

if(setsockopt(packet, SOL_SOCKET, SO_BROADCAST, (char*)&optval, sizeof(optval)) < 0)

{

fprintf(stderr, "\r%s: setsocket failed %s\n", "wol.exe", strerror(errno));

closesocket(packet);

return;

}

sap.sin_family = AF_INET;

sap.sin_addr.s_addr = bc;                 

sap.sin_port = htons(port);

for(int iki = 0; iki < CompListView->Items->Count; iki++)

{

if(!CompListView->Items->Item[iki]->Selected)

continue;

pItem = CompListView->Items->Item[iki];

if(in_ether(pItem->SubItems->Strings[1].c_str(), ethaddr) < 0)

{

ReportRichEdit->SelAttributes->Color = clRed;

// адрес аппаратных средств недействителен

ReportRichEdit->Lines->Add("invalid hardware address");

return;

}

ptr = buf;

for(i = 0; i < 6; i++)

*ptr++ = 0xff;

for(j = 0; j < 16; j++)

for(i = 0; i < 6; i++)

*ptr++ = ethaddr [i];

if(sendto(packet, (char *)buf, 102, 0, (struct sockaddr *)&sap, sizeof (sap)) < 0)

{

ReportRichEdit->SelAttributes->Color = clRed;

ReportRichEdit->Lines->Add("sendto failed");

//закрытие сокета после работы

closesocket(packet);

return;

}

}

closesocket(packet);

return;

}

ftransfer.cpp

bool TFExplForm::UploadFile(TCHAR *file)

{

struct sockaddr_in server;

SOCKET     conn_socket;

int        retval;

HANDLE    hFile;

TCHAR    finename[MAXPATH];

DWORD    readLen;

if(*remotePath == NULL)

return false;

server.sin_family      = AF_INET;

server.sin_addr.s_addr = inet_addr(remoteIP);

server.sin_port        = htons(1700);

conn_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if(conn_socket == INVALID_SOCKET)

{

RStatusBar->SimpleText = "socket() failed";

return false;

}

// соединение с сервером

if(connect(conn_socket, (struct sockaddr*)&server, sizeof(server)) == SOCKET_ERROR)

{

//соединение с файлом

RStatusBar->SimpleText = "connect() failed";

return false;

}

lstrcpy(message, remotePath);

lstrcat(message, "\\");

lstrcat(message, file);

lstrcpy(finename, localPath);

lstrcat(finename, "\\");

lstrcat(finename, file);

dataPacket->type = pt_PUTFILE;

dataPacket->retVal = 0;

dataPacket->mesLen = lstrlen(message) + 1;

retval = send(conn_socket, messageBuf, sizeof(NetDataPacket) + dataPacket->mesLen, 0);

if(retval == SOCKET_ERROR)

{

RStatusBar->SimpleText = "send() #1 failed";

return false;

}

retval = recv(conn_socket, messageBuf, sizeof(NetDataPacket), 0);

if(retval == SOCKET_ERROR)

{

RStatusBar->SimpleText = "recv() failed";

// закрытие сокета

closesocket(conn_socket);

return false;

}

if(retval == 0)

{

RStatusBar->SimpleText = "Server closed connection";

closesocket(conn_socket);

return false;

}

//отправка и прием данных

if(dataPacket->mesLen > 0)

{

retval = recv(conn_socket, message, dataPacket->mesLen, 0);

if(retval == SOCKET_ERROR)

{

RStatusBar->SimpleText = "recv() failed";

closesocket(conn_socket);

return false;

}

if(retval == 0)

{

//нет соединения с сервером

RStatusBar->SimpleText = "Server closed connection";

closesocket(conn_socket);

return false;

}

}

if(dataPacket->type == pt_ERRORMES)

{

//отправка и прием данных

MessageBox(this->Handle, message, "rCon", MB_OK | MB_ICONSTOP);

}

else

{

if(dataPacket->retVal == 0)

{

hFile = CreateFile( finename, GENERIC_READ, NULL, NULL,

OPEN_EXISTING, NULL, NULL);

if(hFile != INVALID_HANDLE_VALUE)

{

while(1)

{

retval = ReadFile(hFile, message, BUFSIZE - sizeof(NetDataPacket),

&readLen, NULL);

if(retval == 0)

retval = GetLastError();

if(readLen == 0)

break;

dataPacket->type = pt_PUTFILE;

dataPacket->retVal = 0;

dataPacket->mesLen = readLen;

//отправка данных

retval = send(conn_socket, messageBuf, sizeof(NetDataPacket) + dataPacket->mesLen, 0);

if(retval == SOCKET_ERROR)

{

CloseHandle(hFile);

RStatusBar->SimpleText = "send() #1 failed";

return false;

}

}

CloseHandle(hFile);

}

}

}

closesocket(conn_socket);

return true;

}

bool TFExplForm::UploadDir(TCHAR *dirName)

{

WIN32_FIND_DATA  FindFileData;

HANDLE     hFind;

if(NewDir(dirName) == false)

return false;

AddToDir(remotePath, dirName);

AddToDir(localPath,  dirName);

lstrcpy(FindFileData.cFileName, localPath);

lstrcat(FindFileData.cFileName, "\\*.*");

hFind = FindFirstFile(FindFileData.cFileName, &FindFileData);

if(hFind != INVALID_HANDLE_VALUE)

{

do

{

// найти данные файла

if(checkDots(&FindFileData))

continue;

// найти признак файла

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

UploadDir(FindFileData.cFileName);

else

UploadFile(FindFileData.cFileName);

}  while(FindNextFile(hFind, &FindFileData));

FindClose(hFind);

}

StripLastDir(remotePath);

StripLastDir(localPath);

return true;

}

lCon

serv.cpp

VOID ServiceStart(DWORD dwArgc, LPTSTR *lpszArgv)

{

PSECURITY_DESCRIPTOR    pSD;

struct sockaddr_in  service, SenderAddr;

WSADATA   wsaData;

WSAOVERLAPPED Overlapped;

WSABUF   DataBuf;

SOCKET   ServSocket;

DWORD       Flags, dwBytesRW, dwWait, dwSize, dwType;

HANDLE      hEvents[2];

BOOL   fSuccess;

int    SenderAddrSize;

// Инициализация переменных

pSD  = NULL;

hHookThread = NULL;

ServSocket = INVALID_SOCKET;

DataBuf.buf = new char[200];

DataBuf.len = 200;

service.sin_family  = AF_INET;

service.sin_addr.s_addr = htonl(INADDR_ANY);

service.sin_port   = htons(3842);

F = fopen("serv.log", "a");

LogAction(F, "----------Server START----------");

if(WSAStartup(0x202, &wsaData))

{

LogLastError(F, "WSAStartup");

goto cleanup;

}

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\rCon", NULL, KEY_READ, &hKey))

{

LogLastError(F, "RegOpenKeyEx");

goto cleanup;

}

dwSize = 128;

if(RegQueryValueEx(hKey, "sip", NULL, &dwType, (unsigned char*)&master_ip, &dwSize))

{

LogLastError(F, "RegOpenKeyEx");

goto cleanup;

}

RegCloseKey(hKey);

// ожидайте соединения с сервером

if(!ReportStatusToSCMgr(SERVICE_START_PENDING, NO_ERROR,       

3000))                 

goto cleanup;

// функция, контролирующая сигналы

hServerStopEvent = CreateEvent( NULL,    // нет атрибутов

TRUE

FALSE,   // нет сигнала

NULL);   // нет имени

if(hServerStopEvent == NULL)

goto cleanup;

hEvents[1] = hServerStopEvent;

// сообщите, что статусом обслуживания управляет администратор

if(!ReportStatusToSCMgr(SERVICE_START_PENDING, // service state

NO_ERROR,            // код завершения  

3000))                      //ждите подсказки

goto cleanup;

if(!ReportStatusToSCMgr(SERVICE_START_PENDING, // service state

NO_ERROR,              // код завершения

3000))                        // ждите подсказки

//очистка

goto cleanup;

// создайте описатель безопасности, который позволяет любому написать что-либо

pSD = (PSECURITY_DESCRIPTOR)malloc(SECURITY_DESCRIPTOR_MIN_LENGTH);

if(pSD == NULL)

goto cleanup;

if(!InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION))

goto cleanup;

if(!SetSecurityDescriptorDacl(pSD, TRUE, (PACL) NULL, FALSE))

goto cleanup;

if(!ReportStatusToSCMgr(SERVICE_RUNNING,       

NO_ERROR,              // код завершения

0))                              // ждите подсказки

goto cleanup;

// Событие сокета

hEvents[0] = (HANDLE)WSACreateEvent();

// Создаем сокет

ServSocket = WSASocket(AF_INET, SOCK_DGRAM, IPPROTO_UDP, NULL, 0, WSA_FLAG_OVERLAPPED);

if(ServSocket == INVALID_SOCKET)

{

LogLastError(F, "WSASocket");

goto cleanup;

}

if(WSAEventSelect(ServSocket, (WSAEVENT)hEvents[0], FD_READ))

{

LogLastError(F, "WSAEventSelect");

goto cleanup;

}

if(bind(ServSocket, (SOCKADDR*)&service, sizeof(service)))

{

LogLastError(F, "bind");

goto cleanup;

}

// Поток для перехвата сообщений

hHookThread = CreateThread(NULL, 0, RecvMsgThread, NULL, 0, &IDHookThread);

if(hHookThread == NULL)

LogLastError(F, "CreateThread");

// Создание канала (PIPE) для общения с модулями

CreateServPipeThread();

// Посылаем сообщение о старте

SendCommand(CMD_START_SERV);

while(1)

{

dwBytesRW = 0;

Flags   = 0;

ZeroMemory(&Overlapped, sizeof(WSAOVERLAPPED));

Overlapped.hEvent = (WSAEVENT)hEvents[0];

ResetEvent(hEvents[0]);

SenderAddrSize = sizeof(SenderAddr);

ZeroMemory(&SenderAddr, sizeof(SenderAddrSize));

fSuccess = WSARecvFrom(ServSocket, &DataBuf, 1, &dwBytesRW, &Flags,

(SOCKADDR*)&SenderAddr, &SenderAddrSize, &Overlapped, NULL);

if(fSuccess)

{

if(GetLastError() == ERROR_IO_PENDING)

{

dwWait = WaitForMultipleObjects(2, hEvents, FALSE, INFINITE);

if(dwWait != WAIT_OBJECT_0)

{

if(dwWait != (WAIT_OBJECT_0 + 1))

//ошибка файла регистрации

LogLastError(F, "WaitForMultipleObjects");

goto cleanup;

}

WSAResetEvent((WSAEVENT)hEvents[0]);

// получение результата

fSuccess = WSAGetOverlappedResult(ServSocket, &Overlapped, &dwBytesRW, FALSE, &Flags);

if(!fSuccess || (dwBytesRW == 0))

{

// ошибка в регистрации файла

LogLastError(F, "WSAGetOverlappedResult");

goto cleanup;

}

}

else

{

LogLastError(F, "WSARecvFrom");

goto cleanup;

}

}

else

LogLastError(F, "WSARecvFrom_1");

if(_strnicmp(DataBuf.buf, CHECK_TEMPLATE, 3))

continue;

if(ExecCommand(&DataBuf))

break;

}

cleanup:

// отправьте команду (остановка драйвера оперативной системы)

SendCommand(CMD_STOP_SERV);

//закройте канал связи

CloseServPipeThread();

if(ServSocket != INVALID_SOCKET)

closesocket(ServSocket);

WSACleanup();

if(hHookThread)

{

if(!PostThreadMessage(IDHookThread, WM_QUIT, 0, 0))

LogLastError(F, "PostThreadMessage WM_QUIT");

WaitForSingleObject(hHookThread, INFINITE);

CloseHandle(hHookThread);

}

if(hEvents[0])   CloseHandle(hEvents[0]);

if(hEvents[1])   CloseHandle(hEvents[1]);

if(hServerStopEvent) CloseHandle(hServerStopEvent);

delete[] DataBuf.buf;

LogAction(F, "----------Server STOP-----------");

fclose(F);

if(pSD)

free(pSD);

}

pjhost.cpp

#define _WIN32_WINNT 0x0500

#define __DLL__

#include <windows.h>

#include <stdio.h>

#include <time.h>

#include "pjhost.h"

//--------------------------------------------------------------------

#define N 2

#pragma data_seg(".shardata")

HHOOK GlobKbHook[N] = { NULL };        //обработчик прерываний

HHOOK GlobMsHook[N] = { NULL };

#pragma data_seg()

#pragma comment(linker, "/SECTION:.shardata,RWS")

//--------------------------------------------------------------------

void LogLastError(DWORD, char *);

char DesktopNames[N][15] = { "Winlogon", "Default" };

HINSTANCE hInstance;

int NumHooks;

//--------------------------------------------------------------------

// функция входа в dll

BOOL WINAPI DllMain(HINSTANCE hInst, DWORD reason, LPVOID lpReserved)                  

{

int i;

switch(reason)

{

//присоединение к dll

case DLL_PROCESS_ATTACH:

hInstance = hInst;

NumHooks = 0;

for(i = 0; i < N; i++)

GlobKbHook[i] = GlobMsHook[i] = NULL;

break;

case DLL_THREAD_ATTACH:

case DLL_THREAD_DETACH:

break;

case DLL_PROCESS_DETACH:

HookControl(HOOK_KB_MS, FALSE);

break;

}

return TRUE;

}

//--------------------------------------------------------------------

LRESULT CALLBACK HookLL(int nCode, WPARAM wp, LPARAM lp)

{

if(nCode == HC_ACTION)

return 1;

return 0;

}

//--------------------------------------------------------------------

DLLFUNC int HookControl(int WhatHook, BOOL Hook)

{

HWINSTA hwinstaSave, hwinstaUser;

HDESK  hdeskSave,  hdeskUser;

int i;

if((NumHooks < 1) && (Hook == FALSE))

return 1;

if((NumHooks > N) && (Hook == TRUE))

return 1;

hwinstaSave = GetProcessWindowStation();

hdeskSave = GetThreadDesktop(GetCurrentThreadId());

hwinstaUser = OpenWindowStation("WinSta0", FALSE, MAXIMUM_ALLOWED);

if(!hwinstaUser)

return 1;

// пользователь в процессе набора

SetProcessWindowStation(hwinstaUser);

for(i = 0; i < N; i++)

{

hdeskUser = OpenDesktop(DesktopNames[i], 0, FALSE, MAXIMUM_ALLOWED);

if(!hdeskUser)

{

SetProcessWindowStation(hwinstaSave);

// закрытие окна пользователя

CloseWindowStation(hwinstaUser);

return 1;

}

SetThreadDesktop(hdeskUser);

// Клавиатура

if(WhatHook == HOOK_KEYBOARD || WhatHook == HOOK_KB_MS)

{

if(Hook && !GlobKbHook[i])

{

// функция, позволяющая установить ловушку

GlobKbHook[i] = SetWindowsHookEx(WH_KEYBOARD_LL, HookLL, hInstance, 0);    

NumHooks++;

}

else if(!Hook && GlobKbHook[i])

{

// функция, позволяющая снять ловушку

if(!UnhookWindowsHookEx(GlobKbHook[i]))

return 1;         

NumHooks--;

GlobKbHook[i] = NULL;

}

}

if(WhatHook == HOOK_MOUSE || WhatHook == HOOK_KB_MS)   // Мышь

{

if(Hook && !GlobMsHook[i])

{

GlobMsHook[i] = SetWindowsHookEx(WH_MOUSE_LL, HookLL, hInstance, 0);

NumHooks++;

}

else if(!Hook && GlobMsHook[i])

{

// функция позволяющая снять ловушку

if(!UnhookWindowsHookEx(GlobMsHook[i]))   return 1;

NumHooks--;

GlobMsHook[i] = NULL;

}

}

}

// сохранение набора потока

SetThreadDesktop(hdeskSave);

// сохранение процесса набора

SetProcessWindowStation(hwinstaSave);

//выключение компьютера пользователя

CloseDesktop(hdeskUser);

CloseWindowStation(hwinstaUser);

return 0;

}


 

А также другие работы, которые могут Вас заинтересовать

66102. МАТЕРИАЛЬНО-ПРАВОВЫЕ ПРИЗНАКИ ИНСТИТУТА ЛИЦЕНЗИРОВАНИЯ 81 KB
  Современный институт лицензирования представлен комплексом материальных и процессуальных норм определяющих режим процедуру и саму реализацию лицензирования в России. К группе системообразующих институт лицензирования материально-правовых правовых норм...
66103. НЕКОТОРЫЕ ВОПРОСЫ УСОВЕРШЕНСТВОВАНИЯ ПОРЯДКА ВОЗМЕЩЕНИЯ УЩЕРБА, ПРИЧИНЕННОГО ВОЕННОСЛУЖАЩИМИ (ПО ЗАКОНОДАТЕЛЬСТВУ УКРАИНЫ) 104 KB
  Важное место в системе правовых норм, регулирующих отношения материальной ответственности за вред, причиненный государству, занимают те, которые определяют порядок его возмещения. Правовое регулирование этих отношений требует повышенного внимания законодателя...
66104. РЕАЛИЗМ ИЛИ ИДЕАЛИЗМ: ЧТО ЛУЧШЕ ОБЪЯСНЯЕТ СОВРЕМЕННЫЕ МЕЖДУНАРОДНЫЕ ОТНОШЕНИЯ? 92.5 KB
  Более того даже вопрос о том кого считать акторами международных отношений тоже остается без ответа. Однако любая теория необходима и достойна анализа и изучения уже хотя бы потому что дает возможность более или менее точно понять причинно-следственную связь между событиями в данном случае...
66105. ПРАВОВОЕ РЕГУЛИРОВАНИЕ МЕСТНОГО САМОУПРАВЛЕНИЯ НА ТЕРРИТОРИИ ГОРОДА МОСКВЫ 125 KB
  Конституция Российской Федерации, законодательный акт высшей юридической силы, имеющий прямое действие и применяемый на всей территории страны (ст. 15), формирует правовую основу легитимной деятельности местных сообществ, которая осуществляется путем прямого волеизъявления...
66106. ПРАВОВОЕ РЕГУЛИРОВАНИЕ ИНФОРМАЦИОННОГО ОБМЕНА В СФЕРЕ КОМПЬЮТЕРНОЙ СЕТИ 180 KB
  Интернет-ресурс полноценное средство массовой информации следовательно необходимо решать вопросы налогообложения и контроля над соблюдением законодательства о СМИ. В Америке взят курс на строительство информационной супер-магистрали как технологического средства позволяющего...
66107. МЕСТО ФИНАНСОВОГО ПРАВА В СИСТЕМЕ РОССИЙСКОГО ПРАВА 102.5 KB
  Экономические реформы 1990-х годов привели к серьезным структурным изменениям в финансовой системе государства что предполагает пересмотр системы финансового права и выработку новых подходов к предмету...
66108. НЕНАЛОГОВЫЕ ДОХОДЫ СУБЪЕКТОВ РФ, НЕ СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИХ ГОСУДАРСТВЕННОЙ СОБСТВЕННОСТИ 77.5 KB
  При этом мы не будем говорить о доходах от использования государственной собственности субъектов РФ. Важную роль среди всех неналоговых доходов играют доходы от государственной собственности. Со временем его значение в структуре государственных доходов снизилось...
66109. ОСОБЕННОСТИ СОДЕРЖАНИЯ И ФОРМЫ ИНДИВИДУАЛЬНОЙ ЖАЛОБЫ В ЕВРОПЕЙСКИЙ СУД ПО ПРАВАМ ЧЕЛОВЕКА 181 KB
  Вряд ли можно найти более значимую и вместе с тем сложную проблему нежели проблема защиты прав и свобод человека и гражданина. В настоящее время граждане Российской Федерации часто обращаются в международные судебные правозащитные органы подавая жалобы на нарушения...
66110. ПОНЯТИЕ, ЦЕЛИ И ПРИНЦИПЫ ФЕДЕРАЛЬНОГО ВМЕШАТЕЛЬСТВА 154.5 KB
  Когда власти некоторых субъектов Федерации игнорируют ее требования и законные интересы она Федерация вынуждена прибегать к использованию принудительных мер обеспечения государственного экономического и правового единства страны то есть к мерам федерального вмешательства.