FILE_OBJECT

Тема в разделе "WASM.NT.KERNEL", создана пользователем Marik, 13 мар 2008.

  1. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Интересует следующее,
    При создании файла на диске в системе создается FILE_OBJECT через который собственно и идет I/O.
    имея указатель на File_Object, возможно ли отследить момент удаления/уничтожения FileObject в системе???
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    можно, но муторно и не надежно.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    например перехват fileTypeInitializer.DeleteProcedure == IopDeleteFile.
     
  4. Sheph

    Sheph New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2008
    Сообщения:
    89
    Marik, я это делал следующим образом: Вёл хэш-массив где ключ - это FILE_OBJECT, как это делается в примере FileSpy, причём на каждом IRP_MJ_CREATE проверял:
    Код (Text):
    1. irpSp = IoGetCurrentIrpStackLocation(irp);
    2. if (irpSp->Parameters.Create.Options & FILE_DELETE_ON_CLOSE)
    3. {
    4.  ..установить флаг в хэше для этого FILE_OBJECT
    5. }
    Потом, получая IRP_MJ_CLEANUP проверял:
    Код (Text):
    1. if (irpSp->FileObject->DeletePending || /*в хэше для данного FILE_OBJECT стоит флаг*/)
    2. {
    3.  //намечается удаление
    4. }
    5. //посылаем запрос нижележащему драйверу
    6. if (/*успешно*/)
    7. {
    8. //файл закрыт и скорее всего удалён, записать в лог
    9. }
    Только здесь есть риск получить запись "файл удалён" несколько раз, но зато ты точно не пропустишь удаление, ну возможно получишь это сообщение несколько раз.
    Мне, честно говоря, тоже такой подход не нравится, но другого я не придумал (
     
  5. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Sheph
    Респект за подробнейший ответ, попробую!!! :)
     
  6. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia