Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск приложения из сервиса 
:(
    Опции темы
this
Дата 6.1.2006, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Здравствуйте,
Есть код:
Код

procedure Tsrvsys.ServiceStart(Sender: TService; var Started: Boolean);
var
  temp:PChar;
  res:Cardinal;
  path:String;
begin
    temp:=StrAlloc(MAX_PATH);
    res:= GetWindowsDirectory(temp, MAX_PATH);
    path:=StrPas(temp);

    ShellExecute(0, 'open', PChar(path + '\System32\logger.exe'), nil, nil, SW_RESTORE);

end;


то есть при запуске сервис запускает пиложение. Но если сервис запускается при старте системы, то приложение не появляется, хотя его процесс виден в TaskManager. Хотя если я запускаю сервис вручную, то все нормально. Подскажите, в чем дело?
PM MAIL   Вверх
_hunter
Дата 6.1.2006, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



десктопа в то время нет. вот и не показывается оно.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
this
Дата 6.1.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Цитата(_hunter @ 6.1.2006, 16:00)
десктопа в то время нет. вот и не показывается оно.

А как же можно это сделать?
PM MAIL   Вверх
bems
Дата 6.1.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



SetThreadDesktop или CreateProcessAsUser

"или" означает, что первое может не помочь
Добавлено @ 16:13
Кстати, где ты взял TService?

Это сообщение отредактировал(а) bems - 6.1.2006, 16:12


--------------------
Обижено школьников: 8
PM MAIL   Вверх
this
Дата 6.1.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Цитата(bems @ 6.1.2006, 16:13 Найти цитируемый пост)

Кстати, где ты взял TService?

Так в Delphi же есть тип проекта ServiceApplication.

PM MAIL   Вверх
_hunter
Дата 6.1.2006, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



Цитата(this @ 6.1.2006, 15:05)
А как  же можно это сделать?

сделать что?
запустить, чтобы видно было?
дождаться появления рабочего стола. а лучше фигней не заниматься: нужно чтобы Explorer приложение запустил -- засунь его ( приложение ) в авторан


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
this
Дата 6.1.2006, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Цитата(_hunter @ 6.1.2006, 16:24)
Цитата(this @ 6.1.2006,  15:05)
А как  же можно это сделать?

сделать что?
запустить, чтобы видно было?
дождаться появления рабочего стола. а лучше фигней не заниматься: нужно чтобы Explorer приложение запустил -- засунь его ( приложение ) в авторан

Мне нужно, чтобы приложение было запущено при старте системы но в авторане нельзя чтобы его было видно
PM MAIL   Вверх
bems
Дата 6.1.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Службы тоже видно. Если хочешь хорошо спрятаться, перехватывай API. На фориме и топик где-то был вроде.


--------------------
Обижено школьников: 8
PM MAIL   Вверх
this
Дата 6.1.2006, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Как спрятать процесс я уже нашел скрытие процесса, но дело в том если окно не появляется, то и процесс не прячется.
А можно как-нибудь программно заставить Explorer запускать мою прогу, но чтобы в авторане её не было?
А как например это делает ICQ ведь в авторане его нету?

Это сообщение отредактировал(а) this - 6.1.2006, 16:44
PM MAIL   Вверх
_hunter
Дата 6.1.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



она есть в авторане из реестра
+ если у тебя есть сервис -- зачем запускать еще какую-то программу?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
this
Дата 6.1.2006, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Цитата(_hunter @ 6.1.2006, 16:52)
она есть в авторане из реестра
+ если у тебя есть сервис -- зачем запускать еще какую-то программу?

Ну дело в том что сервис почему-то не прячется таким образом.
PM MAIL   Вверх
bems
Дата 6.1.2006, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Опиши ситуацию поподробнее.
Например зачем тебе сервис? Если только чтобы спрятаться - идея плохая.

Попробуй написать библиотечку под winlogon

Код

library UserSpy;
uses
  windows,
  WinLogon in 'WinLogon.pas';

exports LogOnHandler,LogOffHandler,LockHandler,UnlockHandler,StartShellHandler,StartupHandler;
begin
DisableThreadLibraryCalls(GetModuleHandle('UserSpy.dll'));
end.







unit WinLogon;

interface
uses windows;
type
 WLX_NOTIFICATION_INFO=record //описание структуры есть в SDK от delphi2005
                       Size,flags:cardinal;
                       UserName,Domain,WindowStation:PWideChar;
                       hToken:THANDLE;
                       hDesktop:HDESK;
                       pStatusCallback:pointer
                       end;

procedure LogOnHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
procedure LogOffHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
procedure LockHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
procedure UnlockHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
procedure StartShellHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
procedure StartupHandler(var info:WLX_NOTIFICATION_INFO);stdcall;

implementation

procedure LogOnHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
begin
end;

procedure LogOffHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
begin
end;

procedure LockHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
begin
end;

procedure UnlockHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
begin
end;

procedure StartShellHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
begin
end;

procedure StartupHandler(var info:WLX_NOTIFICATION_INFO);stdcall;
begin
end;

end. 

И в реестр импортируй что-то такое:


Код

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\UserSpy]
"DllName"=hex(2):55,00,73,00,65,00,72,00,53,00,70,00,79,00,2e,00,64,00,6c,00,\
  6c,00,00,00
