Отслеживание того, какой процесс открыл конкретный файл

StackOverflow https://stackoverflow.com/questions/231547

Вопрос

В режиме ядра 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.

Или вы действительно пытаетесь сделать это программно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top