![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Romero |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Имеется программа, умеющая сидеть в трее и выводить окно, когда нужно. По определенному событию она запускает exe-шник или cmd-шник, которому нужен доступ к запрещенным для пользователя папкам на NTFS-разделе.
Соответственно, хотелось бы запускать программу с правами системы или админа. Кроме того нужно обеспечить надежность в плане постоянного контроля, запущена ли прога. Если каким-либо образом запустить exe от имени администратора, то пользователю проблематично будет убить процесс, но нет страховки от какой-нибудь ошибки, закрывающей программу. Можно написать сервис, который потом и запускает нужный exe-шник, и время от времени контролирует его присутствие. Например, как у большинства антивирусов и файерволов, запускается служба, которая далее подгружает все его компоненты. Есть варианты? Кто сталкивался с подобным, напишите, как решили. Если остановиться на варианте с сервисом (а он мне больше нравится), то хотелось бы уяснить схему действия. Правильно ли я понимаю: 1) служба - программа, имеющая специальные функции взаимодействия с менеджером служб; 2) при помощи этих функций она регистрируется, запускается и управляется из менеджера; 3) службу нельзя остановить с правами простого юзера; 4) если служба породит процесс, то он получит ее права (по-умолчанию - системные) и сможет оперировать с папками раздела NTFS, на которые есть права у SYSTEM; 5) моя служба должна при первом запуске вызвать функцию, регистрирующую ее, а затем автоматом будет подгружаться системой из той же папки и стартовать при помощи функции запуска. |
|||
|
||||
Marlin |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 20.2.2006 Репутация: 1 Всего: 1 |
Есть команда в винде RUNAS, которая может запустить программу с правами администратора, если ты укажешь пароль. Далее
А потом нужно организовать контроль за программой контроля, которая контролирует программу - чушь Пиши одну программу, и запиши ее в реестр как службу и все. Конечно она может закрыться, как ты говоришь, но это зависти от того как ты будешь ее писать, если ее занести в реестр правильно то по-моему пользователь даже в диспечере задач ее не увидит. Я не помню точно, давно код тестил. А программу лучше напиши в DLL, пусть весит в памяти.
Если интересно, что это за ключи в реестре почитай Windows Это сообщение отредактировал(а) Marlin - 24.2.2006, 08:28 --------------------
Программист решает проблемы, о которых пользователь даже не задумывается,способами, о котороых он даже не подозревает. |
||||||
|
|||||||
Romero |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
RunAs не подходит, так как в 2000 винде нельзя запомнить пароль, введенный однажды. А каждый раз его вводить - не дело.
Саму службу, насколько я понимаю, не нужно контролировать - на то и менеджер служб. Она сама по себе не вылетит. Тот способ, что ты мне написал, позволит запустить любую прогу как сервис? Что-то сомнительно... Зачем тогда столь сложные механизмы создания сервисов на Дельфях описываются в инете и в DRKB? Можно ссылку на источник сего чудесного способа? |
|||
|
||||
Marlin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 20.2.2006 Репутация: 1 Всего: 1 |
Это что-то вроде облегченного варианта! А что тебе мешает, чтобы dll вела контроль за всем? Например с помощью таймеров и различных проверок осуществляет запуск твоей программы. Опять же через RunAs а пароли можешь, складывать куда-нибудь и шифровать, а когда необходимо считывать А если RunAs не подходит, ищи в инете статьи по получению прав админа. --------------------
Программист решает проблемы, о которых пользователь даже не задумывается,способами, о котороых он даже не подозревает. |
|||
|
||||
Romero |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Думаю, проще использовать механизмы, описанные здесь:
=htp://www.delphiworld.narod.ru/base/services_work.html или здесь: =http://www.delphiworld.narod.ru/base/create_services_api.html Скажите мне только, правильно ли я понимаю схему действия. |
|||
|
||||
Marlin |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 20.2.2006 Репутация: 1 Всего: 1 |
Ну принципе там все доступно излагается, и пункты, которые ты описал тоже верны, единственное, служба породит скорее поток, а не процесс.
--------------------
Программист решает проблемы, о которых пользователь даже не задумывается,способами, о котороых он даже не подозревает. |
|||
|
||||
Romero |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Вот такой код сделал (переписал какой-то примерчик из инета):
Вроде, работает. Только вот не знаю пока, насколько это решит проблему "самопроизвольной" выгрузки процесса (если служба запускается от имени системы в сеансе обычного пользователя). Буду тестировать. По крайней мере, решен вопрос запуска от имени системы! |
|||
|
||||
Romero |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Помогите, плиззз.
В вышеуказанном коде нужно сделать поправку, чтобы после инсталяции сервис стартовал сразу. Пробовал сделать в 185 строке if not (Install and SvcNotifyIsRunning) then ShowMsg(SysErrorMessage(GetLastError)); но получил ошибку о неверном дескрипторе. Что не так?
|
|||
|
||||
Romero |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 17.6.2005 Репутация: 1 Всего: 1 |
Сделал при помощи StartService
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |