Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сервис+mailslot [D5, WinXP]


Zapped ©   (2003-10-14 16:23:00) 

Здравствуйте!
Прелюдия.
Пишу сервис на основе TServiceApplication, он должен сам в определённое
время проигрывать какой-то список аудио-файлов, а также должен иметь
возможность управляться другой программой (в том числе и по локальной
сети), то есть получать команды (воспроизвести, остановиться, пауза, следующий файл и т.п.)
ну и возвращать состояние (проигрывает/стоит, номер файла etc).
Задача: как организовать обмен командами/данными?
Нашёл, что можно с помощью mailslot`ов. В ходе проверки mailslot`ов,
типа, "кто как работает", пришёл к выводу, что нужно по одному mailslot`у у каждого (у сервиса и
у программы управления): у сервиса - чтобы получать команды, у
программы управления - для получения её (команды) результатов. Создал
класс, в нём в зависиости от параметра создаётся либо mailslot, либо
подключние к mailslot`у (но это не так важно).
Важно, то что:
создаю mailslot так (как везде написано):
FMailslotHandle := CreateMailslot(PChar(FMailslotName), 0, MAILSLOT_WAIT_FOREVER, nil);
проблем нет,
"подключаюсь" к нему:
FMailslotHandle := CreateFile(PChar(FMailslotName), GENERIC_WRITE, FILE_SHARE_READ,
nil, OPEN_EXISTING, 0, 0);
Вот здесь проблема: если из сервиса производить "подключение" к
mailslot`у, созданному программой управления - всё нормально, а вот
если наоборот: "подключаться" к mailslot`у, созданному в сервисе, из
программы управление - апшипка! GetLastError даёт 5 = ERROR_ACCESS_DENIED.
а вот если
вместо GENERIC_WRITEпоставить GENERIC_READ
FMailslotHandle := CreateFile(PChar(FMailslotName), GENERIC_READ, FILE_SHARE_READ,
nil, OPEN_EXISTING, 0, 0);
то всё нормально! НО! нам ведь такое не надо...
судя по всему различие в правах программ: сервис запускается с правами
System, программа же в общем случае с правами любого пользователя.
Как победить? Только чобы по уму.
--
Спасибо,Алексей


clickmaker   (2003-10-14 16:43:00) [1]

Указывай Security Attributes у мэилслота в сервисе, давай на него права нужным пользователям


Наверх

Титульная страница Поиск, карта сайта Написать письмо