hook Gdi32.dll своего проесса возможен ли?
От: nemoys  
Дата: 10.10.10 17:10
Оценка:
привет
нужно сделать хук пары функция из двух dll
dll в адресном пространстве моего процесса
можно ли такое реализовать в принципе или нет
читаю
-----------------
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.
-------------------------
только вот непонятно глобальный мой хук или нет?

если есть у кого пример хука — прошу поделиться
хук не для мышки или клавиатуры и не использует SetWindowsHookEx

код на дельфи юзает WriteProcessMemory чтобы изменить адрес перехода на мою функцию
возможно ли это реализовать на для своего процесса net?
Re: hook Gdi32.dll своего проесса возможен ли?
От: Pavel Dvorkin Россия  
Дата: 10.10.10 17:20
Оценка:
Здравствуйте, nemoys, Вы писали:

N>привет

N>нужно сделать хук пары функция из двух dll
N>dll в адресном пространстве моего процесса
N>можно ли такое реализовать в принципе или нет

Можно. Тебе не хук нужен, а перехват API функции. Поищи в форуме по Win32, там это многократно обсуждалось.

N>только вот непонятно глобальный мой хук или нет?


Глобальный хук ставится для системы в целом, локальный — для потока. Ни то, ни другое тебе не надо.

N>код на дельфи юзает WriteProcessMemory чтобы изменить адрес перехода на мою функцию


И это тоже лишнее, если все в твоем процессе. Можно обычное копирование сделать, естественно, неуправляемое (memcpy из C)

N>возможно ли это реализовать на для своего процесса net?


В принципе да, но большей частью будешь писать unsafe код.
With best regards
Pavel Dvorkin
Re[2]: hook Gdi32.dll своего проесса возможен ли?
От: nemoys  
Дата: 10.10.10 17:46
Оценка:
PD>Можно. Тебе не хук нужен, а перехват API функции. Поищи в форуме по Win32, там это многократно обсуждалось.

так у меня и есть код для win 32
вот пробую перенести на net и думаю а возможно ли

N>>код на дельфи юзает WriteProcessMemory чтобы изменить адрес перехода на мою функцию

PD>И это тоже лишнее, если все в твоем процессе. Можно обычное копирование сделать, естественно, неуправляемое (memcpy из C)


а можно все же пример именно на NET
любой — просто поиск на паре форумов ничего не дал — искал по hook api
Re[3]: hook Gdi32.dll своего проесса возможен ли?
От: Pavel Dvorkin Россия  
Дата: 10.10.10 17:56
Оценка: 1 (1)
Здравствуйте, nemoys, Вы писали:

PD>>Можно. Тебе не хук нужен, а перехват API функции. Поищи в форуме по Win32, там это многократно обсуждалось.


N>так у меня и есть код для win 32

N>вот пробую перенести на net и думаю а возможно ли

Сделать так, чтобы перехватчик представлял собой метод управляемого кода — не получится. Там можно только неуправляемый код использовать. Но есть MC++ — в нем можно смешивать управляемый и неуправляемый код. Я такое делать не пробовал, но ИМХО должно получиться. Еще проще (это мне проще!) — написать неуправляемую DLL на C (лучше именно на С, а не С++), в ней некий метод, который этот перехват сделает, его экспортировать и по PInvoke вызвать. Если С++ знаешь, то это самое простое решение — берешь свой существующий код и делаешь из него DLL. В общем, принципиальных проблем тут нет, но повозиться придется.

N>а можно все же пример именно на NET


Увы, нет у меня его.

N>любой — просто поиск на паре форумов ничего не дал — искал по hook api


Еще раз — хуки здесь не нужны. Кстати, hook api — такого термина тоже нет, какой там уж api, когда всего 2 функции
With best regards
Pavel Dvorkin
Re[4]: hook Gdi32.dll своего проесса возможен ли?
От: nemoys  
Дата: 10.10.10 18:01
Оценка:
PD>Сделать так, чтобы перехватчик представлял собой метод управляемого кода — не получится. Там можно только неуправляемый код использовать. Но есть MC++ — в нем можно смешивать управляемый и неуправляемый код. Я такое делать не пробовал, но ИМХО должно получиться. Еще проще (это мне проще!) — написать неуправляемую DLL на C (лучше именно на С, а не С++), в ней некий метод, который этот перехват сделает, его экспортировать и по PInvoke вызвать. Если С++ знаешь, то это самое простое решение — берешь свой существующий код и делаешь из него DLL. В общем, принципиальных проблем тут нет, но повозиться придется.
когда всего 2 функции


у меня есть библа написанная на дельфи которая весь функционала делает
попробывал прикрутить к своей проги — ругается что не COM и не OCX
вот и решил переписать на нет
я так понимаю надо пересобрать библу как то чтобы ее видел NET?
Re[5]: hook Gdi32.dll своего проесса возможен ли?
От: nemoys  
Дата: 10.10.10 19:21
Оценка:
так — функцию подрубил — вроде вызываем
теперь передать параметры
procedure xxx(a1, a2, a3: Integer; const data: PChar); stdcall;

как передать строку = пробывал при декларации указать что передаю строку не работает
не ругается но и не работает


<DllImport("d:\aaa.dll")> _
Sub xxx(ByVal w As Integer, ByVal h As Integer, ByVal col As Integer, ByVal sa As String)

End Sub
Re[6]: hook Gdi32.dll своего проесса возможен ли?
От: Аноним  
Дата: 10.10.10 21:17
Оценка:
посмотри тут как он сделал (очень оригинально) ,можт понравитса ,,можт поможет
http://easyhook.codeplex.com
Re[5]: hook Gdi32.dll своего проесса возможен ли?
От: Pavel Dvorkin Россия  
Дата: 11.10.10 03:50
Оценка:
Здравствуйте, nemoys, Вы писали:


N> у меня есть библа написанная на дельфи которая весь функционала делает

N>попробывал прикрутить к своей проги — ругается что не COM и не OCX
N>вот и решил переписать на нет
N>я так понимаю надо пересобрать библу как то чтобы ее видел NET?

Надо сделать DLL и загрузит ее по PInvoke. Как делать DLL — это в Win32, а по PInvoke тут много написано.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.