![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выгрузка WinApi перехватчика [D7, WinXP]
KygECHuK © (2008-08-26 10:33:00)
Страницы: < 1 2 3 4 5 6 7 8 9 >
занимаюсь автоматизированным тестированием, оформил плагин для перехвата отрисовки текста. он подменяет адресса к функциям в таблице импорта, в моём случае это textOut в GDI32.dll. Всё работает хорошо, вот только что при выгрузке перхватчика с некоторойй вероятностью появлятся ошибка доступа к памяти...
Возможно кто нибудь занимался подомной проблематикой и может что нибудь посоветовать...
Сергей М. (2008-08-27 10:58:00) [141]
> ОТДЕЛЬНАЯ сторонняя система тетсирования
А как связан процесс этой системы тестирования с процессом АИС ?
Плагин-то твой, как я понимаю, грузится в АП процесса системы тестирования, а не в АП процесса АИС ..
> не спрашиваёте меня как это получается у разаработчиков
Не буду, я и так догадываюсь)
KygECHuK (2008-08-27 10:47:00) [142]
> Но плагины-то эта система поддерживает, раз она грузит твой
> плагин ?
Плагины поддержеивает ОТДЕЛЬНАЯ сторонняя система тетсирования.
Естетественно есть способ получать данные не из интерфейса, но, как я утверждал раньше они могут отличаться от данных полученных непосредственно из интерфейса... не спрашиваёте меня как это получается у разаработчиков.
Сергей М. (2008-08-27 10:36:00) [143]
> У АИС нет такой подсисетмы
Но плагины-то эта система поддерживает, раз она грузит твой плагин ?
Вот я и спрашиваю, нет ли в SDK документированныхспособов передать в плагин интересующую тебя инф-цию ..
KygECHuK (2008-08-27 10:26:00) [144]
> А что, подсистема поддержки плагинов у этой самой "АИС"
> не позволяет передавать в плагины требуемую тебе инф-цию
> ?
У АИС нет такой подсисетмы - плагин для Системы теирования.
И большая часть жалоб и замечаний именно на отображении данных в интерфейсе, а у нашей "чудо - системы" эти значения могут отличаться от расчитанных или принятых... так что следующим этапом и будет сравнение таких между различнымы способами их вывода. Собственно говоря вот и понадобился таковой плагин.
Сергей М. (2008-08-27 10:14:00) [145]А что, подсистема поддержки плагинов у этой самой "АИС" не позволяет передавать в плагины требуемую тебе инф-цию ?
KygECHuK (2008-08-27 10:03:00) [146]
> А что, собственно, ты тестируешь-то ?
АИС
> Цель какая ?
найти всемозможный ошибки расчётов, вывода инвормации и передачи данных... то есть регресивное тестирование каждой новой версии продукта.
Данный плагин необходим для сбора текстовой информации из элементов управления не просходящих от TWinControl
Сергей М. (2008-08-27 09:46:00) [147]А что, собственно, ты тестируешь-то ? Цель какая ?
KygECHuK (2008-08-27 09:39:00) [148]
> Почем мне знать зачем оно тебе надо ?)
Действительно....
Надёжней будет приостонавливать все потоки кроме, того что восстанавливает адреса.
Ну а если мне потребуется взять основной поток, то я просто использую GetWindowThreadProcessId от требуемого окна, ибо Delphi и VCL
Вас интересует что я имею под понятием "основной поток"? Ну наверно тот поток в котором изначально инициализирован обработчик сообщений.
Сергей М. (2008-08-27 08:17:00) [149]
> зачем мне определять ID ОСНОВНОГО треда текущего процесса?
Почем мне знать зачем оно тебе надо ?)
Цитирую тебя:
> функция используется в основномпотоке
> синхронизировать с основнымпотоком
Раз ты этим озаботился, значит ты все же как-то определяешь, что такой-то поток является именно основным, а не дополнительным ?
Вот я и спрашиваю как ты это делаешь)
KygECHuK (2008-08-26 23:47:00) [150]
> Рассказывай как ты получил ID ОСНОВНОГО треда текущего процесса
* Чё то мне совсем сыкотно
а зачем мне определять ID ОСНОВНОГО треда текущего процесса? Или в этом есть принципиальный момент?
Сергей М. (2008-08-26 22:58:00) [151]
> Предчуствие неладного
Уже радует ..
Рассказывай как ты получил ID ОСНОВНОГО треда текущего процесса
KygECHuK (2008-08-26 22:41:00) [152]
> Ну вот получил ты Id тек.треда.Рассказывай про твои дальнейшие
> действия ..
* Предчуствие неладного
Беру текущий процесс и перечисляю все его потоки и сравниваю их Id c id текущего потока при помощи Toolhelp32...
Сергей М. (2008-08-26 20:24:00) [153]
> предполагаю стоит вызвать GetCurrentThreadId внутри потока
> а по Id уже ориентироваться далее
Ну вот получил ты Id тек.треда.
Рассказывай про твои дальнейшие действия ..
KygECHuK (2008-08-26 17:32:00) [154]
> Любопытно, а как ты определяешь, в каком потоке загружается/выгружается
> твой плагин-модуль ?Подозреваю, что логика твоя в этой части
> неверна ..
Я пока ничего не брался определять, только советуюсь как поступить дальше
с подомным исключением.
Но предполагаю стоит вызвать GetCurrentThreadId внутри потока а по Id уже ориентироваться далее.
Rouse_ (2008-08-26 17:31:00) [155]
> а как ты определяешь, в каком потоке загружается/выгружается
> твой плагин-модуль ?
Дык эта... тормозим все что не GetCurrentThreadId в нашем процессе и всего делов :)
Сергей М. (2008-08-26 17:24:00) [156]Любопытно, а как ты определяешь, в каком потоке загружается/выгружается твой плагин-модуль ?
Подозреваю, что логика твоя в этой части неверна ..
Сергей М. (2008-08-26 17:21:00) [157]
> как тогда система реагирует на suspend
Система просто перестает выделять потоку кванты процессорного времени.
Соответственно ни одна машинструкция им не выполняется.
> что будет если такой поток востановить. он что будет переинициализован?
Нет, не будет.
Упрощенно говоря, система продолжит квантование потока. Поток возобновит выполнение машинструкций начиная с инструкции, следующей за той которая была исполнена поледней на момент предшествующей его приостановки системой.
Если приложение дельфийское и для реализации GUI-интерфейса оно использует исключительно VCL-формы/контролы, можно практически со 100%-й уверенностью утверждать, что вызовы ф-ции TextOut осуществляются в основном потоке.
Крайне маловероятно, что какому-то идиоту взбредет в голову месить в одном проекте VCL-формы/контролы и создание/работа с окнами/контролами непосредственно через WinAPI)
Впрочем, этот довольно легко выяснить.
KygECHuK (2008-08-26 17:10:00) [158]
> Приложение-то дельфийское ?
Да
KygECHuK (2008-08-26 17:09:00) [159]
> Разумеется не будут.
Что то я не понимаю...
А как тогда система реагирует на suspend
и что будет если такой поток востановить. он что будет переинициализован?
ЗЫ
дико извиняюсь за свою некомпетентность в этой области
Сергей М. (2008-08-26 17:05:00) [160]Приложение-то дельфийское ?