доступ к оконной станции пользователя

Тема в разделе "WASM.NT.KERNEL", создана пользователем pashe4ka13, 28 окт 2010.

  1. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Здравствуйте!!! При написании сервиса для ОС Виста у меня возникла проблемма с получением доступа к сессии полизователя. Из различных источников мне стало известно, что в Висте и семерке отсутствует поддержка интерактивного сервиса в сессии пользователя. С другой стороны я вижу как служба UI0Detect.exe получает доступ к рабочему столу выводя свое диалоговое окно. Вопрос как она это делает? Или может кто подскажет как получить доступ к оконной станции пользователя?
     
  2. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    pashe4ka13
    Можно попробывать установить parent окну
     
  3. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    IceCrashLdr
    Сделать его родительским? И что это даст?
     
  4. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    pashe4ka13
    отреверсить UI0Detect.exe ?

    Или просто запустить свой процесс из сервиса в контексте пользователя.(копать в сторону SetTokenInformation,CreateEnvironmentBlock,CreateProcessAsUser)
     
  5. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    отреверсить UI0Detect.exe было бы конечно не плохо, еще бы знать как это сделать? Я не профессиональный программист, а самоучка. Программирование моё хобби в свободное время. Обратный инжинеринг для меня пока еще слишком сложно. Про апи SetTokenInformation,CreateEnvironmentBlock,CreateProcessAsUser читал много, но так и не разобролся с ними.
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    UI0Detect.exe не получает доступ к юзерской сессии, а выводит сообщения на отдельный десктоп, не принадлежащий текущему юзеру.
     
  7. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Partner
    Доступ она получает посредством апи указанных ziral2088 выводит на десктоп пользователя диалоговое окно об обнаружении интерактивной службы. Я написал сервис. Он выводит модальное диалоговое окно. В ХР работает, в висте из-за разделения сессий не работает, вернее работает, но на безопасном рабочем столе. Вот у меня и вопрос КАК ПОЛУЧИТЬ ДОСТУП К ОКОННОЙ СТАНЦИИ ПОЛЬЗОВАТЕЛЯ?
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Под Вистой - напрямую НИКАК. Решение одно - запустить приложение под пользователем, которое будет ловить сообщения от сервиса.
     
  9. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    проверял кто то так делать?:
    1. OpenWindowStation
    2. SetProcessWindowStation
    3. OpenDesktop
    4. SetThreadDesktop

    а дальше окно создать какое то или мессадж бокс? я сам не пробовал, не знаю можно ли так, но интересно. :)

    Добавлено: Так сделать не выйдет ибо OpenWindowStation можно применять только к текущей сессии.
     
  10. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Partner
    А как мне получить токен пользователя?
     
  11. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    pashe4ka13
    Рабочил стол сделать родителем ..
     
  12. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    IceCrashLdr
    Можно пример кода?
     
  13. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    WTSGetActiveConsoleSessionId
    WTSQueryUserToken
     
  14. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Partner
    Почему не работает?

    format PE GUI 4.0
    entry start
    include 'c:\fasm\include\win32ax.inc'

    section '.data' data readable writeable
    активная_сессия dd ?

    section '.code' code readable executable
    start:
    invoke WTSGetActiveConsoleSessionId
    mov [активная_сессия],eax
    invoke MessageBox,HWND_DESKTOP,[активная_сессия],MB_OK

    section '.idata' import data readable writeable
    library kernel32,'kernel32.dll',\
    user32,'user32.dll',\
    gdi32,'gdi32.dll'
    include 'kernel32.inc'
    include 'user32.inc'
    include 'gdi32.inc'
     
  15. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Непонятно что не работает.
     
  16. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    программа компилируется, но при запуске выдает ошибку
     
  17. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Заработало :)
     
  18. pashe4ka13

    pashe4ka13 New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2010
    Сообщения:
    263
    Рано обрадовался. Функция WTSQueryUserToken не дает токен возвращая 0. GetLastError показывает код ошибки 0х522. Как я понял у моего процесса нет привилегии SE_TCB_NAME. Как мне повысить привелегии до SE_TCB_NAME ?
     
  19. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    pashe4ka13
    запусти свою программу как сервис, тогда будет SE_TCB_NAME.

    или подгрузи свою дллку в любой процесс под Local System Account(или что там имеет такую привелегию) и оттуда исполни код.
     
  20. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Нет смысла вызывать WTSQueryUserToken c обычного приложения, а сервис уже имеет необходимые привилегии.