Загрузите explorer.exe для загрузки моего расширения при запуске

Контекст для предотвращения XY Проблема: (Потому что там вполне может быть более простое решение)

Моя цель — отслеживать explorer.exeПеремещение файлов, когда пользователь перетаскивает файлы (а также использует вырезку из буфера обмена и копирование). Я пытался решить эту проблему с помощью расширения Windows Shell, однако интерфейсы, которые я реализовал, никогда не срабатывали. Я последовал за этот руководство от CodeProject, которое работало красиво. Тем не менее, когда я реализовал IFileOperation интерфейс, ни одна из моих функций никогда не вызывалась explorer.exe во время этих пользовательских операций (есть ли другое место, которое я должен добавить к *.rgs файл из учебника? Некоторое конкретное место регистрации для интерфейса IFileOperation, например, txtfile, было для контекстного меню?).

В ответ написал файл DLL, который перехватывает ntdll.dll вызовы функций с использованием mhook а также этот другой учебник CodeProject, который все происходит в течение DLLMain, Вместо использования AppInit запись в реестре, как в учебнике, я использовал сторонняя программа для инъекции DLL заставить explorer.exe загрузить мою DLL. Фильтруя NtReadFile, NtWriteFile, а также NtSetInformationFile звонки, я могу различать операции перемещения и копирования. Это сработало довольно хорошо!

Проблема:

Инъекция кода, тем не менее, неудачна, поэтому я вернулся и слил DLLMain с первым руководством, так что мой код перехвата находится внутри расширения оболочки. когда explorer.exe загружает расширение оболочки, мой код перехвата также выполняется. Что ж, explorer.exe умный и загружает только библиотеки DLL, как это необходимо. Чтобы мой перехватывавший код начал работать, мне нужно щелкнуть правой кнопкой мыши текстовый файл, чтобы вызвать код расширения оболочки исходного руководства, и с этого момента DLL, похоже, с тех пор остается загруженной.

Вопрос:

Есть ли интерфейс расширения оболочки, который я могу псевдо реализовать, чтобы получить explorer.exe загрузить расширение оболочки при запуске и никогда не выгружать его? Есть ли более элегантное решение для того, что я делаю?

Редактировать: есть похожий сообщение относительно BHO, который загружает как explorer.exe а также iexplorer.exe при запуске. Я думал, что это была просто вещь IE, когда я читал это, но я был неправ. Существует дополнительный ключ (NoExplorer), который вы можете написать, чтобы предотвратить explorer.exe от загрузки, но есть ли подобная команда, чтобы предотвратить загрузку IE? Все мои поиски продолжают вызывать NoExplorer.

Редактировать: через немного эмпирических экспериментов, ICopyHook Интерфейс настолько близок к постоянному расширению оболочки, насколько это возможно. Причина, по которой IFileOperation не вызывался, была в том, что explorer.exe не вызывает его, а скорее исходит от других программ, запрашивающих оболочку выполнить определенную операцию под этим интерфейсом. В любом случае, я реализовал довольно пустое расширение оболочки ICopyHook, и оно, похоже, загружается в explorer.exe вскоре после запуска, хотя это очень недетерминировано. Если у кого-то есть лучшее решение, пожалуйста, поделитесь.

0

Решение

There is an additional key (NoExplorer) you can write to prevent explorer.exe from loading it, but is there a similar command to prevent IE from loading it?

Просто вернитесь ЛОЖНЫЙ в DllMain DLL_PROCESS_ATTACH когда расширение вашей оболочки загружено Internet Explorer.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]