NtSuspendProcess

Тема в разделе "WASM.NT.KERNEL", создана пользователем ASMatic, 13 янв 2012.

  1. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    PsSuspendProcess() перебирает с помощью PsGetNextProcessThread() треды и сюспендит их PsSuspendThread().
    Последняя в свою очередь проверяет не текущий ли тред мы пытаемся засюспендить, если да - то не проверяем никаких флагов на текущее состояние треда а просто вызывается KeSuspendThread().
    И что тогда получается - мы сами себя засюспендим и как тогда произойдет приостановление остальных тредов текущего процесса?

    в самой KeSuspendThread() меня уже потеряло малость. Можете объяснить как оно происходит с остановом текущего процесса. В частности интересуют методы останова процесса без перебора тредов вручную (NtQuerySystemInformation) но нужно оставить "в живых" текущий тред.
     
  2. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    ASMatic
    Доставляется саспенд апк, в которой поток входит в ожидание на семафоре. По истечению времени или принудительно симафор переводится в сигнальное состояние и тред выходит из ожидания.

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

    Я не юзаю такие грязные хаки, а енумлю треды и останавливаю каждый вручную.
     
  3. ASMatic

    ASMatic New Member

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

    *работаю из р3, тему сюда перенесли(
     
  4. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    ASMatic
    Я не упоминал слепки. Можно нотифи поставить на создание новых тредов или выполнить какие то действия, которые приведут к выполнению нашего кода в контексте всех потоков.
     
  5. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    Malfoy
    Да я понял что вы о других методах говорите, т.к. топик в кернел разделе, потому какбы и подчеркнул о р3.
    По поводу нотифи - есть может какие р3 варианты?
     
  6. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    ASMatic
    Способов не меряно. Начиная от элементарных дллмейн и кончая IDP, куками етц. Просто суть же не в том. Для чего нужно саспендить потоки - нормальный алго не требует этого. Обычно для модификации кода такое делают, если она грамотно выполнятеся, то не нужен никакой саспенд.
     
  7. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    Malfoy
    Ну да точно - нужно мысли обширней) = благодарочка!
    да, сплайсы нужны. Без саспенда можно потрейсить правда (это пока все что в голове крутилось по этому поводу) - дабы треды "вывести" с участка заменяемого, но с саспендом оно как-то проще выглядит, хотя с костылями которые тож нужно разруливать.
     
  8. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    ASMatic
    Патч не годный.

    Следует выполнять потоковую маршрутизацию на буфер, после которой все потоки должны быть направлены на общую точку в оригинальном коде, это да, требует саспенд. Но обычно нет смысла юзать начало процедур, всегда найдётся инструкция длинее 5 байт.
     
  9. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    Malfoy
    суть в том что это не системный код патчится будет, т.е. не могу рассчитывать что там не будет сразу short jmp или еще какое ветвление, потому какбы не хотелось бы разбирать что там за код, а просто попатчить его и пусть пропадет оно пропадом)

    а это какбы вариант. опять таки - нужно думать "шире")
    гденить описывале как люди "в черном" это делают?
    а то у для меня это просто термин, среализацией пока хз(
     
  10. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    ASMatic
    http://wasm.ru/forum/viewtopic.php?pid=460090#p460090

    Я бы это нивкоем случае не делал. Всегда можно найти годное место для маршрутизации. До вашего места будет есчо наверно куча кода выполнена, управление на котором можно получить.
     
  11. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    Malfoy
    благодарю за консультацию!
    *веселого нг (хотя для меня он уже прошел две недели назад)

    буду искать варианты, теперь есть над чем по раздумывать.
     
  12. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
  13. ASMatic

    ASMatic New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2010
    Сообщения:
    233
    Malfoy
    благодарю! вродь понял что к чему. Для "локального" пользования норм решение (для хендлера создания треда).
    А с вопросами по созданию процесса - отправился в тот топик.