2013-10-09 3 views
3

В Windows, все дисковые операции ввода/вывода в конечном итоге происходит с помощью Win32 API вызовов, как CreateFile, SetFilePointer и т.д.для Windows: Как перехватить Win32 диск I/O API

Теперь возможно перехватить эти дисковый ввод/вывод Win32 вызывает и подключается к вашему собственному коду во время выполнения для всех динамически связанных приложений Windows? То есть приложения, которые получают свою функциональность CreateFile через библиотеку Windows вместо статической библиотеки C.

Некоторые ограничений, что у меня есть следующие:

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

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

  3. Условная делегация и наиважнейший: На моем крючке коде, я хотел бы быть в состоянии решить, следует ли делегировать оригинальную функциональность API Win32, или использовать свою собственную функциональность, или оба. (Так же, как дополнительный вызов метода суперкласса в наиважнейшей метода подкласса в C++ или Java.)

  4. Regular в пользовательском пространстве код: Я хочу быть в состоянии выполнить выше без необходимости писать любой драйвер устройства, в основном из-за сложности, связанной с написанием одного.

Если возможно, я буду благодарен некоторым указателям. Исходный код не нужен, но всегда приветствуется!

+1

Вы смотрели Detours? http://research.microsoft.com/en-us/projects/detours/ – manuell

+0

Это коммерческий. Я хочу бесплатный, и я готов написать его сам, когда узнаю, что такое основные API и участники концепции. – Harry

+1

Возможно, вы захотите изучить mhook, если Detours - это не то, что вы хотите. – easuter

ответ

1

Возможно, вы захотите изучить mhook, если Detours - это не то, что вы хотите.

Вот несколько проблем, вы можете столкнуться при работе с крючками:

0

Предлагаю начать с Microsoft Detours. Это бесплатная версия также существует и ее довольно мощный стабильный, а также. Для инъекций вам нужно будет найти, какой метод инъекции будет работать для ваших приложений в цель. Не уверен, нужно ли вам самостоятельно их кодировать, но простой инструмент, такой как «Extreme Injector», послужит вам для тестирования ваших подходов. И вам определенно не нужны никакие драйверы ядра для разработки такой простой задачи, по крайней мере, по моему мнению. Чтобы получить полную помощь от меня и других людей, я хотел бы сначала взглянуть на ваш подход или указать больше ограничений на проблему или когда вы начали работу, но были проблемы. Это сужает много chit-чатов и может сэкономить ваше время.

Теперь, если вы не знакомы с Detours от Microsoft (MSFT), пожалуйста, используйте его по следующей ссылке: http://research.microsoft.com/en-us/projects/detours/ после ее загрузки. Вы должны скомпилировать его самостоятельно. Это очень просто, и у него есть скомпилированный файл справки HTML и образцы. Пока ваши профили попадают под IAT (Import Address Table) и EAT (Export Address Table Table).

Надеюсь, этот ответ без фрагмента поможет вам немного подходить к решению, и если вы застрянете, вернитесь снова и спросите. Удачи!

Смежные вопросы