с названием темы надеюсь не перемудрил вот размышляю каким образом можно сделать следующие когда в одном процессе начинается выполнятся определённый участок кода процесс тормозится пока из него например по определённому адресу не получат значение или ещё как нибудь смысл в том чтоб второй процесс подал сигнал первому когда он закончил.... можно конечно попробовать сделать хитро послать через сенд месейдж окну второго процесса ид текущего трида и засуспендить её.. далее когда второй процесс сделает свои дела он зарезюмит данную нитку... может есть какие нибудь более красивые варианты?.. да и чтоб второй процесс знал что код в данной точке в первом случаи это через чендмесейдж как раз бы и было
Прочитал... и ничего не понял. Если требуется осуществить синхронизацию процессов, то для этого обычно используют объекты синхронизации. Например, именованные объекты события (CreateEvent,OpenEvent). И функции ожидания, типа WaitForSingleObject. Если требуется передавать данные между двумя процессами для этого есть методы межпроцессного взаимодействия, например, именованные пайпы, маилслоты, отображаемые в память файлы. На худой конец можно использовать разделяемую секцию данных в общей DLL'ке, или WM_COPYDATA.
Мда красноречием я н лицоещу.. задача после того как процес дойдёт до адреса xxxxxxx он останавливается и продолжится только тогда когда второй процесс сделает все свои вмешательства Задачи: а)Сообщить второму процессу что проишла оставновка б)Тормознуть процесс в)Запустить его обратно из второго процесса я подумывал сделатать так послать сообщение окну второго процесса с ИД текущего трида и после посыла засуспендить этот трид далее после своих дел второй процесс имея трид который получил от первого процесса просто его рассуспендит и всё...
первое что пришло в голову: во втором процессе сразу создать объект Event2 и сделать thread, в котором будет WaitForSingleObject. т.е. второй процесс ждет. в первом процессе, когда нужно будет сообщить второму о том, что тот может начинать производить какие-то действия, создать Event1, сделать SetEvent Event2 и тут же сделать WaitForSingleObject Event1. второй процесс рассуспендится ( ) сделает работу и в конце сделает SetEvent Event1. тред закончить свою работу (ret сделает) ну а первый процесс продолжит работу. вообще у рихтера про синхронизацию все есть, почитай
Тэкс нашёл время чтоб всё сделать +) вообщем сделал евент внедрил код в ехе на вызов функции вызываю свой... типа 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!... мм странно хендл от созданного евента разве не глобален?.. и что доступен только в контексте процесса в котором был создан?... когда создал я евент получил хенддл именно его и прописываю в код... другого процесса... из моего процесса всё ок а вот другой процесс не сигналит...
в зависимости от задачи есть event - просто событие (включено или выключено) mutex - открывается как файл, пока один держит - все остальные ждут. semaphor - тоже самое, но на определенное количество подключений (например, не более 3х)
э! нужно в другом процессе его заново открыть, или это дочерний процесс должен быть создан с наследованием хэндлов
Мм заново открывать?... ок спасибо теперь всё ястно .... хотя и не очень удобно мне бы что нибудь очень унивирсальное и миниатюрное но спасибо за помощь.... процесс вообще чужой +) но не важно это так..
Если кому интерестно то очень удобное место для записи в рантайм вашего кода... можно смело затереть стартовый код по адресу который можно взять из ПЕ структуры EntryPoint +) .... в Си++ а может и ещё каких компилятора... там стартовый код есть который больше обычно не нужен так что смело можно затирать и адрес всегда будете знать этого места +)
если это не системный процесс, а просто приложение - запусти его из своей проги через CreateProcess с наследованием хэндлов
Ну по поводу создания процесса с наследованием это немного не то процесс уже работает... я должен именно в рантайм все сделать... 2S_T_A_S_ - уже сделал... но хочу теперь без них...
Ещё возник вопросик можно кончено сделать семпл и проверить но млаоли не всегда будет срабатывать или ещё что смысл вот в чём... обойтись одним евентом... 1)создать евент который сам сбрасывается после функции WaitForSingleObject 2)Далее в чужом процесс открыть его получить хендл и тд ит .... ну и вот такой код сделать В чужом процессе SetEvent(MyEvent); WaitForSingleObject(MyEvent, -1); printf("Hello World"); В моём... WaitForSingleObject(MyEvent, -1); prontf("Back off"); вот интерестно что выведется ... то бишь будет выведена надпись "Back off" и евент сбросится и тогда вторая надпись не выведится .. либо будет выведена надпись "Hello World" евент сбросится и тоэе больше ничего не будет ... либо будет две надписи?