всем привет! недавно обнаружил что в контексте процесса svchost вызов месаджбокс работает не так как ожидается кроме щелчка характерного больше ничего нет ,никакого окна не вылазиет ...... более того ... многие функи мне нужные отказались корректно работать ... с чем это может быть связано , и какие есть пути решения ?
qwqwqwqw Сервисы обычно не предназначены для взаимодействия с пользователем и создания окон. Если это нужно включают опцию SERVICE_INTERACTIVE_PROCESS при CreateService. Но если процесс сервиса имеет привилегии LocalSystem все равно ничего не получиться, т.к. создав окно сервисом на дефолтном рабочем столе, все другие приложения должны будут взаимодействовать с этим окном изнутри. Из-за этих причин если хочешь что-то выводить или получать ввод от пользователя, создавай отдельный процесс и применяй IPC между ним и твоим сервисом svchost. Чтобы создать такой процесс юзай CreateProcessAsUser.
Если хочешь вывести MessageBox без создания лишнего процесса и действий юзай WTSSendMessage, либо сделай инжект в explorer к примеру.
а если просто код инжектю в scvhost то пловина фунок перестает норм работать, создавать новые сервисы не нужно ... как это обойти ?
работа с окнами там не проходит, да и зачем. Вместо MessageBox, (я так понимаю нужен для отладки), используй вывод в файл или Beep или вызывай исключение (DebugPrint если уж на то пошло).
Попробуй это выполнить вначале запуска твоего кода в процессе сервиса Код (Text): SetProcessWindowStation(OpenWindowStation('WinSta0',FALSE,WINSTA_ALL_ACCESS)) SetThreadDesktop(OpenDesktop('Default',0,FALSE,DESKTOP_ALL_ACCESS)) а еще у MessageBox есть флаг такой MB_SERVICE_NOTIFICATION, вроде должно помочь, но я не проверял