Как отследить создание папки в файловом фильтре?

Тема в разделе "WASM.NT.KERNEL", создана пользователем WannaSay, 30 сен 2007.

  1. WannaSay

    WannaSay New Member

    Публикаций:
    0
    Регистрация:
    30 сен 2007
    Сообщения:
    11
    Здравствуйте!
    Реализвал файловый фильтр. За основу взят sfilter.
    Отслеживаю создание файлов - все работает, Disposition = FILE_CREATE.
    Но отследить создание папки не получается. Беру проводник, создаю папку, мне приходит несколько соответствующих IRP_MJ_CREATE, но у них у всех Disposition = FILE_OPEN. FileMon показывает тоже самое: "Options: Open Access: All".
    Как же отследить именно создание папки? Что не так делаю?
     
  2. z0mailbox

    z0mailbox z0

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

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Русская винда, к примеру, сразу создает каталог "Новая папка" и ни чего потом не переименовывает. Так что должно ловиться...
     
  4. WannaSay

    WannaSay New Member

    Публикаций:
    0
    Регистрация:
    30 сен 2007
    Сообщения:
    11
    Разобрался.
    У меня ошибка была, с флагами напутал...
    Всем спасибо.
     
  5. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    Столкнулся с аналогичной проблемой... в FAT32 работает а в NTFS не хочет. Может кто знает по каким флагам, приметам определить моздание папки в NTFS
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    Marik
    IrpSp->Parameters.Create.Options & FILE_DIRECTORY_FILE

    есть одна тонкость - при создании директория этот флажок стоит всегда
    а вот при открытии - может стоять, может нет, он похоже ваще не учитывается
    фильтрам этот пофигизм и неаккуратность здорово мешает жыть
     
  7. Marik

    Marik New Member

    Публикаций:
    0
    Регистрация:
    21 июн 2006
    Сообщения:
    166
    Адрес:
    Russia
    z0mailbox
    Спасибо за подсказку на направление ;)
    Флаг FILE_DIRECTORY_FILE опеределен как 00000001h, но он почти во всех IRP установлен ((( А вот флаг 2000000h как раз то что нужно!!! по крайней мере при отлавливании IRP с таким флагом я добился того чего хотел. А вот что это за флаг для меня так и осталось загадкой, если кто знает просветите в теорию.

    ЗЫ: по количеству нулей я не опечатался, не FILE_OPEN_REPARSE_POINT (200000h), а именно 2000000h!
     
  8. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    Marik
    я с децтва щитал что это FILE_CREATE в Disposition

    цытата:
    IrpSp->Parameters.Create.Options
    Bitmask of flags that specify the options to be applied when creating or opening the file, as well as the action to be taken if the file already exists.
    The high 8 bits of this parameter correspond to the Disposition parameter
    The low 24 bits of this member correspond to the CreateOptions parameter

    ты меня запутал :) я думал ты пытаешься отличить директорию от файла, а не создание от открытия