Мини-фильтр перехватить перетаскивание & amp; сбросить файл (ы) на диск?

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

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

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

Я перехватить перетащить & зайти перенаправить их:

  1. Получить имя файла с помощью FltGetFileNameInformation (), а затем FltParseFileNameInformation ()
  2. Разделить его на две части
    • Во-первых, это: \ Device \ HarddiskVolume1 \ folder \
    • Второй: file.ext
  3. Добавьте имя файла для первой части: \ Device \ HarddiskVolume1 \ folder \ new_file.ext
  4. Перехватить создание на диске
    • Освободите этот буфер: Data-> Iopb-> TargetFileObject-> FileName.Buffer
    • Присвойте первую часть Data-> Iopb-> TargetFileObject-> FileName
    • Установите это: Data-> Iopb-> TargetFileObject-> RelatedFileObject = NULL;
    • Данные-> IoStatus.Information = IO_REPARSE;
    • Data-> IoStatus.Status = STATUS_REPARSE;
    • вернуть FLT_PREOP_SUCCESS_NO_CALLBACK;

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

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

0

Решение

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

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

    • Слайп это две части: путь к файлу и имя файла
    • Измените имя файла на имя файла перенаправления
  2. Удалить имя файла перенаправления. Этот шаг можно запустить до шага № 1

    • Если имя файла перенаправления не существует, возвращается STATUS_OBJECT_NAME_NOT_FOUND (0xC0000034). Это не проблема для системы.
    • Если имя файла перенаправления существует. Все в порядке.
1

Другие решения

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

Удачи.

0

По вопросам рекламы [email protected]