Мини-фильтр перехватывает перетаскивание файлов на диск?

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

Если я перетащу файл, я смогу получить это имя файла и успешно его перехватить (это означает, что этот файл не создан на диске).

Если я перетаскиваю несколько файлов, я могу получить только имя первого файла, а другое нет. Но когда я открываю диск, я не вижу здесь ни одного файла (значит Мини-Фильтр их успешно перехватывает). Поэтому я не могу получить имена файлов (кроме первого файла)

Я перехватываю перетаскивание, перенаправляя их:

  1. Получить имя файла с помощью FltGetFileNameInformation(), затем FltParseFileNameInformation()
  2. Split it two part
    • First is: \Device\HarddiskVolume1\folder\
    • Второй: file.ext
  3. Добавьте имя файла для первой части: \Device\HarddiskVolume1\folder\new_file.ext
  4. Intercept create on disk
    • Release this buffer: Data->Iopb->TargetFileObject->FileName.Buffer
    • Назначьте первую часть Data->Iopb->TargetFileObject->FileName
    • Установите это: Data->Iopb->TargetFileObject->RelatedFileObject = NULL;
    • Данные->IoStatus.Information = IO_REPARSE;
    • Данные->IoStatus.Status = STATUS_REPARSE;
    • вернуть FLT_PREOP_SUCCESS_NO_CALLBACK;

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

Как я могу перехватить каждый файл, когда я перетаскиваю несколько файлов?


person GSP    schedule 29.01.2015    source источник
comment
Я перенаправляю файл в зависимости от redirect-file-open-using -окна   -  person GSP    schedule 29.01.2015


Ответы (2)


Я обнаружил, что:

  1. Получить имя файла из Data->Iopb->TargetFileObject->FileName

    • Slipt it two part: file path and file name
    • Изменить имя файла на имя файла перенаправления
  2. Удалить имя файла перенаправления. Этот шаг можно выполнить до шага №1.

    • If redirect file name is not exist, It return STATUS_OBJECT_NAME_NOT_FOUND (0xC0000034). It is not problem for system.
    • Если имя файла перенаправления существует. Все хорошо.
person GSP    schedule 03.02.2015

Обязательно проверьте пример simrep из Microsoft они показывают вам, как правильно это сделать. Я бы не стал основывать свое предположение, что Drag&Drop имеет соответствие в ядре и в файловой системе. Это может быть реализовано в пользовательском режиме многими способами, особенно если вы делаете это на том же томе. Это может быть так же просто, как переименовать. Также имейте в виду жесткие и символические ссылки и альтернативные потоки данных.

Удачи.

person Gabriel Bercea    schedule 26.01.2018