Как лучше организовать каркас?

Тема в разделе "WASM.WIN32", создана пользователем Keith, 24 фев 2005.

  1. Keith

    Keith New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2005
    Сообщения:
    13
    задача:

    Нужно, чтобы некоторые процессы создавались с перехватом некоторых API-функций, а некотрые как обычно. При этом, если нажата определенная комбинация клавиш, то в активном процессе(тот у кого в данный момент окно активно) состояние перехвата API менялось бы на противоположное, т.е. если в момент нажатия клавишь перехват осуществлялся, то отменить его, иначе — начать.



    Вот, что я придумал:

    Составить таблицу(храниться в файле, загружается в память при загрузке my_prog.exe):

    prog1.exe +

    prog2.exe +

    prog3.exe +

    prog4.exe -

    prog5.exe -

    prog6.exe -



    1. Запускаем my_prog.exe при старте Windows. Он сразу же вешает хук на все процессы и перехватывает(меняя таблицу импорта) у них СreateProcess(). Так же он ловит нажатие определенной комбинации клавиш(глобальный хоткей).

    2. При создании кем-либо процесса входящего в мою таблицу и отмеченного "+", вызываем CreateProcess() с флагом CREATE_SUSPENDED, после чего передаем в my_prog.exe идентификатор первичного потока создаваемового процесса. Внутри my_prog.exe мы вешаем на него хук(и исправляем таблицу импорта для нужных API функций), после чего вызываем ResumeThread().

    3. Если нажата определенная комбинация клавиш(тот самый глобальный хоткей) и текущее активное окно десктопа является окном процесса, находящегося в моей таблице, то: если перехват API функций в этом процессе производится, то прекращаем его, иначе — начинаем перехват.



    Фу. Надеюсь понятно объяснил. Я сам сильно начинающий и многого не понимаю, так что если мой вариант решения поставленной задачи глуп и нелогичен, то с огромным удовольствием выслушаю ваши наброски и идеи. Если же мой вариант вполне удовлетворителен и не должен вызывать особых проблем в реализации, то хотелось бы узнать следующее:

    а) как лучше передавать идентификатор процесса отмеченного "+" в my_prog.exe? (это нужно для того, чтобы только моя программа контролировала время жизни хуков)

    б) как узнать имеет ли поток(threadId) окно? Может быть можно перебирать все окна в системе, и узнавать их threadId?



    зы Нужно, чтобы всё работало в Win9x/2000/XP.