2016-12-24 8 views
0

Мне нужно обнаружить только инициированные пользователем операции ввода-вывода. Когда я говорю «Пользователь», я имею в виду пользователя (дважды щелкните, чтобы открыть файл, введите, и т. Д.).MiniFilter - Как обнаружить только инициированные пользователем операции ввода-вывода?

Data-> RequestorMode == 1, печатает только пользовательский режим, и мне нужны инициированные пользователем действия.

Итак, мне нужно знать, как печатать только транзакции, сделанные самим пользователем. (Открыть файл, двойной щелчок, введите и т. Д., Как указано ранее)

Любые предложения?

Спасибо!

ответ

0

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

Загрузчик Windows несет ответственность за загрузку приложения в память и настройку его работы. Для этого он должен открыть хотя бы исполняемый файл и обычно одну или несколько библиотек DLL. Как только приложение запустится, оно также может открыть некоторые файлы конфигурации, прежде чем он откроет файл, который попросил пользователь.

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

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

0

Данные-> RequestorMode == 1, печатает только в режиме пользователя

так

if (Data->RequestorMode == UserMode) DbgPrint("%x\n", Data->RequestorMode);

печать только UserMode

или я буду говорить лучше - if UserMode print UserMode - печать только UserMode ..

+0

Я приведу пример, чтобы лучше объяснить себя: Предположим, я открываю файл abc.txt. Вызовы пользовательского режима: Откройте кучу dll, откройте блокнот, откройте abc.txt. Я хочу отфильтровать это и поймать только файл abc.txt (или что-нибудь еще, что пользователь открыл acutaly). Как поймать только то, что пользователь (человек) открыт? Как двойной клик и Enter) – user3449011

+0

@ user3449011: вы не можете. Windows только знает, что программа открывает файл, и нет способа определить, открывает ли он файл, потому что пользователь явно спросил его или по какой-то другой причине. –

+0

@HarryJohnston - действительно попытка выполнить попытку, найденную пользователем или в режиме ядра, была запрошена. и он не может понять, что есть - 'FLT_CALLBACK_DATA.RequestorMode' - начать с http://stackoverflow.com/questions/41292697/minispy-driver-user-mode-call – RbMm