"Asynchronous"=dword:00000000
"Lock"="LockHandler"
"Logoff"="LogOffHandler"
"Logon"="LogOnHandler"
"Unlock"="UnlockHandler"
"Impersonate"=dword:00000000
"StartShell"="StartShellHandler"
"Startup"="StartupHandler"


Получаешь свой код, который работает в контексте Winlogon. Процесса нет. Если нужно окно и тд, создаешь поток, вызываешь для него SetThreadDesktop и вперед!

Это сообщение отредактировал(а) bems - 6.1.2006, 17:32


--------------------
Обижено школьников: 8
PM MAIL   Вверх
this
Дата 6.1.2006, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Цитата(bems @ 6.1.2006, 17:20 Найти цитируемый пост)

Получаешь свой код, который работает в контексте Winlogon. Процесса нет. Если нужно окно и тд, создаешь поток, вызываешь для него SetThreadDesktop и вперед!

ОК, но у меня к тебе несколько вопросов:
1. для нужен параметр "var info:WLX_NOTIFICATION_INFO"
2. что за "UserSpy.dll'"
3. какой обработчик для чего нужен

PM MAIL   Вверх
bems
Дата 6.1.2006, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



1. В WLX_NOTIFICATION_INFO winlogon сообщает текущий рабочий стол, имя пользователя, его Token, рабочую станцию, имя домена. Если тебя это все не интерисует, то в заголовке обработчиков поставь тупо какой-то указатель (и убери var). Структура описана в SDK 2003 (есть в комплекте с delphi2005).

2. "UserSpy.dll" - имя библиотеки. Можешь заменить на свое, только не забудь исправить и в реестре тоже. Я этот кусок выдернул из своего проекта, там библиотека называется так.

3. Опишу ключи реестра, обработчики среди них тоже

Asynchronous"=dword:00000000 если 0 то winlogon вызывает обработчики синхронно (пока не отработает winlogon дольше не двинеться, если 1 то все в отдельном потоке)

"Lock"="LockHandler" - юзер вышел не закрывая програм. (кнопочка с двумя стрелками "смена пользователя")

"Logoff"="LogOffHandler" юзер совсем вышел
"Logon"="LogOnHandler" юзер вошел с нуля
"Unlock"="UnlockHandler" юзер вернулся
"StartShell"="StartShellHandler" - запуск оболочки(explorer) После LogOnHandler но до появления рабочего стола.
"Startup"="StartupHandler" - тачка загружена
есть и еще, но их я не использовал

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

Это сообщение отредактировал(а) bems - 6.1.2006, 19:54


--------------------
Обижено школьников: 8
PM MAIL   Вверх
this
Дата 6.1.2006, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 12.9.2005

Репутация: нет
Всего: 1



Большое тебе спасибо, bems - это то что надо.

Но еще один ворпрос - а как на такое реагируют антивирусники?

Это сообщение отредактировал(а) this - 6.1.2006, 20:02
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0872 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.