Определение Logoff

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 6 авг 2007.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Подскажите пожалуйста, как определить, происходит ли в данный момент logoff системы?

    Проблема заключается в следующем. У меня есть процесс, который я запускаю из сервиса и жду завершения этого процесса средствами WaitForSingleObject.

    Процесс может быть завершен двумя способами. Либо он умирает сам естественным образом (выход из WinMain), либо его прибивает винда во время logoff-а. В зависимости от того, по какой причине умер процесс, мне нужно выполнить определенные шаманства. Как определить, от чего умер процесс? Как вариант - достаточно научиться определять, происходит ли в данный момент логоф системы.

    Скажу сразу - отлов WTS_SESSION_LOGOFF и WTS_CONSOLE_DISCONNECT не канает - WaitForSingleObject отпускает прежде чем приходят эти нотификации :-(
     
  2. green_newbie

    green_newbie New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2006
    Сообщения:
    51
    Может в процессе создать окошко и в его оконной процедуре по WM_ENDSESSION возвращать из винмейна специальный код возврата?
     
  3. kelt

    kelt New Member

    Публикаций:
    0
    Регистрация:
    28 май 2007
    Сообщения:
    16
    всё хорошо. только до выхода из винмейна дело в нашем случае не доходит. процесс киляют где-то в процессе выхода :dntknw:
     
  4. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Может в процессе создать занятый именованный mutex, в сервисе ждать на нём и в случае успешного завершения процесса отпускать mutext корректно через ReleaseMutex, а если процесс прибьют насильно то WaitForSingleObject вывалится с WAIT_ABANDONED.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    roman_pro

    В этом случае останется непонятной причина смерти процесса. Его убила винда при логофе, или юзер из TaskManager?
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    вопрос поставлен некорректно
    надо так: как отличить прибивание процесса из таск-манагера от прибивания из винлогона
    ответ: без анализа стека - никак ИМХО
     
  7. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    стек имелся в виду в ядре на zwterminateprocess
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Вообще, винда же знает, что идёт завершение сессии - не даёт в это время запускать процессы. Значит, можно теоретически получить эту информацию.
     
  9. green_newbie

    green_newbie New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2006
    Сообщения:
    51
    Как это не доходит? ри логофе система рассылает всем окнам WM_ENDSESSION
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    green_newbie

    Ну вот на висте все как-то странно. У меня даже WM_ENDSESSION не успевает дойти :-(