Информация об изменениях

Сообщение Re[3]: Перехвар api до вызова DLLMain от 29.09.2017 15:58

Изменено 29.09.2017 15:59 ononim

Re[3]: Перехвар api до вызова DLLMain
A>Решил я добавить поддержку плагинов от FAR. И добавил. И снова все чудесненько работает, включая эмуляцию FAR dialog api. Но есть один момент. Поскольку сам FAR и его плагины работают в консоли, то мне нужно перехватывать и эмулировать слой API, работающий с консолью. Я это сделал, но обнаружил, что отдельные плагины вызывают консольное API в DLLMain. Например, плагин NetBox, вызывает CreateFile('CONIN$') и сохраняет полученный хендл в своих закромах, который затем использует (в частности) при вызове Peek/ReadConsoleInput. Но поскольку в Проводнике консоли нет, то CreateFile возвращает INVALID_HANDLE_VALUE, и мне в перехваченную Peek/ReadConsoleInput также приходит INVALID_HANDLE_VALUE. Я в данный момент делаю так: если мне пришел INVALID_HANDLE_VALUE, то считаю, что это мой правильный хендл, и соответственно обрабатываю его. Но как то это не красиво. Вот и хочу попробовать перехватывать API не после LoadLibrary, а до вызова DLLMain.
Ну если "тот архивтаор" правда в отдельном процессе, то не проще ли дать ему консольку на руки при помощи AllocConsole? Ее кстати даже не обязательно отображать..
Re[3]: Перехвар api до вызова DLLMain
A>но обнаружил, что отдельные плагины вызывают консольное API в DLLMain.
Ну если "тот архивтаор" правда в отдельном процессе, то не проще ли дать ему консольку на руки при помощи AllocConsole? Ее кстати даже не обязательно делать видимой, можно спрятать ее окно или ваще запускать процесс на неинтерактивном десктопе, а если хочется значть что он там такое рисует — периодически вычитывать содержимое консольки ReadConsoleOutput()-ом