Доброго времени суток! Вопрос заключается в следующем: в данной статье http://www.wasm.ru/article.php?article=scheduler описаны API-функции, которые переводят процесс в состояние Suspend или выводят из него. Вопрос: можно ли "засуспендить" процесс модификацией определенных структур ядра (например, через отладчик)? Исследование с помощью WinDbg показало, что скорее всего в модификации нуждается структура KTHREAD, в частности, поля WaitBlock и WaitBlockList, однако, изменение значений в них на снятые с того же процесса в "завешенном" состоянии результата не дает. Какие поля все-таки нужно модифицировать? Заранее спасибо
Спасибо за ответ! Суть понятна, в деталях начинаются проблемы. Сложность возникла в этом месте Код (Text): KiInsertQueueApc(&Thread->SuspendApc, RESUME_INCREMENT); Насколько я понимаю, это вызов асинхронной процедуры SuspendAPC. Как следует отсюда http://www.opening-windows.com/techart_windows_vista_apc_internals.htm, функция KiInsertQueueApc сначала выставляет флаг KTHREAD.ApcState.KernelApcPending, а затем KTHREAD.SpecialApcDisable (или KTHREAD.KernelApcDisable для Windows XP), то есть установка этих флагов заставляет поток при получении управления передать управление на нужную АРС (в ApcListHead установлена именно SuspendAPC, я проверил). Однако "зависания" не происходит...что я делаю не так?
Ау! Неужели никто не знает, возможно ли это сделать хотя бы теоретически? Все предварительные действия (проверка флагов, настройка списков) я выполнил, однако дальше должен следовать вызов функции hal!HalRequestSoftwareInterrupt. Как вызвать ее, имея только доступ на чтение/запись к памяти?