Минифильтры: ограничение прав доступа

Тема в разделе "WASM.BEGINNERS", создана пользователем HoShiMin, 12 сен 2017.

  1. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.502
    Адрес:
    Россия, Нижний Новгород
    Доброго дня форумчанам. Попробовал ограничить права доступа к произвольному файлу только на чтение и столкнулся со странным поведением: если возвращать из Pre-каллбэка FLT_PREOP_COMPLETE, то независимо от прав доступа и статуса доступ к файлу блокируется полностью - нельзя ни удалить, ни прочитать, ни записать.
    Код: https://hastebin.com/gecokodase.c
    Как правильно?
     
  2. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.502
    Адрес:
    Россия, Нижний Новгород
    Даже если сделать так:
    Код (C):
    1.  
    2. Data->IoStatus.Status = STATUS_SUCCESS;
    3. FltSetCallbackDataDirty(Data);
    4. return FLT_PREOP_COMPLETE;
    5.  
    Доступ к файлу блокируется намертво.
     
  3. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.502
    Адрес:
    Россия, Нижний Новгород
    Хм. Полагаю, из-за того, что запрос не идёт дальше по стеку фильтров. Следовательно, FLT_PREOP_COMPLETE нужно возвращать только в случае отмены операции, и тогда IoStatus.Status будет показывать ошибку, так?
    Тогда идём дальше - можно ли явно ограничивать хэндл файла в правах?
    По типу этого:
    Код (C):
    1.  
    2. Data->Iopb->Parameters.Create.SecurityContext->DesiredAccess = SYNCHRONIZE | FILE_WRITE_DATA;
    3.  
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.787
    HoShiMin,

    Вы задаёте вопросы, бесконечный их поток, решение которых сводится к отладке. Установите наконец виндбг и отлаживайте. Нет времени и людей на анализ каждой вашей ошибки.

    У каждой ошибки есть причина, эта причина выясняется на основе документации на конкретный механизм, в котором произошла ошибка или же путём отладки, для выяснения в каком месте ядра произошёл фейл. Это нт, сурков мы не имеем, такое только отлаживается.

    Если вы по какой то причине не можите отладить - опишите почему, но вы должны понимать сам принцип решения проблем.

    Так например для решения вашей предыдущей проблемы матчасти не достаточно, вы должны были отладить и показать место, где ядро отклоняет нотификацию. Вы это не удосужились" сделать.
     
    Последнее редактирование: 14 сен 2017
  5. HoShiMin

    HoShiMin Well-Known Member

    Публикаций:
    5
    Регистрация:
    17 дек 2016
    Сообщения:
    1.502
    Адрес:
    Россия, Нижний Новгород
    В прошлом вопросе всё решилось правкой inf'a: если делаешь не по матчасти - не стоит надеяться, что оно будет работать. Сейчас же вопрос больше по самой концепции: возможно ли урезать в правах открывающийся хэндл, как в ObRegisterCallbacks, или есть только возможность отшить процесс с STATUS_ACCESS_DENIED'ом при попытке открыть файл с "лишними" правами