eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Belg (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Оффтоп —› Winapi CreateService
Посл.ответ Сообщение

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 30 октября 2014 11:42 New!
Цитата · Личное сообщение · #1

предыстория мытарств чайника в поисках истины:

жила была Windows XP. замечательная система, но некий гражданин Билли Г. решил что в новом виндовсе начальника безопасности не хватает и ввел такую бяку (благословение) как UAC. и вот наш чайник установив свою программу на висте\семерке\восьмерке понял, что его шедевр работать не будет. он решил схитрить и добавил обязательно требование администраторских прав при запуске приложения. однако UAC его перехитрил и просто перестал запускать из автозапуска это приложение. наш чайник тогда придумал грабли - без прав администратора, но при клике мышкой на иконке программы в систем трее предлагает повысить права и перезапускает с администраторскими правами. однако наш чайник начал чуствовать, что мыши коляться, плачут но продолжают жрать кактус. и решил он им помочь.

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

однако он через какое-то время наткнулся на статьи о запуске своего приложения как сервисную службу. надежда затеплилась вновь! но увы... в описании http://msdn.microsoft.com/en-us/library/windows/desktop/ms682450(v=vs.85).aspx остался непонятным момент с использованием
lpServiceStartName [in, optional]
The name of the account under which the service should run. If the service type is SERVICE_WIN32_OWN_PROCESS, use an account name in the form DomainName\UserName. The service process will be logged on as this user. If the account belongs to the built-in domain, you can specify .\UserName.

откуда брать этот самый DomainName\UserName? и правильно ли что я его ищу, а проблема в чем: приложение при запуске находит путь до моих документов, оттуда читает какие-то конфигурационные файлы. например путь до папки "документс сеттингс\Администратор", однако если добавить службу с флагом NULL в команде CreateService - то само приложение запускается от LocalService чтоли... и соответственно путь до моих документов выглядит иначе - примерно "документс сеттингс\LocalService", а там моих документов как бы и нет... и соответственно приложение работать не хочет. посему правильно ли надеяться на этот самый параметр lpServiceStartName? то есть запустить приложение от имени пользователя, а не системы, чтобы определение пути до моих документов был верен.

и второй момент - вист, семерок и восьмерок под рукой пока нет, для ХР это винапи CreateService работает, а будет ли работать на этих системах, а то может там какойнибудь сертификат нужен дополнительный и только время зазря теряю?


Ранг: 1963.6 (!!!!)
Статус: Модератор
retired

Создано: 30 октября 2014 12:04 New!
Цитата · Личное сообщение · #2

Будет работать в новых ОС. А что непонятного в DomainName\UserName? Брать и прописывать имя домена и имя админа на компе, чтобы от них запускать. Как вариант-запускать от LocalSystem и имперсонироваться потом в админа.

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 30 октября 2014 12:37 New!
Цитата · Личное сообщение · #3

DomainName тоже самое что имя компьютера? с UserName вроде разобрался - GetUserName... в итоге вышло примерно так: "MAIN\Администратор"

а как теперь это значение указать в команде?
CreateService_(schSCManager, @ServiceName.s,@DisplayName.s, dwDesiredAccess,dwServiceType,dwStartType,dwErrorControl,@PathToServiceEXE.s,0,0,0,"MAIN\Администратор",0)
ругается. пишет неверные параметры. если вместо "MAIN\Администратор" указать 0 - работает. предположим имя и домейн я получил не верно, то можно проверить это указав кошерное имя типа NT AUTHORITY\LocalService или NT AUTHORITY\NetworkService - но и с ними пишет неверные параметры. это должна быть текстовая переменная или указатель? в описании этого я не понял...

Добавлено спустя -42 минут
так... еще момент - если у пользователя был пароль, то получается я не смогу создать службу? опять грабли...

Ранг: 345.8 (мудрец)
Статус: Участник

Создано: 30 октября 2014 13:48 New!
Цитата · Личное сообщение · #4

SeregaZ пишет:
однако UAC его перехитрил и просто перестал запускать из автозапуска

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

Ранг: 29.3 (посетитель)
Статус: Участник

Создано: 30 октября 2014 20:30 New!
Цитата · Личное сообщение · #5

на заметку взял, спасибо. но все-таки хотелось бы разобраться.

предварительно причина нашлась в совокупности параметров:
dwServiceType.l=#SERVICE_WIN32_OWN_PROCESS | #SERVICE_INTERACTIVE_PROCESS
If the service type specifies SERVICE_INTERACTIVE_PROCESS, the service must run in the LocalSystem account.

то есть получается когда сразу два параметра указаны - то можно запустить только под этим локалом. для DomainName\UserName получается можно использовать только один параметр #SERVICE_WIN32_OWN_PROCESS без второго.

в итоге служба в списке появляется, но стартануть не может. пишет
Ошибка 1069: Служба не запущена из-за ошибки входа в систему

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

все упирается в пароль для учетной записи? нет пароля - не даст запустить под DomainName\UserName?
 eXeL@B —› Оффтоп —› Winapi CreateService

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0


Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS