Перехватить Windows, открыть файл - PullRequest
16 голосов
/ 10 июля 2009

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

Цель состоит в том, чтобы, когда пользователь дважды щелкнул файл в заданной папке, окна сообщили об этом программному обеспечению, а затем обработали это ходатайство и вернули окнам данные файла.

Возможно, было бы другое решение, например, мониторинг Открытых сообщений и заставление Windows ждать, пока программа подготовит содержимое файла.

Одним из применений этой концепции может быть управление десенкрипцией файла прозрачным для пользователя способом. В этом контексте зашифрованный файл будет находиться на диске, и когда пользователь откроет его (с помощью двойного щелчка по нему или с помощью какого-либо приложения, такого как блокнот), фоновый процесс перехватит это событие открытия, расшифрует файл и выдаст его содержимое. этого файла к запрашивающей заявке.

Это немного странная концепция, она может быть похожа на концепцию сети "Человек посередине", но с файлами вместо сетевых пакетов.

Спасибо за чтение.

Ответы [ 4 ]

12 голосов
/ 21 апреля 2010

Вы можете использовать трюк, который Process Explorer использует, чтобы заменить себя диспетчером задач. В основном создайте ключ как это:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe

Где вы заменяете 'taskmgr.exe' на имя процесса, который нужно перехватить. Затем добавьте строковое значение с именем 'Debugger', в котором указан путь к вашему исполняемому файлу. Например:

Debugger -> "C:\windows\system32\notepad.exe"

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

11 голосов
/ 10 июля 2009

Лучший способ сделать это для всех случаев открытия из любой программы - использовать драйвер фильтра файловой системы . Это может быть слишком сложным для ваших нужд.

6 голосов
/ 21 апреля 2010

Вы можете использовать внедрение кода и перенаправление API. Вы запускаете целевой процесс, а затем внедряете DLL, которая перехватывает функции Windows API, которые вы хотите перехватить. Затем вас вызывают, когда целевой процесс думает, что он вызывает OpenFile () или что-то еще, и вы можете делать то, что вам нравится, прежде чем передать вызов реальному API.

Google для "перехвата IAT".

0 голосов
/ 10 июля 2009

Windows имеет возможность шифровать файлы на диске (file-> properties-> advanced-> encrypt), и эта опция полностью прозрачна для приложений.

Может быть, для шифрования дешифрованных частей файла на диске вы должны рассмотреть такие программы, как criptainer?

Существует также это программное обеспечение http://www.truecrypt.org/downloads (бесплатно и с открытым исходным кодом), но я не пробовал его.

Разработка индивидуального решения звучит очень сложно.

...