Инъекции
---- редакция 17/10/2002 ------
В процедуре к-я тормозит и патчит WINLOGON после записи своего кода и изменения контекста потока на мой код я поставил вызов MessageBoxа (вместо Sleep), после чего ResumeThread WINLOGONa запускает мой код... ВСЕ РАБОТАЕТ С ПЕРВОГО РАЗА... у меня крыша едет, почему обычный Sleep не подходит?
Пользуясь обычными API функциями (WinNT/2K) написал приложение, внедряещее мою DLLину в другой процесс (не без помощи Питрека ). Работает :) на ура, НО, внедрение в процесс WINLOGON.EXE получается нестабильно!! (иногда с первого раза, иногда с третьего)...В остальные приложения - как по маслу. Подскажите, где прокол?:-(
---- редакция 17/10/2002 ------
В процедуре к-я тормозит и патчит WINLOGON после записи своего кода и изменения контекста потока на мой код я поставил вызов MessageBoxа (вместо Sleep), после чего ResumeThread WINLOGONa запускает мой код... ВСЕ РАБОТАЕТ С ПЕРВОГО РАЗА... у меня крыша едет, почему обычный Sleep не подходит?
Блин... Не знаю, что и сказать. Может потому, что WINLOGON не простой процесс? В любом случае это не единственный такой прецедент, см.
http://groups.google.com/groups?selm=llojjug8aqq2qtv67rvm2h8i3p3vr5r205%40meow-labs.de&oe=UTF-8&output=gplain
... почему обычный Sleep не подходит?
Вероятно Sleep останавливает Message Loop нужного вам потока. MessageBox имеет свой собтвенный цикл и заодно Dispatch-ит необходимые вам message. Кстати RPC часто Marshal-ятся через Message Queues.
Вероятно Sleep останавливает Message Loop нужного вам потока. MessageBox имеет свой собтвенный цикл и заодно Dispatch-ит необходимые вам message. Кстати RPC часто Marshal-ятся через Message Queues.
Мой поток не при чем мне кажется...
Я выделил память в процессе WINLOGONA, остановил его основной поток, вписал в выделенную память код загрузки своей библиотеки, изменил контекст основного потока WINLOGONa на начало выделенного блока памяти (с вызовом моей длл) и затем ВЫВЕЛ MESSAGEBOX на три секунды, программно его закрыл. Только потом я запустил поток WINLOGONa заново, он загрузил мою длл и далее вернул все как было.
В том то и дело, что MessageBox вызывается ни к селу ни к городу - и почему-то все работает... Т.е. он вызывается ДО выполнения моего внедренного кода.
Мой поток не при чем мне кажется...
Я выделил память в процессе WINLOGONA, остановил его основной поток, вписал в выделенную память код загрузки своей библиотеки, изменил контекст основного потока WINLOGONa на начало выделенного блока памяти (с вызовом моей длл) и затем ВЫВЕЛ MESSAGEBOX на три секунды, программно его закрыл. Только потом я запустил поток WINLOGONa заново, он загрузил мою длл и далее вернул все как было.
В том то и дело, что MessageBox вызывается ни к селу ни к городу - и почему-то все работает... Т.е. он вызывается ДО выполнения моего внедренного кода.
Честно говоря, не могу понять причем тут MessageLoop. Это ведь всеголишь часть кода, выполняющаяся в конкретном потоке, не думаю, что для MessageBox создается отдельный поток.