|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 24, 2004 09:34:39 с названием темы надеюсь не перемудрил вот размышляю каким образом можно сделать следующие когда в одном процессе начинается выполнятся определённый участок кода процесс тормозится пока из него например по определённому адресу не получат значение или ещё как нибудь смысл в том чтоб второй процесс подал сигнал первому когда он закончил.... можно конечно попробовать сделать хитро послать через сенд месейдж окну второго процесса ид текущего трида и засуспендить её.. далее когда второй процесс сделает свои дела он зарезюмит данную нитку... может есть какие нибудь более красивые варианты?.. да и чтоб второй процесс знал что код в данной точке в первом случаи это через чендмесейдж как раз бы и было |
|
|
Дата: Сен 24, 2004 11:56:39 Прочитал... и ничего не понял. Если требуется осуществить синхронизацию процессов, то для этого обычно используют объекты синхронизации. Например, именованные объекты события (CreateEvent,OpenEvent). И функции ожидания, типа WaitForSingleObject. Если требуется передавать данные между двумя процессами для этого есть методы межпроцессного взаимодействия, например, именованные пайпы, маилслоты, отображаемые в память файлы. На худой конец можно использовать разделяемую секцию данных в общей DLL'ке, или WM_COPYDATA. |
|
|
Дата: Сен 24, 2004 13:01:41 Мда красноречием я н еблещу.. задача после того как процес дойдёт до адреса xxxxxxx он останавливается и продолжится только тогда когда второй процесс сделает все свои вмешательства Задачи: а)Сообщить второму процессу что проишла оставновка б)Тормознуть процесс в)Запустить его обратно из второго процесса я подумывал сделатать так послать сообщение окну второго процесса с ИД текущего трида и после посыла засуспендить этот трид далее после своих дел второй процесс имея трид который получил от первого процесса просто его рассуспендит и всё... |
|
|
Дата: Сен 24, 2004 14:14:19 · Поправил: Funbit первое что пришло в голову: во втором процессе сразу создать объект Event2 и сделать thread, в котором будет WaitForSingleObject. т.е. второй процесс ждет. в первом процессе, когда нужно будет сообщить второму о том, что тот может начинать производить какие-то действия, создать Event1, сделать SetEvent Event2 и тут же сделать WaitForSingleObject Event1. второй процесс рассуспендится ( :) ) сделает работу и в конце сделает SetEvent Event1. тред закончить свою работу (ret сделает) ну а первый процесс продолжит работу. вообще у рихтера про синхронизацию все есть, почитай |
|
|
Дата: Сен 24, 2004 14:47:15 Угу спасибо... примено так и нуна сделать |
|
|
Дата: Сен 24, 2004 14:48:53 · Поправил: Fallout плохой конект был ... задублилось месага |
|
|
Дата: Окт 12, 2004 09:24:19 Тэкс нашёл время чтоб всё сделать +) вообщем сделал евент внедрил код в ехе на вызов функции вызываю свой... типа Call Orig_Exe_Func стало Call My_Stub так теперь тот код что я генерю в своей программке и каким патчу код.... push eax push event call SetEvent pop eax call Orig_Exe_Func ret в моей программе .. WaitForSingleObject(event, -1); printf("Cool\n"); так вот SetEvent возвращает 0!... мм странно хендл от созданного евента разве не глобален?.. и что доступен только в контексте процесса в котором был создан?... когда создал я евент получил хенддл именно его и прописываю в код... другого процесса... из моего процесса всё ок а вот другой процесс не сигналит... |
|
|
Дата: Окт 12, 2004 09:53:17 в зависимости от задачи есть event - просто событие (включено или выключено) mutex - открывается как файл, пока один держит - все остальные ждут. semaphor - тоже самое, но на определенное количество подключений (например, не более 3х) |
|
|
Дата: Окт 12, 2004 10:00:39 когда создал я евент получил хенддл именно его и прописываю в код... другого процесса... из моего процесса всё ок а вот другой процесс не сигналит... э! нужно в другом процессе его заново открыть, или это дочерний процесс должен быть создан с наследованием хэндлов |
|
|
Дата: Окт 12, 2004 10:14:25 мне ща бежать надо - вот мои прим на дельфях |
|
|
Дата: Окт 12, 2004 10:18:45 не прилепило :( |
|
|
Дата: Окт 12, 2004 10:20:29 |
|
|
Дата: Окт 12, 2004 12:44:01 Мм заново открывать?... ок спасибо теперь всё ястно .... хотя и не очень удобно мне бы что нибудь очень унивирсальное и миниатюрное но спасибо за помощь.... процесс вообще чужой +) но не важно это так.. |
|
|
Дата: Окт 12, 2004 13:03:16 Если кому интерестно то очень удобное место для записи в рантайм вашего кода... можно смело затереть стартовый код по адресу который можно взять из ПЕ структуры EntryPoint +) .... в Си++ а может и ещё каких компилятора... там стартовый код есть который больше обычно не нужен так что смело можно затирать и адрес всегда будете знать этого места +) |
|
|
Дата: Окт 12, 2004 13:09:07 если это не системный процесс, а просто приложение - запусти его из своей проги через CreateProcess с наследованием хэндлов |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075 |