IPC между службой Windows и LSP DLL
Я пишу библиотеку Winsock LSP (Layered Service Provider), которая должна взаимодействовать со службой Windows.
Связь осуществляется с использованием отображенных в памяти файлов и событий для синхронизации. Все работает нормально, если приложение не работает как служба, но если оно не может найти какие-либо события или сопоставления файлов (я получаю ошибку ERROR_FILE_NOT_FOUND в OpenEvent).
Я подозреваю, что это происходит потому, что при запуске в качестве службы приложение запускается как пользователь SYSTEM, а LSP загружается приложениями, которые запускаются как локальный пользователь.
Я думаю, что это может быть решено с помощью правильного SECURITY_DESCRIPTOR, но я не знаю, на что он должен быть установлен.
Любые идеи о том, как сделать эту работу?
Спасибо,
1 ответ
В зависимости от ОС, это может быть проблема сессий. Если вы еще раз посмотрите на документацию для CreateEvent, CreateMemoryMapping и т. Д., Вы заметите GLOBAL\ префикс к имени объекта. Этот префикс (в том числе с префиксом SESSION\x\) определяет область видимости объекта. Глобальные префиксы видны во всей системе, в то время как объекты без префикса в имени являются локальными для определенного (текущего, если префикс \SESSION пропущен) сеанса. Сеансы появились в службах терминалов для Windows XP, затем попали в ОС Windows 2003 Server и более поздних версий.