информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаВсе любят медSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
StartService: как передаются аргументы? 03.04.08 12:05   [Ustin]
Автор: Ustin <Ustin> Статус: Elderman
Отредактировано 03.04.08 12:20  Количество правок: 1
<"чистая" ссылка>
Вызывается StartService(sHndl,0,nil) для службы, которая отдаёт
lpServiceConfig^.lpBinaryPathName = "C:\proxyper.exe" -svcrun
Передаётся ли ей в этом случае параметр -svcrun?
MSDN говорит, что последний параметр - это Pointer to an array of pointers to null-terminated strings to be passed to a service as arguments, из чего невозможно сделать однозначный вывод о передаче аргументов из lpBinaryPathName.
Вопрос задавал в терминах и переменных примера к статье http://bugtraq.ru/forum/faq/programming/services.html, из статьи это тоже, к сожаленью, не следует
спасибо заранее
Аргументы передадутся службе как второй параметр в её функции ServiceMain() 05.04.08 15:07  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 05.04.08 15:11  Количество правок: 1
<"чистая" ссылка>
> Вызывается StartService(sHndl,0,nil) для службы, которая
> отдаёт
> lpServiceConfig^.lpBinaryPathName = "C:\proxyper.exe"
> -svcrun
Не понял... У StartService три параметра. Дескриптор на службу, количество аргументов, и строковый массив. Возвращает она успех или ошибку, что могла произойти. Т.е. я немного не понимаю, что она там «отдаёт» :)
Но вообще, если ошибок нет, и служба не запущена, то в конце концов SCM вызовет ServiceMain() запускаемой службы, где вторым параметром будет указатель на переданные ей в StartService() строки.

> Вопрос задавал в терминах и переменных примера к статье
> http://bugtraq.ru/forum/faq/programming/services.html, из
> статьи это тоже, к сожаленью, не следует
Там в примере простой службы ServiceMain переименована как MainServiceProc, аргументы службой не используются, но они есть, дабы стек не упал ;-)

> спасибо заранее
Удачи.
А, понял что имелось ввиду. К сожалению, ща сразу не могу ответить на этот вопрос... 05.04.08 15:24  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 05.04.08 15:27  Количество правок: 1
<"чистая" ссылка>
> > Вызывается StartService(sHndl,0,nil) для службы, которая
> > отдаёт
> > lpServiceConfig^.lpBinaryPathName = "C:\proxyper.exe" -svcrun
> Не понял... У StartService три параметра. Дескриптор на
> службу, количество аргументов, и строковый массив.
> Возвращает она успех или ошибку, что могла произойти. Т.е.
> я немного не понимаю, что она там «отдаёт» :)
Сорри, не выспался...
Я сейчас далеко от компов с дельфями, предлагаю самому проверить это дело экспериментально ;-)
Возможно, в этом случае, параметры будут передаваться в main() экзешника службы, но точно не могу сказать.
Не допираю, блин, тупо... 08.04.08 10:15  
Автор: Ustin <Ustin> Статус: Elderman
Отредактировано 08.04.08 10:38  Количество правок: 1
<"чистая" ссылка>
> > > Вызывается StartService(sHndl,0,nil) для службы,
> которая
> > > отдаёт
> > > lpServiceConfig^.lpBinaryPathName =
> "C:\proxyper.exe" -svcrun
> > Не понял... У StartService три параметра. Дескриптор
> на
> > службу, количество аргументов, и строковый массив.
Вот тут как раз и тупил, когда задавал вопрос, так как не сформировал этот самый строковый массив, а пытался накормить его строкой... Передать параметр не вышло (см ниже)

> > Возвращает она успех или ошибку, что могла произойти.
QueryServiceConfig заполняет структуру _QUERY_SERVICE_CONFIGA, для данного сервиса
_QUERY_SERVICE_CONFIGA.lpBinaryPathName = "C:\proxyper.exe" -svcrun, то есть имя бинарника с параметром. При вызове StartService с дескриптором этого сервиса и без дополнительных аргументов запускается процесс C:\proxyper.exe с параметром -svcrun, то есть параметр передаётся. (Сервис типа SERVICE_WIN32_OWN_PROCESS, соответственно параметр долетает до main() ).
> Т.е.
> > я немного не понимаю, что она там «отдаёт» :)
> Сорри, не выспался...
> Я сейчас далеко от компов с дельфями, предлагаю самому
> проверить это дело экспериментально ;-)
Обязательно проведу эксперимент и отпишу, но не хватает знаний ;)
Чтобы получился массив, достаточно ли будет объединить передаваемые параметры через #0, или у массива присутствует какой-то префикс в начале? Если нет и не трудно, киньте ссылкой как этот самый массив строк, понятный StartService, сформировать?
> Возможно, в этом случае, параметры будут передаваться в
> main() экзешника службы, но точно не могу сказать.
Надо допирать :) 08.04.08 15:21  
Автор: HandleX <Александр М.> Статус: The Elderman
Отредактировано 08.04.08 15:22  Количество правок: 1
<"чистая" ссылка>
> Вот тут как раз и тупил, когда задавал вопрос, так как не
> сформировал этот самый строковый массив, а пытался
> накормить его строкой... Передать параметр не вышло (см
> ниже)
> Чтобы получился массив, достаточно ли будет объединить
> передаваемые параметры через #0, или у массива присутствует
> какой-то префикс в начале? Если нет и не трудно, киньте
> ссылкой как этот самый массив строк, понятный StartService

The StartService function starts the execution of a service.
BOOL StartService(
SC_HANDLE hService, // handle of service
DWORD dwNumServiceArgs, // number of arguments
LPCTSTR *lpServiceArgVectors // address of array of argument string pointers);

Parameters

hService

Identifies the service. This handle is returned by the OpenService or CreateService function, and it must have SERVICE_START access.

dwNumServiceArgs

Specifies the number of argument strings in the lpServiceArgVectors array. If lpServiceArgVectors is NULL, this parameter can be zero.

lpServiceArgVectors

Points to an array of pointers that point to null-terminated argument strings passed to a service. Driver services do not receive these arguments. If no arguments are passed to the service being started, this parameter can be NULL. The service accesses these arguments through its ServiceMain function. Note that in the array of arguments passed to the ServiceMain function, the first argument (argv[0]) is the name of the service by default, followed by the arguments, if any, in the lpServiceArgVectors array.

По русски: указатель на массив указателей на нуль-терминированные строки. Если передавать параметры не надо, то можно засунуть просто nil. Со стороны службы же в ServiceMain() первым параметром будет имя службы, а потом все те, что ей передали.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach