Привет. Перехватываю NtSetInformationFile из ЮзерМоде с флагами FileDispositionInformation и FileRenameInformation. Так вот,получается,что при перехвате удаления файла я действую по следующему плану Вот код внутри функции перехватчика Код (Text): PFILE_DISPOSITION_INFORMATION fd=(PFILE_DISPOSITION_INFORMATION)FileInformation; if (FileInformationClass==FileDispositionInformation&&fd->bDeleteFile==1) { // Переименовываю файл-если удачно //Возвращаю STATUS_SUCCESS //Если нет-возвращаю оригинальный обработчик } Так вот, если так сделать, то при удалении в корзину вываливается ошибка експлорера- Неправильный путь! Оно и правильно.Ведь при удалении в корзину происходит переименования файла.Но т.к. я успел его переименовать,то его вроде как и нет. Так вот в чем вопрос-ПОЧЕМУ для переименования происходит удаления файла? Причем статус выполнения функции-STATUS_SUCCESS Посмотрел FileSpy утилиткой-вот что делает експлорер при попытки удалить файл в корзину Я для того так подробно расписал,что меня ставит в тупик работа эксплорера!!!! Вот в итоге он поместил мой файл в корзину такими движениями. Т.е. файл он не удалял... Что ж делать? Как узнать,что файл реально не удаляется?
А в чем проблема? Что ты именно хотел сделать? 13.IRP_MJ_SET_INFORMATION C:\111.txt STATUS_SUCCESS FileRenameInformation FileObject: 85911C30 ReplaceIfExists: 0 Видимо он посылает уведомление о том что запрашиваемый файл был переименован.
Фух.Проблема в том, что я должен отсадить удаляемый файл.Однако файл не удаляется,а переименовывается.Хотя Експлорер вызывает удаление ,причем удачно.В итоге ,когда юзер удаляет файл в корзину,я перехватываюю вызов (вверху все написано) и переименовываю файл.Но файл-то НЕ УДАЛЯЕТСЯ.Потом експлорер выдает ошибку о том,что не может отсадить файл в корзину,т.к. я его, естественно ,переименовал уже. Меня смущает-КАК УДАЛЯЕТ ЕКСПЛОРЕР файл без РЕАЛЬНОГО УДАЛЕНИЯ???!!!!
Короче.Мне немного понятно. FileDispositionInformation не удаляет файл.А дает инофрмацию о том (через флаг DeleteFile),Может файл быть удален,или нет.Файл удаляется после закрытия хэндла,если DeleteFile==1. Вот почему файл не удаляется. Непонятны только зачем эксплореру махинациии с флагами DeleteFile
да, я тоже недавно на эту штуку натыкался, пришлось добавлять воркараунд действительно все как ты говоришь експлорер сначала как бы удаляет а потом как бы отменяет удаление зачем эти хитрые маневры - непонятно