Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2011, 12:33   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
вообщем я попробовал-значение это в глобальной переменной сохраняться не захотело, соответственно и хук не ставится без этого значения
так как длл загрузится в другой процесс, то оно и не должно изменится
ну и зачем вам этот hInstanse? GetModuleHandle(0) вернет хендл длл(будучи выполнена внутри ДЛЛ).
Цитата:
функа _SetHook была компилем нафига-то переименована в _Z8_SetHookv.
обычное именование функций(как то это отключается, но как в gcc, не знаю)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.01.2011, 13:40   #12
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

GetModuleHandle(0);
будучи вызвана в любом модуле вернет хендл основного модуля
можно канечн поступить так в данной программе
GetModuleHandle("dllname.dll");
что бесспорно выполниться быстрее и будет выглядеть лучше, чем в дллмайн:
global_hInstance=hInstance;
зачем его находить, если оно и так приходит?

знаете, а вообще можно даже и так сделать же(где-то внутри длл же):
Код:
call $+5
pop eax
@@:
	dec eax
	xor al,al
	cmp word ptr[eax],'ZM'	
jnz @b
;тут в еах - дескриптор (база) модуля в котором мы находились!!
;тут главное чтобэ с выравниванием в 100h денить не написать из уныния и отчаяния в коде длл что-то подобное
;"MZFAKA" - это может подпоритить нам весь поиск и вумники рекомендуют добавлять есчо и поиск PE сигнатуры..
;ну вы понели:)
>>так как длл загрузится в другой процесс, то оно и не должно изменится
а что если база длл, по которой она должна загрузиться в процесс будет уже занята другим модулем в этом процессе? это вполне может быть. база у длл (не системных канешн) еще как меняется так что hInstance ни разу не константа.

а вообще, да вот так сделать вполне можно и все заработает:
hHOOK = SetWindowsHookEx(WH_KEYBOARD,(HOOKP ROC)KeyboardProc,GetModuleHandle("d llhook.dll"),0); // имя длл в данном случае должно быть dllhook.dll

но все равно я люто бешенно плююсь и могу создать целую Дорогу Из Желтого Кирпича
Нет, ну правда..

Последний раз редактировалось yuran666666; 25.01.2011 в 13:46.
yuran666666 вне форума Ответить с цитированием
Старый 25.01.2011, 13:51   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
а что если база длл, по которой она должна загрузиться в процесс будет уже занята другим модулем в этом процессе?
релокация, что замедлит загрузку.
Цитата:
будучи вызвана в любом модуле вернет хендл основного модуля
давно не пользовался, забыл чтото...

стоп, а почему сама ДЛЛ должна ставить хук?
пусть управляющая программа ставит хук(там она будет знать и хендл ДЛЛ)
а длл лишь обрабатывает его.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.01.2011, 14:03   #14
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Цитата:
Пепел Феникса;720193]релокация, что замедлит загрузку.
ну я канешн тож догадывался, что бсод не произойдет :-D

Цитата:
стоп, а почему сама ДЛЛ должна ставить хук?
пусть управляющая программа ставит хук(там она будет знать и хендл ДЛЛ)
а длл лишь обрабатывает его.
ну кодес то и выполняется в управляющей программе, просто экспортирует его длл и управляющей программе надо тогда будет искать адрес функции на которую будет передано управление при хуке, а эту функцию кстати можно и не экспортировать из длл, а находиться в длл она разумеется обязана. улавливаете?
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SetWindowsHookEx не могу перехватить нажатие клавиши. flug Общие вопросы Delphi 0 10.12.2010 09:19
Получить ID процесса для setwindowshookex TwiX Общие вопросы Delphi 2 20.05.2010 20:00