![]() |
|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]()
|
|
| jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? Репутация: нет Всего: 8 |
Писал программку, которая перехватывает выполнение Dll функций на себя. Для перехвата требуется HINSTANCE процесса, само собой получить его внутри самой-же программы несложно, а вот как получить HINSTANCE другого приложения? Пробовал использовать GetWindowLong но она вроде возвращает только HINSTANCE окна, так что...
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Может я чего-то не так понял, но обычно для перехвата нужен HINSTANCE твоей dll.
Для чего тебе может потребоваться HINSTANCE чужого процесса - не представляю... |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Не существует такой вещи как HINSTANCE процесса. У процесса есть ID (PID) и опционально - несколько открытых описателей (Handle).
HINSTANCE - это описатель исполняемого модуля. Коих в одном процессе загружено несколько. Как минимум - .exe и kernel32. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? Репутация: нет Всего: 8 |
Хмм незнал.. Вот мне надо перехватывать обращение к одной из функций библиотеки BASS. Какой для этого надо HINSTANCE пихать? И где его взять?
|
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
Странный вопрос.
"Мне надо повесить картину - какую брать табуретку?" Какая связь между A и Б? Может она есть, а может и нет. Как вы собираетесь ставить ловушку? И, главное, зачем вообще надо ставить ловушку на BASS? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| jhonyxakep |
|
||||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? Репутация: нет Всего: 8 |
Находил в тырьнете юнит небольшой... А может и большой, вообщем вот:
Особо не разбирался что тут. Функция InterceptDllCall позволяет ставить что-то типа хука на это дело. Вот я и пытался начать хотябы с мессадж бокса
Если передавать первым параметром hInstance своего приложения, то у меня успешно вызывается функция MyMessageBox, иначе вообще глухо. Хочу расширить возможности одного приложения. |
||||
|
|||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Конкретно эта функция хочет HMODULE дллки в твоём процессе.
То есть давай ей результат вызова LoadLibrary/GetModuleHandle -------------------- Обижено школьников: 8 |
|||
|
||||
| jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? Репутация: нет Всего: 8 |
Ээм, но мне надо перехватывать все это дело из другого процесса...
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
Эта функция действует сугубо в текущем процессе. Если нужно в чужом, ты можешь инжектить туда длл и вызывать функу уже в контексте чужого процесса
-------------------- Обижено школьников: 8 |
|||
|
||||
| jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? Репутация: нет Всего: 8 |
Дауж, не самый приятный путь. Ладно, буду пробовать. Есть ссылочки на РТФМ по этой теме?
|
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
| jhonyxakep |
|
|||
![]() Divide Et Impera ![]() ![]() Профиль Группа: Участник Сообщений: 983 Регистрация: 7.4.2009 Где: Что, Когда? Репутация: нет Всего: 8 |
Всетаки под ссылками я имел в виду полноценные мануалы
|
|||
|
||||
| CodeMonkey |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
function InterceptDllCall(
hLocalModule:HModule; // <- функции в каком модуле хучить. Если exe - то MainInstance или GetModuleHandle(nil). Если это DLL, то GetModuleHandle('MyDll.dll') c_szDllName:Pchar; // <- функцию какой DLL хучить c_szApiName:PChar; // <- какую функцию хучить pApiNew:Pointer; // <- указатель на перехватчик p_pApiOrg:PPointer; // <- указатель на процедурный тип - тут вернут указатель на оригинальную функцию pApiToChange:Pointer) // <- можно ставить nil :Boolean; //<- True - OK, False - Fail Обратите внимание, тут не указывается идентификатор процесса, т.е. функция работает в текущем процессе.
Как съесть слона - по частям.
Мат-часть. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
||||
|
|||||
![]()
|
| Правила форума "Delphi: WinAPI и системное программирование" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |