MessageBox не пашед

Тема в разделе "WASM.WIN32", создана пользователем qwqwqwqw, 10 апр 2009.

  1. qwqwqwqw

    qwqwqwqw New Member

    Публикаций:
    0
    всем привет!

    недавно обнаружил что в контексте процесса svchost вызов месаджбокс работает не так как ожидается

    кроме щелчка характерного больше ничего нет ,никакого окна не вылазиет ......

    более того ... многие функи мне нужные отказались корректно работать ...
    с чем это может быть связано , и какие есть пути решения ?
     
  2. BlackParrot

    BlackParrot New Member

    Публикаций:
    0
    qwqwqwqw
    Сервисы обычно не предназначены для взаимодействия с пользователем и создания окон. Если это нужно включают опцию SERVICE_INTERACTIVE_PROCESS при CreateService. Но если процесс сервиса имеет привилегии LocalSystem все равно ничего не получиться, т.к. создав окно сервисом на дефолтном рабочем столе, все другие приложения должны будут взаимодействовать с этим окном изнутри. Из-за этих причин если хочешь что-то выводить или получать ввод от пользователя, создавай отдельный процесс и применяй IPC между ним и твоим сервисом svchost. Чтобы создать такой процесс юзай CreateProcessAsUser.
     
  3. BlackParrot

    BlackParrot New Member

    Публикаций:
    0
    Если хочешь вывести MessageBox без создания лишнего процесса и действий юзай WTSSendMessage, либо сделай инжект в explorer к примеру.
     
  4. qwqwqwqw

    qwqwqwqw New Member

    Публикаций:
    0
    а если просто код инжектю в scvhost то пловина фунок перестает норм работать, создавать новые сервисы не нужно ... как это обойти ?
     
  5. litrovith

    litrovith Member

    Публикаций:
    0
    qwqwqwqw, обойдите вы ето стороной!
     
  6. RET

    RET Well-Known Member

    Публикаций:
    17
    работа с окнами там не проходит, да и зачем. Вместо MessageBox, (я так понимаю нужен для отладки), используй вывод в файл или Beep или вызывай исключение (DebugPrint если уж на то пошло).
     
  7. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Попробуй это выполнить вначале запуска твоего кода в процессе сервиса

    Код (Text):
    1. SetProcessWindowStation(OpenWindowStation('WinSta0',FALSE,WINSTA_ALL_ACCESS))
    2. SetThreadDesktop(OpenDesktop('Default',0,FALSE,DESKTOP_ALL_ACCESS))
    а еще у MessageBox есть флаг такой MB_SERVICE_NOTIFICATION, вроде должно помочь, но я не проверял