Вверх ↑
Этот топик читают: Гость
Ответов: 209
Рейтинг: 1
#1: 2012-02-03 02:56:18 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:50:12
карма: 0

0
Ответов: 3889
Рейтинг: 362
#2: 2012-02-03 10:01:09 ЛС | профиль | цитата
[offtop]Что-то не дают общественности покоя кулхацкерские техники, я погляжу, их есть у меня, вот только потяните ли Вы - большой вопрос [/offtop]
Net2Com писал(а):
Как правильно приостановить чужое приложение?
Запуститься с повышенными привилегиями. Перечислить все потоки процесса-жертвы через CreateToolhelp32Snapshot, включая внешние библиотеки. Применить к каждому потоку функцию API SuspendThread. Регулярно следить, не запустит ли кто-нибудь в приложении поток без нашего ведома (например, по зарегистрированному Call-back) и считать свои секунды. По истечении требуемого интервала запустить все потоки через ResumeThread и молиться, что они не рассинхронизируются и всё не вылетит к чёртовой бабушке. Единственный случай, когда проблем наверняка не будет - однопоточное приложение, не использующее на момент заморозки асинхронных функций API (то есть без таймеров, ожидания соединения по портам, сокетам, прочих сообщений от системы). В общем, такого почти не бывает в реальной жизни.

Другими словами, Вы слишком многого хотите, 100% "правильно" (то есть без возможных негативных эффектов) приостановить чужое приложение невозможно. Единственный грамотный метод я Вам уже описал, но любая заморозка нарушает стабильность приложения-жертвы, и тут встаёт вопрос - насколько пряморукий человек писал то приложение, учитывал ли он возможную рассинхронизацию потоков в силу стороннего воздействия. Например, при виде чего-то страшного и многопоточного, без внутренней синхронизации и блокировок, что так любят клеить на коленке местные неофиты, закрадывается серьёзное сомнение в том, что ЭТО Вам удастся заморозить без фатальных (для приложения) последствий. А при попытках заморозить некоторые службы или системные процессы (естественно, нужны соответствующие привилегии) Вы имеете все шансы как минимум дестабилизировать, как максимум - "повесить" или выбить в BSoD всю систему.
------------ Дoбавленo в 09.37:
Net2Com, кстати, Ваш горячо "любимый" WMC - управляемый процесс виртуальной машины .NET, там добавляются свои ньюансы, сейчас впервые попробую приостановить простейшее самодельное .NET-приложение описанным выше методом, самому интересно, что получится.
------------ Дoбавленo в 10.01:
Практика показала, что экземпляры 32-хбитной виртуальной машины .NET под NT5.x замораживаются наравне с обычными процессами, но WMC наверняка использует мультимедийные функции системы с аппаратным ускорением и работой с потоковыми данными, сетью. Кроме того, там NT6.x x64 чаще всего, а Ваше приложение таки 32-хбитное, не исключаю, будет такая же история как с отловом окон и процессов.
карма: 1

0
Ответов: 1429
Рейтинг: 50
#3: 2012-02-03 10:14:45 ЛС | профиль | цитата
[offtop]1nd1g0, блин, я только щас вспомнил, читая Ваш пост, если у меня и интерфейс и музыкальная часть лежит в одном FTCG мультике, то я получу однопоточное приложение. Интересно, можно ли для FTCG сделать элементы, аналогичные Thread стандартного пакета.[/offtop]
карма: 0

0
Ответов: 3889
Рейтинг: 362
#4: 2012-02-03 10:37:29 ЛС | профиль | цитата
[offtop]
login писал(а):
можно ли для FTCG сделать элементы, аналогичные Thread стандартного пакета

Можно, но головная боль по синхронизации потоков целиком ляжет на Вас. Можете начать с разбивки на несколько контейнеров и запуска каждого в отдельном потоке штатными компонентами.[/offtop]
карма: 1

0
Ответов: 1429
Рейтинг: 50
#5: 2012-02-03 10:53:48 ЛС | профиль | цитата
[flood]1nd1g0, не получится в разные контейнеры, один контейнер не сможет залезть в другой чтобы прочитать там массив [/flood]
карма: 0

0
Ответов: 3889
Рейтинг: 362
#6: 2012-02-03 12:04:00 ЛС | профиль | цитата
login, [flood]в отдельную тему, например, "Многопоточность внутри FTCG"[/flood]
карма: 1

0
Ответов: 1429
Рейтинг: 50
#7: 2012-02-03 12:21:36 ЛС | профиль | цитата
1nd1g0,[flood]создам тему, как только закончу всю работу по прошлой нашей теме.[/flood]
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#8: 2012-02-03 12:55:46 правка | ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2017-03-04 03:33:23
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#9: 2012-02-03 13:12:20 ЛС | профиль | цитата
г. ость писал(а):
бывали случаи они сутками висели в заморозке и даже после этого стартовали абсолютно нормально.
Всё правильно. Так и должно быть.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#10: 2012-02-03 13:16:10 ЛС | профиль | цитата
г. ость, это лишь говорит о профессионализме авторов этих приложений и грамотной реализации описанного мною метода в AnVir. Я видел множество приложений, которые не "замораживаются" до конца, или не размораживаются корректно, если вообще "размораживаются". Например, если приложение само использует заморозкуразморозку собственных потоков, а тут ещё Вы лезете со своей. Либо оно Вам не даёт себя заморозить, либо дублирует Вашу заморозку своею не предполагая, что кто-то её уже наложил на один из потоков, наступает "вечная мерзлота", особенно весело, когда заморозка зацикливается и процесс становится неубиваемым никакими способами. Даже затиранием всей его памяти кодом из 0-го кольца защиты - в силу заморозки просто не отрабатывают деинициализирующие процедуры и он так и остаётся висеть в списке, хоть и не работает. Если бы всё было так просто, в системе и официальных утилитах давно была введена "пауза" для произвольных процессов, её не случайно нет.
карма: 1

0
Ответов: 209
Рейтинг: 1
#11: 2012-02-03 14:23:26 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:50:21
карма: 0

0
Ответов: 3889
Рейтинг: 362
#12: 2012-02-03 14:58:54 ЛС | профиль | цитата
Net2Com писал(а):
заморозить работу браузера на несколько секунд

Браузеры будут разные, на разных системах? Просто браузеры друг другу - рознь. Некоторые из десятков процессов состоять могут. И, опять же, 64-хбитные потоки, особенно - под другим пользователем, своим 32-хбитным приложением Вы в ряд ли заморозите.
карма: 1

0
Ответов: 3349
Рейтинг: 233
#13: 2012-02-03 15:06:35 ЛС | профиль | цитата
Можно дать своему процессу приоритет реального времени, и загрузиться бесконечным циклом, притормозит сразу все
карма: 1

0
Ответов: 258
Рейтинг: 2
#14: 2012-02-03 17:00:59 ЛС | профиль | цитата
1nd1g0 писал(а):
г. ость, это лишь говорит о профессионализме авторов этих приложений и грамотной реализации описанного мною метода в AnVir

Есть очень старые приложения, где реализована эта функция! Например Process Killer! Программа стара, ещё 2003 года, а замораживать может любые процессы!
карма: 0

0
Ответов: 209
Рейтинг: 1
#15: 2012-02-03 17:20:34 ЛС | профиль | цитата


Редактировалось 1 раз(а), последний 2020-02-16 13:50:27
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)