Трепанация для почтовой мыши Фленов Михаил Xakep, номер #066, стр. 066-108-1 (www.vr-online.ru) Пишем сервис, сканирующий адресную книгу The Bat! Почему The Bat! считается самым безопасным почтовым клиентом? Дело в том, что он не поддерживает всякие VB скрипты, а формат его адресной книги засекречен. Если в Outlook любой вирус может получить доступ к адресбуку и разослать себя твоим друзьям, то в The Bat! это нереально. Вернее, кажется нереальным. Мы как IBM-совместимые люди вполне можем написать сервис, который вытащит все e-mail’ы и аккуратненько сложит их в txt-файл. Надрез Начнем с создания сервиса как такового. Есть два способа. Можно, конечно, слегка порукоблудить и написать его с помощью WinAPI, но зачем выдумывать пистолет, когда есть пулемет? Поэтому мы воспользуемся готовым классом TService от великой корпорации Borland. Теперь запускаем Delphi и сразу закрываем созданный по умолчанию проект. Теперь выбирай File/New/Other (Для Delphi меньше 7 версии просто File/New) и в появившемся окне на закладке New ищи Service Application (см. рис.1). Кликай на нем. Можно считать, что первый надрез на теле почтовой мышки уже сделан ;). Исследуем содержимое Код главного модуля похож на все те, с которыми ты уже привык работать. Но изюминка спрятана под печенью (под печенью обычно прячется гонококковый перигепатит :) - прим. Dr), а именно - в объекте, от которого все происходит. Если стандартное приложение происходит от объекта TForm, то тут мы пляшем мазурку от TService. Визуальная форма больше похожа на модуль данных (Data Module), и на ней можно размещать только невизуальные компоненты. Это и понятно, ведь сервис работает невидимо для пользователя. А теперь давай посмотрим на самые вкусные свойства объекта TService, которые ты можешь увидеть в объектном инспекторе. Паровоз летит вперед AllowPause – разрешить пользователю возможность приостанавливать работу сервиса. Я злой, поэтому в своем недобром сервисе отключаю эту возможность. AllowStop – позволять пользователю останавливать сервис. И снова моя злость заставляет убрать эту возможность. Если запретить возможность остановки и приостановки сервиса, то в оснастке служб соответствующие кнопки будут недоступны, и на первый взгляд оставить такое зло нереально. Но не радуйся прежде времени, потому что для продвинутого удалить даже такой сервис не составит труда. Достаточно выполнить запускной файл сервиса с параметром «/UNINSTALL», как все наше хозяйство остановится и при следующем старте системы удалится. От этого никуда не денешься, поэтому косметическая операция по запрету останова подействует только на ламера. Штрихи невидимости DisplayName – отображаемое имя. Именно этот текст можно будет увидеть в оснастке сервисов в качестве имени. Для примера я указал «Сервис на Delphi», но в реальном зле я бы посоветовал подойти к выбору имени более тщательно. Как корабль назовешь, так он и потонет :). Например, можно написать здесь «Служба безопасности NTFS», тогда ни у одного пользователя не поднимется рука остановить такое. Но и запускной файл в этом случае должен иметь достойное имя, а не просто Project1.exe ;). |