Я разрабатываю мини-фильтр для перехвата файлов и получения имени файлов, которые перетаскиваются на определенный диск и получают имена файлов.
Если я перетащу файл, я смогу получить это имя файла и успешно его перехватить (это означает, что этот файл не создан на диске).
Если я перетаскиваю несколько файлов, я могу получить только имя первого файла, а другое нет. Но когда я открываю диск, я не вижу здесь ни одного файла (значит Мини-Фильтр их успешно перехватывает). Поэтому я не могу получить имена файлов (кроме первого файла)
Я перехватываю перетаскивание, перенаправляя их:
- Получить имя файла с помощью FltGetFileNameInformation(), затем FltParseFileNameInformation()
- Split it two part
- First is: \Device\HarddiskVolume1\folder\
- Второй: file.ext
- Добавьте имя файла для первой части: \Device\HarddiskVolume1\folder\new_file.ext
- 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;
Приведенный выше код может перехватывать только все файлы и получать имя первого файла.
Как я могу перехватить каждый файл, когда я перетаскиваю несколько файлов?