Отслеживание того, какой процесс открыл конкретный файл
-
04-07-2019 - |
Вопрос
В режиме ядра Windows я могу перехватывать и отслеживать практически все действия, выполняемые на определенном диске.Когда файл открывается для какой-либо цели, я получаю событие.
Теперь я хочу отследить, какое приложение его открыло.Я думаю, что это должно быть возможно, но не знаю как.
Я использую стандартные функции управления файлами в Windows Win32 API.
Заранее спасибо.
/Роберт
Решение
Просто используйте Win32 N.API, чтобы получить pid из дескриптора файла.Это FAQ уже 15 лет...
Другие советы
Sysinternals Файлемон (бесплатно) делает это, а еще лучше они описывают, как они это сделали:
Для драйвера Windows 9x сердце Filemon находится в драйвере виртуального устройства, Filevxd.vxd.Он динамически загружается, а в своей инициализации он устанавливает фильтр файловой системы через службу VXD, IFSMGR_INSTALLFILESYSTEMAPIHOK, чтобы вставить себя в цепочку вызовов всех запросов файловой системы.В Windows NT Сердце Filemon - это драйвер файловой системы, который создает и прикрепляет объекты фильтрации устройства для целевых объектов устройства файловой системы, чтобы Filemon увидел все IRP и запросы Fastio, направленные на диски.Когда Filemon видит открытый, созданный или закрытый вызов, он обновляет внутреннюю хэш -таблицу, которая служит отображением между внутренними ручками файла и именами путей файла.Всякий раз, когда он видит вызовы, основанные на ручке, он просматривает ручку в хэш -таблице, чтобы получить полное имя для отображения.Если ссылки на доступы на основе ручки файл открылся до начала Filemon, Filemon не сможет найти отображение в своей хэш-таблице и вместо этого просто представит значение ручки.
-Адам
Sysinternals так хорошо справились с этой задачей и объяснили ее, что некоторый исходный код старой версии все еще доступен. здесь например, и код хорошо документирован (имхо).Это также может быть хорошим началом.
Я бы использовал приложение handle.exe от Sysinternals.
Или вы действительно пытаетесь сделать это программно?