Приложение SuperSCP
октября 12 2009 by admin in СлужбыПриложение SuperSCP («04 SuperSCP.exe») — это программа управления службами, делающая со службами практически все, что только можно пожелать. Файлы с исходным кодом и ресурсами этого приложения находятся в каталоге 04-SuperSCP на прилагаемом к книге диске. При запуске программы появится окно.
Во время инициализации приложение запрашивает имя локального компьютера и помещает его в поле Machine. Затем оно подключается к SCM этого компьютера, перебирает установленные на нем службы и помещает их внутренние имена в список Internal Name. В любое время вы также можете заняться администрированием служб удаленного компьютера. Для этого нужно ввести его название в поле Machine и щелкнуть кнопку Refresh.
При выборе службы из списка Internal Name все оставшиеся его записи обновляются. Выбрав службу, вы можете изменить любые ее параметры и, чтобы они вступили в силу, щелкнуть кнопку Reconfigure. Щелкнув кнопку Security, вы сможете изменить защиту выбранной службы. Кроме того, вы можете пометить службу для удаления из базы данных SCM, щелкнув кнопку Remove. Если вы собираетесь выполнить несколько операций, связанных с SCM, вы можете заблокировать его, щелкнув кнопку Lock SCM.
Чтобы добавить в БД SCM новую службу, просто укажите в поле Internal Name ее внутреннее имя. Если оно не совпадает с уже находящимися в списке названиями, SuperSCP будет считать, что поле описывает новую службу, которую нужно добавить в БД SCM. Введя имя новой службы, вы можете настроить ее как вам угодно. Указать исполняемый файл службы поможет кнопка Browse. Кстати, если вы перетащите этот файл из его папки в окно SuperSCP, то в поле Pathname появится путь к нему. После настройки службы щелкните кнопку Create, и новая служба будет добавлена в БД SCM.
В нижней части окна — секция управления исполнением службы, позволяющая контролировать выполнение служб. Названия кнопок этой секции говорят сами за себя. Справа — список, новые записи в котором появляются каждую секунду. Эти записи содержат свой номер и текущее состояние службы: Stopped, Start Pending, Stop Pending, Running, Continue Pending, Pause Pending или Paused. Помимо состояния, отображаются последняя контрольная точка и время ожидания для данной службы. Последние два поля, WErr и SErr, содержат переданные службой коды ошибок Windows и самой службы.
Код программы несложен. Просто надо вызывать нужные функции в нужное время. Однако несколько повторно используемых классов намного упрощают разработку такого приложения. Два основных класса — CSMCtrl и CSer-viceCtrl/Класс CSMCtrl — «тонкая» оболочка для функций, напрямую взаимодействующих с SCM. Он содержит такие методы, как Open, LockDatabase, Query-LockOwner, GetlnternalName и GetDisplayName. Кроме того, в нем имеются методы для создания списка служб SCM и их перебора. Этот класс C++ действительно полезен, так как самостоятельно обрабатывает все проблемы, связанные с управлением памятью.
Класс CServiceStrl является «тонкой» оболочкой функций, непосредственно взаимодействующих со службой. Он содержит такие методы, как InstallAnd-Ореп, Open, Delete, Start, Control, WaitForState, QueryStatus, QueryConfig, Query-Description, ChangeConfig, QueryFailureActions, ChangeFailureActions и EditSecurity. Также в него входят методы для создания списков зависимостей между службами. Как и предыдущий класс, CServiceCtrl очень полезен, так как самостоятельно решает многие задачи, связанные с управлением памятью.