Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Послать сигнал от приложения к сервису


Автор: MbIcJIuBcJIyX 16.8.2008, 22:16
Приветствую.

Такая проблема, сделал сервис который должен получать сигнал от приложения, 

в приложении создаю CreateEvent, посылаю SetEvent, а в сервисе ловлю событие с помощью OpenEvent и WaitForSingleObject, в XP все прекрасно работает, но в Висте увы нет.

пробывал наоборот, в сервисе делать CreateEvent и WaitForSingleObject, а в приложении OpenEvent и SetEvent, ни в XP не в висте не работает.

собственно вопрос, почему на висте не работает?

у CreateEvent есть интересный параметр, типа TSecurityAttributes, честно говорят не очень разбираюсь в этом, нашел пару примеров в Инете заполучения этого параметра, но при этом вылетает ошибка Отказано в доступе.

пример:
Код

   Win32Check(InitializeSecurityDescriptor(@SD, SECURITY_DESCRIPTOR_REVISION));
  Win32Check(SetSecurityDescriptorDacl(@SD, true, nil, false));
  SA.nLength:= SizeOf(SA);
  SA.lpSecurityDescriptor := @SD;
  SA.bInheritHandle := False;

    hCreateEvent := CreateEvent(@SA, TRUE, FALSE, 'ACC_TIME_SYNC');
    if hCreateEvent = 0 then RaiseLastWin32Error;


как же все таки послать сигнал из приложения сервису, нужен исключительно сигнал, т.к.  никаких данных передать не нужно.

Автор: safright 16.8.2008, 23:01
Врядли поможет, но вот небольшой ликбез: каждый процесс, шире - действие программы, имеют некоторый дескриптор безопасности (не путать с дескриптором окна). В дескрипторе содержится довольно много инфы, ключевой является маска доступа: к чему имеет право обращаться/изменять/удалять и т.д. процесс с данным дескриптором. В WinXP за дескриптор безопасности пользователя отвечает winlogon (можно на него глянуть в process manager'е), т.е. все действия пользователя выполняются с дескриптором безопасности, который задан для этого процесса. Программы, запускаемые пользователем обычно имеют дескриптор безопасности от explorer.exe (опять же можно посмотреть в дереве процессов). Хотя есть возможность поместить его в srvices...

В общем, по моему непрофессиональному мнению: причина может быть в том, что сервису не хватает прав доступа (возможно - как раз стоит поместить его в уровень повыше), либо, что оч возможно - "Винда свято мешает юзеру сделать что-то опасное". Отключи всю защиту - мб дело в файрволле.

Автор: MbIcJIuBcJIyX 16.8.2008, 23:22
Способ: отключить защиту не приемлем в моем случае smile
я шароварщик, пишу для публики smile

возможно есть другой способ подать сигнал из приложения сервису?

Автор: BaD_SeCt0R 17.8.2008, 00:46
Цитата(MbIcJIuBcJIyX @  16.8.2008,  23:22 Найти цитируемый пост)
возможно есть другой способ подать сигнал из приложения сервису?

MMF?

Автор: MbIcJIuBcJIyX 17.8.2008, 01:07
MMF?

Автор: BaD_SeCt0R 17.8.2008, 09:55
Цитата(BaD_SeCt0R @  17.8.2008,  00:46 Найти цитируемый пост)
MMF?

Memory Mapped Files

Автор: MbIcJIuBcJIyX 17.8.2008, 11:27
разве MMF может дать сигнал? это скорей для обмена данными, как сервис узнает что я создал file mapping?

CreateFileMapping так же как и CreateEvent имеет параметр типа PSecurityAttributes, что то мне подсказывает что я столкнусть с той же проблемой в висте.

Автор: BaD_SeCt0R 17.8.2008, 11:42
Цитата(MbIcJIuBcJIyX @  17.8.2008,  11:27 Найти цитируемый пост)
это скорей для обмена данными

прости, значит не так понял
А вообще вариантов масса. Сокеты, пайпы, можно даже сделать сервису невидимое окошко и слать туда сообщения.

Автор: MbIcJIuBcJIyX 17.8.2008, 12:06
сокеты и пайпы я оставил как запасной вариант, от без исходности если что smile
а с невидимым окошком на висте уже не прокатывает, на XP без проблем.

Автор: BaD_SeCt0R 17.8.2008, 12:55
Цитата(MbIcJIuBcJIyX @  17.8.2008,  12:06 Найти цитируемый пост)
невидимым окошком на висте уже не прокатывает

Да и вообще окно может стать причиной нестабильности сервиса.

Автор: safright 17.8.2008, 16:48
Не помню, ибо не знаю, но можно еще иконку в трей пихнуть - она, кажется, тож получает дескриптор  smile 

Автор: MbIcJIuBcJIyX 17.8.2008, 21:55
Иконка в трей к сожалению тоже не вариант.

Автор: Virtuals 18.8.2008, 13:48
MbIcJIuBcJIyX, 
может попробовать
Mutexes или Semaphores

Автор: CodeMonkey 25.8.2008, 11:33
http://www.delphikingdom.com/table/search.asp?namekey=security&ItemID=352&isQuestion=2&QwUserID=&TypeEqv=0&Count=20

В частности:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=60360

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)