Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

внедрение Dll и Open/SaveDialog [D5, Win2k]


Страницы:   1 2 3

lu0 ©   (2006-09-07 10:09:00) 

Проблема с вызовом Open/SaveDialog.
Ситуация такая:
- родительская программа запускает другую в suspended режиме и внедряет в неё dll.
выглядит внедрение так:


function Hoook(DLL:String):Boolean;
var
 Memory,LoadL:Pointer;
 hThread,TID:THANDLE;
 DLLSize,Written:dword;
begin
 Result:=False;
 try
   DLLSize:=Length(DLL)+2;
   Memory:=VirtualAllocEx(PROCESS.hProcess,Nil,DLLSize,MEM_COMMIT or MEM_RESERVE,PAGE_READWRITE);
   If Memory=Nil
   then Exit;
   If not WriteProcessMemory(PROCESS.hProcess,Memory,PChar(DLL),DLLSize,Written)
   then Exit;
   LoadL:=GetProcAddress(GetModuleHandle('Kernel32'),'LoadLibraryA');
   hThread:=CreateRemoteThread(PROCESS.hProcess,Nil,0,LoadL,Memory,0,TID);
   If hThread=0
   then Exit;
   WaitForSingleObject(hThread,INFINITE);
   Result:=True;


код практически один-в-один из примера Рихтера
после чего в вызываемой проге перестают работать диалоги Open/SaveDialog.

может кто скажет чего?


Сергей М.   (2006-09-12 09:53:00) [1]


> если хочете то выложу что получилось


Нет уж, увольте) ... не хоЧим) .. кушайте саме)


lu0   (2006-09-12 09:28:00) [2]

если хочете то выложу что получилось ..........


lu0   (2006-09-12 09:28:00) [3]


> Там не ответ, там извращение)

ну ...... не суть, искал я изначально что-то типа такого

но DebugApi рулит .... как раз из-за "очухаться" .....
всем спасибо


Сергей М.   (2006-09-12 09:09:00) [4]


> lu0 ©   (11.09.06 17:06) [47]
>
> http://forum.oszone.net/printthread-52078.html
>
> вот ответ на мой вопрос.
>


Там не ответ, там извращение)

Цитата оттуда:

ResumeThread(pInfo.hThread);                    // Размораживаем процесс
Sleep(300);                                                   // Даём ему немножко времени очухаться
SuspendThread(pInfo.hThread);                   // Снова замораживаем его


"немножко времени очухаться" - а если не успеет "очухаться" ?)


lu0   (2006-09-11 17:06:00) [5]

http://forum.oszone.net/printthread-52078.html

вот ответ на мой вопрос.

хотя сейчас я сделал всё на DebugApi :)


Ketmar   (2006-09-11 16:13:00) [6]

сорри за опечатки %-)


Ketmar   (2006-09-11 16:13:00) [7]

> [42] Сергей М. ©   (11.09.06 15:16)
да что там читать? сомтрим в отладчике, где вываливается первый бряк. понимаем, что это ливер системы. далье -- очевидно. %-)


Сергей М.   (2006-09-11 16:08:00) [8]


> штобы што-нибудь почитать надо знать что читать ...


Рихтера хотя бы почитай.


lu0   (2006-09-11 16:04:00) [9]


> А репа-то тебе своя на что ?)

шоб есть в неё :)
штобы што-нибудь почитать надо знать что читать ...


Сергей М.   (2006-09-11 15:16:00) [10]


> lu0 ©   (11.09.06 15:09) [40]


> вот написал бы это с самого начала .... цены бы не было


А репа-то тебе своя на что ?)
Взял бы да почитал хоть что-нть про то, что происходит в недрах сист.загрузчика)


Ketmar   (2006-09-11 15:11:00) [11]

> [39] Сергей М. ©   (11.09.06 14:26)
по пунктам, пожалуйста. также поясни, почему у меня Kassandra работает (которая именно debug api использует для внедрения и перехвата). я опять сделал что-то не так и забыл об этом винде рассказать? %-)


lu0   (2006-09-11 15:09:00) [12]


> Столь же очевидно должно быть то, что после старта процесса
> в suspended-режиме статический импорт еще не выполнен, в
> т.ч. не выполнен импорт commdlg32, отвечающего за работу
> упомянутых диалогов.
> Подозреваю что внедряемая тобой DLL тем или иным образом
> импортирует тот же модуль commdlg32. Поскольку твоя DLL
> грузится в доп.треде процесса-"жертвы", загрузка и инициализация
> commdlg32 при этом происходит том же самом доп.треде, хотя
> ризюмированный тобой после этого процесс-"жертва" на полном
>  праве считает, что commdlg32 загружен и инициализирован
> в осн.треде, со всеми вытекающими последствиями.
> В этом скорее всего и проблема.

эх, дядька-дядька .... вот написал бы это с самого начала .... цены бы не было !


Сергей М.   (2006-09-11 14:26:00) [13]


> я в свете своих рассуждений


Ты, извини уж, в тех самых "рассуждениях" такую чушь несешь, что ...) ..


Ketmar   (2006-09-11 14:23:00) [14]

> [37] Сергей М. ©   (11.09.06 14:03)
я в свете своих рассуждений о debug api. %-)


Сергей М.   (2006-09-11 14:03:00) [15]


> Ketmar ©   (11.09.06 13:23) [36]


> я, например, трассирую до EP


Чего ты трассируешь-то ?)
Нечего еще трассировать)


Ketmar   (2006-09-11 13:23:00) [16]

> [35] Сергей М. ©   (11.09.06 12:16)
о чём я и писал выше. я, например, трассирую до EP, а только тогда внедряюсь %-)


Сергей М.   (2006-09-11 12:16:00) [17]


> lu0 ©   (11.09.06 09:33) [34]


> resume - это ОЧЕВИДНО


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


lu0   (2006-09-11 09:33:00) [18]


> Ты видать с дуба упал)
>
> Как вообще "прога" могла "работать", если ты не выполнил
> resume при условии что стартовал ты ее как suspended ?)


no comments ...............................

мож тебе весь код проекта сюда запостить ??? ну так, чтобы ты лучше разобрался ???
resume - это ОЧЕВИДНО !!!


Сергей М.   (2006-09-08 15:13:00) [19]


> lu0 ©   (08.09.06 14:59) [32]


Ты видать с дуба упал)

Как вообще"прога" могла "работать", если ты не выполнил resume при условии что стартовал ты ее как suspended ?)

О каких вообще "диалогах" может идти речь, если единственный трэд suspended-стартованного тобой процесса не квантуется, пока ты не выполнишь для него resume ?) ... Трэд-то стоит) ... Он не то что "диалоги"  - он вообще ничего не делает) ... Он "спит")


lu0   (2006-09-08 14:59:00) [20]


> Сергей М.

в том-то и была беда что немалой проге перестали работать ТОЛЬКО диалоги открытия-закрытия ........
прога запускалась нормально, нормально работала ..... хотя чего я объясняю вода это. да и устал я уже тебе.

короче тема закрыта.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо