Перехват удаления файла в корзину.. Explorer страно ведет себя

Тема в разделе "WASM.WIN32", создана пользователем coocky, 1 окт 2007.

  1. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Привет.
    Перехватываю NtSetInformationFile из ЮзерМоде с флагами FileDispositionInformation и FileRenameInformation.
    Так вот,получается,что при перехвате удаления файла я действую по следующему плану
    Вот код внутри функции перехватчика
    Код (Text):
    1. PFILE_DISPOSITION_INFORMATION fd=(PFILE_DISPOSITION_INFORMATION)FileInformation;
    2.  
    3.     if (FileInformationClass==FileDispositionInformation&&fd->bDeleteFile==1)
    4. {
    5. // Переименовываю файл-если удачно
    6. //Возвращаю STATUS_SUCCESS
    7. //Если нет-возвращаю оригинальный обработчик
    8. }
    Так вот, если так сделать, то при удалении в корзину вываливается ошибка експлорера-
    Неправильный путь!
    Оно и правильно.Ведь при удалении в корзину происходит переименования файла.Но т.к. я успел его переименовать,то его вроде как и нет.
    Так вот в чем вопрос-ПОЧЕМУ для переименования происходит удаления файла? Причем статус выполнения функции-STATUS_SUCCESS
    Посмотрел FileSpy утилиткой-вот что делает експлорер при попытки удалить файл в корзину
    Я для того так подробно расписал,что меня ставит в тупик работа эксплорера!!!!
    Вот в итоге он поместил мой файл в корзину такими движениями.
    Т.е. файл он не удалял...
    Что ж делать? Как узнать,что файл реально не удаляется?
     
  2. Vilco

    Vilco Vitaly

    Публикаций:
    0
    Регистрация:
    5 мар 2007
    Сообщения:
    190
    Адрес:
    Nsk, Russia
    А в чем проблема? Что ты именно хотел сделать?
    13.IRP_MJ_SET_INFORMATION C:\111.txt STATUS_SUCCESS FileRenameInformation FileObject: 85911C30 ReplaceIfExists: 0
    Видимо он посылает уведомление о том что запрашиваемый файл был переименован.
     
  3. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    :)
    Фух.Проблема в том, что я должен отсадить удаляемый файл.Однако файл не удаляется,а переименовывается.Хотя Експлорер вызывает удаление ,причем удачно.В итоге ,когда юзер удаляет файл в корзину,я перехватываюю вызов (вверху все написано) и переименовываю файл.Но файл-то НЕ УДАЛЯЕТСЯ.Потом експлорер выдает ошибку о том,что не может отсадить файл в корзину,т.к. я его, естественно ,переименовал уже.
    Меня смущает-КАК УДАЛЯЕТ ЕКСПЛОРЕР файл без РЕАЛЬНОГО УДАЛЕНИЯ???!!!!
     
  4. coocky

    coocky New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2007
    Сообщения:
    195
    Короче.Мне немного понятно.
    FileDispositionInformation не удаляет файл.А дает инофрмацию о том (через флаг DeleteFile),Может файл быть удален,или нет.Файл удаляется после закрытия хэндла,если DeleteFile==1.

    Вот почему файл не удаляется.
    Непонятны только зачем эксплореру махинациии с флагами DeleteFile
     
  5. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    да, я тоже недавно на эту штуку натыкался, пришлось добавлять воркараунд
    действительно все как ты говоришь експлорер сначала как бы удаляет а потом как бы отменяет удаление
    зачем эти хитрые маневры - непонятно