Как хукнуть Windows Explorer?

Тема в разделе "WASM.WIN32", создана пользователем dema, 29 сен 2004.

  1. dema

    dema New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2004
    Сообщения:
    5
    В Windows Explorer мне нужно модифицировать правую панельку(Detailed View) для директориев и файлов.

    Нужно разделить ее на две части : сверху показать обычный Detailed View а под ним другую панельку где бы показывалась дополнительная информация о выбранном файле или директории. Я сначала попробовал повозиться с Shell Extensions - кажется симпатичная штуковина - но она позволяет делать такие вещи для NameSpace Extensions, с обычными дирекориями вроде тоже можно-но если вы пометили ее как Web View и далее менять *.htt файлы. Мне это не подходит...



    Поэтому я сейчас копаю - как бы хукнуть ехплорер. Что накопал:

    1)Explorer.exe - это процесс который загружается с загрузкой ОС.

    2)Windows Explorer это ветви от Explorer.exe.



    Что я надумал:

    Загрузить в пространство Explorer.exe мою библиотеку, которая должна содержать код для моего Detailed View. + Она должна установить ловушку, чтобы перед тем как Windows Explorer создает свое Detailed View(а делает он это каждый раз когда меняется выбранная директория в левой панеле) - подпихнуть ему мое.



    С помощью CreateRemoteThread и LoadLibrary я загрузил библиотеку. Далее возникают проблемы:

    1)Попробовал в DllMain поставить ловушку: SetWindowsHookEx(WH_SHELL, (HOOKPROC)ShellProc, (HINSTANCE)hDLL, 0) и сразу проблема - вроде как работает но только если breakpoint в DllMain поставить а если нет то хук ставится а моя ShellProc не вызывается.

    2)В принципе как мне кажется в последнем параметре к SetWindowsHookEx лучше бы указать threadID.

    Поэтому я решил перехватить вызов CreateThread - если Windows Explorer это ветви от Explorer.exe.... На вооружение взял http://www.codeproject.com/dll/apihijack.asp. Опять же сделал подмену Kernel32.dll::CreateThread на мою собственную-все это сделал из DllMain библиотеки которую я подгрузил в адресное пространство Explorer.exe. Вроде все прошло нормально но тока моя CreateThread не вызывается.



    Что я делаю не правильно? Может вообще все это надо делать по другому?
     
  2. VOOrDOOluck

    VOOrDOOluck New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2004
    Сообщения:
    51
    Адрес:
    Ukraine
    Я делал хуки с вызовом CreateRemoteThread из DllMain и все работало.хук реализовывал через внедрение в процес и загрузки длл.сам хук функций с помощью примера из книги рихтера.

    Лично мне хук через SetWindowsHookEx со временем стал очень сильно не нравится,поэтому я им не пользуюсь.С ним правда есть некоторые плюсы но все можно обойти.

    Смотри примеры рихтера.У него там рассматривается установка хуков через SetWindowsHookEx и способ внедрения в другие процесы.