какой тип драйвера устройства Windows может изменять FindFirstFile и FindNextFile?

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

Спасибо


person Sergey    schedule 02.06.2011    source источник


Ответы (2)


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

Перехват системного API

обнаружена перехватка API

person sarat    schedule 02.06.2011
comment
Спасибо @sarat, я предпочитаю писать драйвер устройства, чтобы использовать собственные функции, но я не нашел соответствующего IRP-запроса! Вы можете указать мне? - person Sergey; 02.06.2011
comment
Да, вы можете сделать это, перехватив ntdll apis. В частности, вам нужно будет перехватить NtQueryDirectoryFile. См. source.winehq.org/source/dlls/kernel32/file. c#L1728, чтобы увидеть, как Wine реализует FindFirstFile. Я считаю, что это очень похоже на то, что на самом деле сделала Windows. - person istudy0; 02.06.2011
comment
Вероятно, вы можете использовать для этого IRP_MJ_DIRECTORY_CONTROL. Пожалуйста, взгляните на msdn.microsoft.com/en-us/library/ff548658. .aspx для более подробной информации. - person istudy0; 02.06.2011
comment
Вы также можете использовать другой источник: nektra.com/products/deviare-api- hook-windows — это библиотека для подключения API. Он также имеет широкий крючок. Лучший метод — это разработка драйвера, потому что только так вы будете уверены, что на этом все закончится. - person Pablo Yabo; 03.06.2011

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

Для этого поддерживается драйвер фильтра файловой системы.

В последней версии Windows 7 WDK пример под 7600.16385.1\src\filesys\miniFilter\minispy является хорошей отправной точкой. Самая большая проблема с мини-фильтрами для частного лица - это назначить высоту, на которой водитель должен загрузиться. Потому что использование только любой высоты вполне может привести к BSOD, а в случае FSFD вы можете даже поставить под угрозу целостность своих данных (хотя ядро ​​вмешивается с BSOD, чтобы предотвратить это). Вам нужно только подделать IRP_MN_QUERY_DIRECTORY — это второстепенный управляющий код, который вы ищете, когда обрабатываете основной управляющий код IRP_MJ_DIRECTORY_CONTROL. Все остальные вы можете пройти, если вам не нужно разрешать открытие, чтение или запись файла и тому подобное. Как это сделать, можно увидеть в исходном коде 7600.16385.1\src\filesys\miniFilter\passThrough.

person 0xC0000022L    schedule 06.03.2013