![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
внедрение Dll и Open/SaveDialog [D5, Win2k]
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]
> Сергей М.
в том-то и была беда что немалой проге перестали работать ТОЛЬКО диалоги открытия-закрытия ........
прога запускалась нормально, нормально работала ..... хотя чего я объясняю вода это. да и устал я уже тебе.
короче тема закрыта.