виста & сервис для захвата скриншотов с экрана

Тема в разделе "WASM.WIN32", создана пользователем valix7, 4 фев 2008.

  1. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    Привет!
    Есть сервис который посылает скриншот десктопа в сеть... в сервисе есть код

    SetProcessWindowStation(OpenWindowStation("WinSta0", FALSE, MAXIMUM_ALLOWED));
    SetThreadDesktop(OpenDesktop("Default", 0, FALSE, MAXIMUM_ALLOWED));

    для переключения на десктоп юзера... Сервис нормально работает в winxpsp2, 2000, 2003, т.е. скриншот показывается нормально... а в висте только черный экран. Зашел в свойства сервиса там поставил галку Вход в систему через системную учетную запись + Разрешить взаймодействе с десктопом, проблема не решилась. Кто-нибудь с этим сталкивался? Спасибо!
     
  2. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Сервисы в висте это не те сервисы что раньше были - прежде чем коды писать читайте справку
     
  3. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    Уже искал в инете решение проблемы... ничего полезного. Кстати, обе ф-и для переключения на десктоп юзера возращают 1, т.е. успешно. Еще пробывал OpenDesktopInput, та же байда. Также в статусе сервиса поставил dwServiceType SERVICE_INTERACTIVE_PROCESS, опять проблема не решилась.
     
  4. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Плохо ты друг искал:
    http://www.microsoft.com/whdc/system/vista/Vista_Services.mspx

    Session 0 isolation has a number of implications for services, including the following:
    • Services cannot use PostMessage or SendMessage to send messages to user applications. All applications are running in Session 1 or higher and have a different message queue. Applications cannot send Windows messages to a service for the same reason. Services that send messages to applications must use mechanisms such as remote procedure calls (RPCs) or named pipes.
    • Services that have a UI, such as a dialog box, cannot display it directly in Windows Vista. Services that require user interaction must handle it indirectly. For simple interactions, services can display a message box in the user's session by calling WTSSendMessage. For more complex interactions, services must use an approach such as calling CreateProcessAsUser to create a UI process in the user's session. That process handles user interaction and communicates with the service through RPC or named pipes.

    For further information about Session 0 in Windows Vista and guidelines for writing Windows Vista services, see the white paper titled Impact of Session 0 Isolation on Services and Drivers in Windows Vista, which is listed in "Resources" at the end of this paper.


    Running services and user applications in the same session creates a number of security issues. To address those issues, Windows Vista makes two significant changes to Session 0:
    • Session 0 is reserved exclusively for services and other applications that are not associated with an interactive user session. User applications must run in Session 1 or higher.
    • Session 0 does not support user interfaces. In particular, processes that are running in Session 0 do not have access to the graphics hardware and cannot directly display any UI on the monitor.
     
  5. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    Спасибо! Буду копать дальше..
     
  6. system_not_ok

    system_not_ok New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2007
    Сообщения:
    5
    накопал что-ть? :)
    та же проблема... не ясно как сделать сервис, который бы делал скриншоты десктопа юзера...
    при этом не запускать доп программ и выстраивать с ним связь через пайпы