Блокнот - волшебная программа ?!
От: Аноним  
Дата: 21.09.07 23:09
Оценка:
Похоже что так =)
Написал файловый фильтр.
Создал файл C:\test123.txt (файлуха FAT32).
Хоть ты тресни, но IRP_MJ_READ не хочет приходить, если файл открывать Блокнотом. Хотя содержимое файла показывает.
А вот если через WordPad открывать, или через консоль (cmd.exe) выводить — всё приходит.
При этом все остальные запросы прекрасно ловятся — IRP_MJ_CREATE, IRP_MJ_WRITE, IRP_MJ_SET_INFORMATION и IRP_MJ_CLOSE.
Уж и FastIO весь выключил, не помогло.
Что за шутки?
Как же тогда Блокнот получает содержимое файла?
Re: Блокнот - волшебная программа ?!
От: Сергей Мухин Россия  
Дата: 22.09.07 04:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Похоже что так =)

А>Написал файловый фильтр.
А>Создал файл C:\test123.txt (файлуха FAT32).
А>Хоть ты тресни, но IRP_MJ_READ не хочет приходить, если файл открывать Блокнотом. Хотя содержимое файла показывает.
А>А вот если через WordPad открывать, или через консоль (cmd.exe) выводить — всё приходит.
А>При этом все остальные запросы прекрасно ловятся — IRP_MJ_CREATE, IRP_MJ_WRITE, IRP_MJ_SET_INFORMATION и IRP_MJ_CLOSE.
А>Уж и FastIO весь выключил, не помогло.
А>Что за шутки?
А>Как же тогда Блокнот получает содержимое файла?

здесь
---
С уважением,
Сергей Мухин
Re[2]: Блокнот и Prefetch
От: Аноним  
Дата: 22.09.07 06:15
Оценка:
СМ>здесь

Спасибо за статью, вроде как оно, но вроде как и не совсем.

С одной стороны, да, всё дело в Prefetch, это видно при ранней загрузке (boot), когда IRP_MJ_READ для моего тестового файла всё таки приходит один-единственный раз. Далее, как я понимаю, данные берутся из кэша.

Но тогда может кто-нибудь объяснить, почему такое поведение наблюдается только с Блокнотом, а в других программах ничего не кэшируется?
Re: Блокнот - волшебная программа ?!
От: Аноним  
Дата: 22.09.07 12:36
Оценка:
блокнот загружает файл через CreateFileMapping/MapViewOfFile
Re[2]: Блокнот - волшебная программа ?!
От: Аноним  
Дата: 22.09.07 13:25
Оценка:
А>блокнот загружает файл через CreateFileMapping/MapViewOfFile

Спасибо! Собственно, я так и понял уже... Блин.

Дело в том, что мне нужно в файловом фильтре запрещать или разрешать соответствующие операции, а именно: создание, чтение и запись. При этом:
  • Чтение — включает в себя открытие файла, чтение данных файла и чтение его (расширенных) атрибутов.
  • Запись — включает в себя запись данных файла и запись его (расширенных) атрибутов.

    Вот сейчас пытаюсь отследить чтение данных. Для обычных файлов всё работает, а вот для MMF — не приходит IRP_MJ_READ, точнее приходит, но только один раз на стадии ранней загрузки системы, а мне нужно отслеживать все моменты чтения из MMF-файлов.

    Не подскажете, как это возможно сделать в случае MMF-файлов?
  • Re[3]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 22.09.07 13:39
    Оценка:
    А>Не подскажете, как это возможно сделать в случае MMF-файлов?
    Обрататывать FastIO
    Re[4]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 22.09.07 14:48
    Оценка:
    А>>Не подскажете, как это возможно сделать в случае MMF-файлов?
    А>Обрататывать FastIO

    При открытии через Блокнот для файла C:\test123.txt обработчики FastIO, связанные с чтением, не вызываются вообще.
    Вызываются только FastIoQueryBasicInfo и FastIoQueryStandardInfo.
    IRP_MJ_READ приходит только один раз на этапе ранней загрузки.
    Что не так делаю?
    Re[5]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 22.09.07 15:10
    Оценка:
    MdlRead?
    Re[6]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 22.09.07 17:14
    Оценка:
    А>MdlRead?

    Может у меня виртуалка какая-то кривая, что ли, но ни FastIoMdlRead, ни какие-либо другие обработчики FastIO, связанные с чтением данных, для этого файла у меня не вызываются вообще .

    Фильтр писал на основе sfilter, код самого фильтра не менял, только функционала наворотил чутка. Что это может быть, ума не приложу.
    Ещё идеи?
    Re[7]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 22.09.07 17:44
    Оценка:
    А>Фильтр писал на основе sfilter, код самого фильтра не менял, только функционала наворотил чутка. Что это может быть, ума не приложу.
    А>Ещё идеи?
    странно
    Re: Блокнот - волшебная программа ?!
    От: Valery A. Boronin Россия linkedin.com/in/boronin
    Дата: 23.09.07 21:05
    Оценка:
    А>Как же тогда Блокнот получает содержимое файла?
    про notepad уже сообщили то то легко находится поиском по любому форуму опр. направленности — тут все на MMF. Соотв не надо игнорировать paging I/O & Fast I/O.

    кстати, в таких случаях самостоятельно справляться с подобными проблемами помогаетcофт доктора Руссиновича в режиме Advanced+ boot time log, например с фильтром настроенным на интересующий файл\диру\том.
    ... << RSDN@Home 1.2.0 alpha rev. 0>>
    Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
    R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
    Re[7]: Блокнот - волшебная программа ?!
    От: Злость Россия  
    Дата: 24.09.07 07:22
    Оценка:
    Здравствуйте, <Аноним>, Вы писали:

    [skip]

    А>Может у меня виртуалка какая-то кривая, что ли, но ни FastIoMdlRead, ни какие-либо другие обработчики FastIO, связанные с чтением данных, для этого файла у меня не вызываются вообще .


    А>Фильтр писал на основе sfilter, код самого фильтра не менял, только функционала наворотил чутка. Что это может быть, ума не приложу.

    А>Ещё идеи?

    Вопрос — вы как определяете что идет чтение именно с нужного вам файла? Что вы используете в качестве ключа (так сказать).
    ... << RSDN@Home 1.2.0 alpha rev. 685>>
    Правда, Ложь — мне все одно — я имею свое мнение.
    Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
    Любой строй переходный и отрицать это значит быть закостенелым идиотом.
    Re[8]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 24.09.07 09:16
    Оценка:
    З>Вопрос — вы как определяете что идет чтение именно с нужного вам файла? Что вы используете в качестве ключа (так сказать).

    Ну собственно, в каждый из обработчиков IRP_* или FastIo* передаётся указатель на FILE_OBJECT, у которого есть поле FileName. В этом поле, независимо от того, в каком обработчике мы находимся, храниться имя файла, относительное либо диска либо каталога.

    Собственно, в каждом обработчике, который так или иначе связан с чтением, делаю так (к примеру):

    DbgPrint ("FastIoMdlRead: %wZ\r\n", &FileObject -> FileName);


    В отладчике ставлю фильтр на нужное мне имя, например, *test*.txt*, файл C:\test123.txt. И ничего не выводиться.
    А где можно почитать подробности про FastIO и MMF ? Киньте, плиз, ссылкой на статью какую-нибудь ...
    Re[9]: Блокнот - волшебная программа ?!
    От: Valery A. Boronin Россия linkedin.com/in/boronin
    Дата: 24.09.07 09:37
    Оценка:
    З>>Вопрос — вы как определяете что идет чтение именно с нужного вам файла? Что вы используете в качестве ключа (так сказать).
    +1

    А>Ну собственно, в каждый из обработчиков IRP_* или FastIo* передаётся указатель на FILE_OBJECT, у которого есть поле FileName. В этом поле, независимо от того, в каком обработчике мы находимся, храниться имя файла, относительное либо диска либо каталога.

    на это поле в file object можно опираться только в Create и то до тех пор, пока вниз запрос не уехал. неудивительно, что ничего не находится потом фильтрами.

    еще раз остается напомнить совет про правильный инструментарий
    Автор: Valery A. Boronin
    Дата: 24.09.07
    для таких случаев
    ... << RSDN@Home 1.2.0 alpha rev. 0>>
    Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
    R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
    Re[10]: Блокнот - волшебная программа ?!
    От: Злость Россия  
    Дата: 24.09.07 10:59
    Оценка:
    Здравствуйте, Valery A. Boronin, Вы писали:

    [skip]

    Я бы еше посоветовал почитать здесь
    Автор(ы): М. Руссинович, Д. Соломон
    Издательство: Питер, Русская Редакция
    Цена: 750р.

    Книга посвящена внутреннему устройству и алгоритмам работы основных компонентов операционной системы Microsoft Windows — Windows Server 2003, Windows XP и Windows 2000 — и файловой системы NTFS. Детально рассмотрены системные механизмы:
    . Что-бы после переключится, только на вопросы по реализации, а не по архитектуре.
    ... << RSDN@Home 1.2.0 alpha rev. 685>>
    Правда, Ложь — мне все одно — я имею свое мнение.
    Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
    Любой строй переходный и отрицать это значит быть закостенелым идиотом.
    Re[3]: Блокнот - волшебная программа ?!
    От: Sergey Storozhevykh Россия  
    Дата: 24.09.07 11:34
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Дело в том, что мне нужно в файловом фильтре запрещать или разрешать соответствующие операции, а именно: создание, чтение и запись. При этом:

    А>
  • Чтение — включает в себя открытие файла, чтение данных файла и чтение его (расширенных) атрибутов.
    А>
  • Запись — включает в себя запись данных файла и запись его (расширенных) атрибутов.

    если задача только запретить/разрешить, то достаточно обрабатывать только CREATE, где и анализировать запрашиваемые права доступа.
  • Re[4]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 24.09.07 11:55
    Оценка:
    SS>если задача только запретить/разрешить, то достаточно обрабатывать только CREATE, где и анализировать запрашиваемые права доступа.

    Я бы с радостью так и сделал, однако многие "тупые" программы запрашивают FILE_ALL_ACCESS, даже если им нужно просто получить размер файла
    Re[5]: Блокнот - волшебная программа ?!
    От: Sergey Storozhevykh Россия  
    Дата: 24.09.07 12:05
    Оценка: 1 (1)
    Здравствуйте, Аноним, Вы писали:

    SS>>если задача только запретить/разрешить, то достаточно обрабатывать только CREATE, где и анализировать запрашиваемые права доступа.


    А>Я бы с радостью так и сделал, однако многие "тупые" программы запрашивают FILE_ALL_ACCESS, даже если им нужно просто получить размер файла


    ну это же не ваша проблема Вы делаете свое дело честно, в соответствии с моделью безопасности, которая положена в основу NT. Если будете под каждую тупую программу делать подобные костыли, то получится фильтр-инвалид с рождения. Запрещая paging I/O read/write (а именно это придется делать в случае MMF), вы по сути блокируете нормальную работу Mm. Не сымый лучший дизайн для фильтра выпоняющего функцию раграничения доступа к файлам.

    К слову, NTFS тоже не позволит такой "тупой" программе нормально функционировать. И никто не против.
    Re[6]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 24.09.07 12:43
    Оценка:
    SS>ну это же не ваша проблема

    Ну ладно, ладно, все мы знаем что у пользователя проблем не бывает никогда. Проблемы бывают только у разработчиков

    SS>Запрещая paging I/O read/write (а именно это придется делать в случае MMF)


    А к слову, как это делается — запрет paging I/O read/write ?

    SS>К слову, NTFS тоже не позволит такой "тупой" программе нормально функционировать. И никто не против.


    В чём сие проявляется?
    Re[7]: Блокнот - волшебная программа ?!
    От: Sergey Storozhevykh Россия  
    Дата: 24.09.07 13:09
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    SS>>ну это же не ваша проблема


    А>Ну ладно, ладно, все мы знаем что у пользователя проблем не бывает никогда. Проблемы бывают только у разработчиков


    Решения защиты информации — это совершенно отдельная категория софта. Думаю, проще заявить, что такая-то программа не поддерживается в виду ее несовместимости с основополагающими принципами разграничения доступа в NT, чем делать всю систему нестабильной по причине существования отдельных программ.

    Это если мы про серьезные вещи говорим, а не о том как сделать пользователю хорошо и вроде безопасно.

    SS>>Запрещая paging I/O read/write (а именно это придется делать в случае MMF)


    А>А к слову, как это делается — запрет paging I/O read/write ?


    Точно также как и любого другого I/O запроса — при получении IRP с установленным IRP_PAGING_IO/IRP_SYNCHRONOUS_PAGING_IO сделать IoCompleteRequest с ошибкой. Причем в случае блокирования paging write возможно в трее появится угрожающее сообщение об ошибке записи данных на диск. Пользователь перепугается, не сомневайтесь. И, вероятно, снесет такой фильтр

    SS>>К слову, NTFS тоже не позволит такой "тупой" программе нормально функционировать. И никто не против.


    А>В чём сие проявляется?


    Ну как в чем.. Если средствами NTFS разграничить доступ к файлу, разрешив только чтение, например, то при открытии этого файла с ALL_ACCESS вернется запрет доступа. Это и есть нормальное поведение.
    Re[5]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 24.09.07 13:19
    Оценка:
    А>Я бы с радостью так и сделал, однако многие "тупые" программы запрашивают FILE_ALL_ACCESS, даже если им нужно просто получить размер файла
    Нормально написанные программы если видят что не могут открыть полный доступ к файлу при открытии понимают это и работают на урезанных правах. Если же вы будете блокировать MMF непосредственно при попытках записи вы просто убьете эти программы, тк все считают что открыв файл на запись, вы получили права на запись. Ситуацию когда CreateFile на GENERIC_ALL вернул ок, а WriteFile потом свалился с ACCESS_DENIED редкто кто предусматривает. Не говоря уж о том что при ошибках с MMF в апликуху будут валиться неожиданные для нее GPF.

    Что касается FILE_ALL_ACCESS, надеюсь вы не так проверяеете:
    if (DesiredAccess&FILE_ALL_ACCESS)
     {
     return STATUS_ACCESS_DENIED?
     }
    Re[6]: Блокнот - волшебная программа ?!
    От: Аноним  
    Дата: 24.09.07 13:40
    Оценка: :)
    А>Что касается FILE_ALL_ACCESS, надеюсь вы не так проверяеете:
    А>
    А>if (DesiredAccess&FILE_ALL_ACCESS)
    А> {
    А> return STATUS_ACCESS_DENIED?
    А> }
    А>


    Будем считать, что это была неудачная шутка.
    Re: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 25.09.07 22:55
    Оценка:
    Вот такое может кто-нибудь объяснить:

    2:44:37    NOTEPAD.EXE:1232    IRP_MJ_READ*    C:\WINXP\system32\NOTEPAD.EXE    SUCCESS    Offset: 1024 Length: 30720    
    2:44:37    NOTEPAD.EXE:1232    IRP_MJ_READ*    C:\WINXP\system32\NOTEPAD.EXE    SUCCESS    Offset: 33792 Length: 16384    
    2:44:37    NOTEPAD.EXE:548    IRP_MJ_READ*    C:\WINXP\system32\NOTEPAD.EXE    SUCCESS    Offset: 66560 Length: 2560    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\NOTEPAD.EXE    SUCCESS    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\NOTEPAD.EXE    SUCCESS    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\Prefetch\NOTEPAD.EXE-0815DEA3.pf    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\Prefetch\NOTEPAD.EXE-0815DEA3.pf    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_STANDARD_INFO    C:\WINXP\Prefetch\NOTEPAD.EXE-0815DEA3.pf    SUCCESS    Length: 9832    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_READ     C:\WINXP\Prefetch\NOTEPAD.EXE-0815DEA3.pf    SUCCESS    Offset: 0 Length: 9832    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\    SUCCESS    Options: Open Directory  Access: Traverse    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FSCTL_IS_VOLUME_MOUNTED    C:\    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\WINXP\system32\NOTEPAD.EXE.Local\    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\NOTEPAD.EXE.Local\    NOT FOUND    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\NOTEPAD.EXE.Local\    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\WINXP\system32\WINSPOOL.DRV    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\WINSPOOL.DRV    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\WINSPOOL.DRV    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_BASIC_INFO    C:\WINXP\system32\WINSPOOL.DRV    SUCCESS    Attributes: A    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\system32\WINSPOOL.DRV    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\system32\WINSPOOL.DRV    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\WINSPOOL.DRV    SUCCESS    Options: Open  Access: Execute    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\WINSPOOL.DRV    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\system32\WINSPOOL.DRV    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\system32\WINSPOOL.DRV    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\WINXP\WindowsShell.Manifest    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\WindowsShell.Manifest    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\WindowsShell.Manifest    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_BASIC_INFO    C:\WINXP\WindowsShell.Manifest    SUCCESS    Attributes: RHA    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\WindowsShell.Manifest    SUCCESS    Options: Open  Access: Execute    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\WindowsShell.Manifest    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_STANDARD_INFO    C:\WINXP\WindowsShell.Manifest    SUCCESS    Length: 749    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\WINXP\WindowsShell.Manifest    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\WindowsShell.Manifest    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\WindowsShell.Manifest    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_BASIC_INFO    C:\WINXP\WindowsShell.Manifest    SUCCESS    Attributes: RHA    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\WindowsShell.Manifest    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\WindowsShell.Manifest    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_STANDARD_INFO    C:\WINXP\WindowsShell.Manifest    SUCCESS    Length: 749    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\WindowsShell.Manifest    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\WindowsShell.Manifest    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_STANDARD_INFO    C:\WINXP\WindowsShell.Manifest    SUCCESS    Length: 749    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_STANDARD_INFO    C:\WINXP\WindowsShell.Manifest    SUCCESS    Length: 749    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\WindowsShell.Config    NOT FOUND    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\WindowsShell.Config    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\WindowsShell.Manifest    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\SHELL32.dll    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\SHELL32.dll    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_STANDARD_INFO    C:\WINXP\system32\SHELL32.dll    SUCCESS    Length: 8401408    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\SHELL32.dll.124.Manifest    NOT FOUND    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\SHELL32.dll.124.Manifest    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\SHELL32.dll.124.Config    NOT FOUND    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\SHELL32.dll.124.Config    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\system32\SHELL32.dll    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\system32\SHELL32.dll    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\WINXP\system32\NOTEPAD.EXE.Local\    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\NOTEPAD.EXE.Local\    NOT FOUND    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\NOTEPAD.EXE.Local\    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_READ*    C:\WINXP\system32\NOTEPAD.EXE    SUCCESS    Offset: 31744 Length: 2048    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_READ*    C:\WINXP\system32\NOTEPAD.EXE    SUCCESS    Offset: 50176 Length: 16384    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\WINXP\system32\UxTheme.dll    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\UxTheme.dll    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\UxTheme.dll    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_BASIC_INFO    C:\WINXP\system32\UxTheme.dll    SUCCESS    Attributes: A    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\system32\UxTheme.dll    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\system32\UxTheme.dll    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\UxTheme.dll    SUCCESS    Options: Open  Access: Execute    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\UxTheme.dll    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\system32\UxTheme.dll    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\system32\UxTheme.dll    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\    SUCCESS    Options: Open Directory  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_DIRECTORY_CONTROL    C:\    SUCCESS    FileBothDirectoryInformation: test123.txt    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\test123.txt    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\test123.txt    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_VOLUME_INFORMATION    C:\test123.txt    BUFFER OVERFLOW    FileFsVolumeInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\test123.txt    BUFFER OVERFLOW    FileAllInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_STANDARD_INFO    C:\test123.txt    SUCCESS    Length: 504    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\test123.txt    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\test123.txt    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\test123.txt    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\test123.txt    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\test123.txt    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_BASIC_INFO    C:\test123.txt    SUCCESS    Attributes: A    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\test123.txt    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\test123.txt    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\    SUCCESS    Options: Open Directory  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_DIRECTORY_CONTROL    C:\    SUCCESS    FileBothDirectoryInformation: test123.txt    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_SET_INFORMATION     C:\WINXP\System32\CONFIG\SOFTWARE.LOG    SUCCESS    Length: 8192    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_SET_INFORMATION     C:\WINXP\System32\CONFIG\SOFTWARE.LOG    SUCCESS    Length: 8192    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_OPEN    C:\WINXP\system32\SHELL32.dll    FAILURE        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CREATE     C:\WINXP\system32\SHELL32.dll    SUCCESS    Options: Open  Access: All    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_QUERY_INFORMATION    C:\WINXP\system32\SHELL32.dll    INVALID PARAMETER    FileNameInformation    
    2:44:37    NOTEPAD.EXE:312    FASTIO_QUERY_BASIC_INFO    C:\WINXP\system32\SHELL32.dll    SUCCESS    Attributes: A    
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLEANUP    C:\WINXP\system32\SHELL32.dll    SUCCESS        
    2:44:37    NOTEPAD.EXE:312    IRP_MJ_CLOSE     C:\WINXP\system32\SHELL32.dll    SUCCESS


    Это FileMon 7.0, настроенный на максимальный вывод всего, что связано с процессом notepad.exe. Суть в том, что, как видим, для файла C:\test123.txt не вызывается ни IRP_MJ_READ ни FastIoMdlRead ни что-либо подобное.
    Файлуха FAT32, система Windows XP SP2.

    Откуда же тогда беруться данные?
    Неужели они действительно считываются только один раз при старте системы?
    Re[2]: По-прежнему ничего не понимаю! Хелп!!!
    От: De-Bugger  
    Дата: 26.09.07 05:24
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Вот такое может кто-нибудь объяснить:


    А>Откуда же тогда беруться данные?


    А почему их должен читать NOTEPAD.EXE ?
    Re[3]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 06:02
    Оценка:
    А>>Откуда же тогда беруться данные?
    DB>А почему их должен читать NOTEPAD.EXE ?

    А без разницы — кто.
    В мой фильтр бывает придёт 2-3 запроса на чтение, я их запрещаю, но Блокнот всё равно данные отображает!
    А бывает вообще запросов на чтение не приходит и соответственно запретить не могу, блин!
    Я вообще запутался! Гуру, где же вы?! Очень нужна ваша помощь!
    Re[2]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 11:09
    Оценка: +1
    во первых — включите галочку Options/Advanced output
    Во вторых вот лог моего нотепада при первом открытии WIndows\System32\eula.txt:

    14:06:39 notepad.exe:3584 IRP_MJ_DIRECTORY_CONTROL C:\windows\system32\ SUCCESS FileBothDirectoryInformation: eula.txt
    14:06:39 notepad.exe:3584 IRP_MJ_CLEANUP C:\windows\system32\ SUCCESS
    14:06:39 notepad.exe:3584 IRP_MJ_CLOSE C:\windows\system32\ SUCCESS
    14:06:39 notepad.exe:3584 IRP_MJ_CREATE C:\windows\system32\eula.txt SUCCESS Options: Open Access: Read
    14:06:39 notepad.exe:3584 IRP_MJ_CREATE C:\windows\system32\ SUCCESS Options: Open Directory Access: 00100000
    14:06:39 explorer.exe:760 FASTIO_QUERY_OPEN C:\WINDOWS\system32\notepad.EXE SUCCESS Attributes: A
    14:06:39 explorer.exe:760 IRP_MJ_CREATE C:\WINDOWS\system32\notepad.EXE SUCCESS Options: Open Access: 00100020
    14:06:39 notepad.exe:3584 IRP_MJ_READ* C:\$Extend\$ObjId SUCCESS Offset: 25145344 Length: 4096
    14:06:39 explorer.exe:760 FASTIO_QUERY_STANDARD_INFO C:\WINDOWS\system32\notepad.EXE SUCCESS Length: 69120
    14:06:39 explorer.exe:760 IRP_MJ_CLEANUP C:\WINDOWS\system32\notepad.EXE SUCCESS
    14:06:39 explorer.exe:760 IRP_MJ_CLOSE C:\WINDOWS\system32\notepad.EXE SUCCESS
    14:06:39 notepad.exe:3584 IRP_MJ_QUERY_INFORMATION C:\windows\system32\eula.txt SUCCESS FileNameInformation
    14:06:39 notepad.exe:3584 IRP_MJ_QUERY_INFORMATION C:\windows\system32\eula.txt SUCCESS FileNameInformation
    14:06:39 notepad.exe:3584 IRP_MJ_QUERY_VOLUME_INFORMATION C:\windows\system32\eula.txt SUCCESS FileFsVolumeInformation
    14:06:39 notepad.exe:3584 IRP_MJ_QUERY_INFORMATION C:\windows\system32\eula.txt BUFFER OVERFLOW FileAllInformation
    14:06:39 notepad.exe:3584 FASTIO_QUERY_STANDARD_INFO C:\windows\system32\eula.txt SUCCESS Length: 7005
    14:06:39 notepad.exe:3584 IRP_MJ_CLEANUP C:\windows\system32\eula.txt SUCCESS
    14:06:39 notepad.exe:3584 IRP_MJ_READ* C:\windows\system32\eula.txt SUCCESS Offset: 0 Length: 8192 14:06:39 notepad.exe:3584 FASTIO_QUERY_OPEN C:\windows\system32\eula.txt SUCCESS Attributes: A
    14:06:39 notepad.exe:3584 IRP_MJ_CREATE C:\windows\system32\ SUCCESS Options: Open Directory Access: 00100001
    14:06:39 notepad.exe:3584 IRP_MJ_CREATE C:\windows\ SUCCESS Options: Open Directory Access: 00100000
    14:06:39 notepad.exe:3584 IRP_MJ_DIRECTORY_CONTROL C:\windows\system32\ SUCCESS FileBothDirectoryInformation: eula.txt


    При повторном открытии этого же файла в notepad обращений к нему не было потому что memory manager оставил страницы в памяти на будущее.

    ЗЫ Зря вы отказались от идеи проверки запрашиваемых прав в CREATE. Прямым запретом записи вы огребете куда больше неявных проблем.
    Re[3]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 11:23
    Оценка:
    А>во первых — включите галочку Options/Advanced output

    Включил. Этот лог — с включённой галкой.

    А>При повторном открытии этого же файла в notepad обращений к нему не было потому что memory manager оставил страницы в памяти на будущее.


    Ага! Вот оно то мне и нужно! Как отследить вот эти обращения ? Которые из кеша...?

    А>ЗЫ Зря вы отказались от идеи проверки запрашиваемых прав в CREATE. Прямым запретом записи вы огребете куда больше неявных проблем.


    К сожалению, мне пришлось отказаться от этого способа.
    Для примера, возьмите тот же FileMon и откройте cmd.exe. Напишите такую команду:

    C:\>echo 123 > test.txt


    Вывод будет таким:

    15:17:43    cmd.exe:812    IRP_MJ_CREATE     C:\test.txt    SUCCESS    Options: OverwriteIf  Access: All
    15:17:43    cmd.exe:812    IRP_MJ_QUERY_INFORMATION    C:\    SUCCESS    FileNameInformation    
    15:17:43    cmd.exe:812    IRP_MJ_CREATE     C:\test.txt    NOT FOUND    Options: Open  Access: All
    15:17:43    cmd.exe:812    IRP_MJ_WRITE     C:\test.txt    SUCCESS    Offset: 0 Length: 6    
    15:17:43    cmd.exe:812    IRP_MJ_CLEANUP    C:\test.txt    SUCCESS


    Что мы видим? Что несмотря на то, что командному интерпретатору нужны были всего лишь права на запись и удаление, он запросил все права! А теперь представьте, что у фильтра есть правило — "для файла C:\test.txt разрешить только чтение, а любое изменение запретить". Что будет? Правильно — чтение тоже будет запрещено и операция не будет выполнена, что есть неправильно. Что мой фильтр должен делать в таких случаях? Как разрулить такую ситуацию? А никак.
    Re[4]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 11:31
    Оценка: +1
    А>>При повторном открытии этого же файла в notepad обращений к нему не было потому что memory manager оставил страницы в памяти на будущее.
    А>Ага! Вот оно то мне и нужно! Как отследить вот эти обращения ? Которые из кеша...?
    А никак. Нет никаких обращений. Есть тока страницы в памяти не помеченные как dirty и которые отображаются в виртуальные адреса процесса. А когда они модифицируются они потом когда нить memory managerom будут сбрасываться на диск. Тогда придет IRP_MJ_WRITE.
    Re[5]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 11:34
    Оценка:
    А>>>При повторном открытии этого же файла в notepad обращений к нему не было потому что memory manager оставил страницы в памяти на будущее.
    А>>Ага! Вот оно то мне и нужно! Как отследить вот эти обращения ? Которые из кеша...?
    А>А никак. Нет никаких обращений. Есть тока страницы в памяти не помеченные как dirty и которые отображаются в виртуальные адреса процесса. А когда они модифицируются они потом когда нить memory managerom будут сбрасываться на диск. Тогда придет IRP_MJ_WRITE.

    Стоп, а как же тогда вообще другие драйвера-фильтры файловых систем-то работают ?!!!! Они что, просто забивают на это? Не верю!
    Re[4]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 11:44
    Оценка:
    А>
    А>15:17:43    cmd.exe:812    IRP_MJ_CREATE     C:\test.txt    SUCCESS    Options: OverwriteIf  Access: All
    А>15:17:43    cmd.exe:812    IRP_MJ_QUERY_INFORMATION    C:\    SUCCESS    FileNameInformation    
    А>15:17:43    cmd.exe:812    IRP_MJ_CREATE     C:\test.txt    NOT FOUND    Options: Open  Access: All
    А>15:17:43    cmd.exe:812    IRP_MJ_WRITE     C:\test.txt    SUCCESS    Offset: 0 Length: 6    
    А>15:17:43    cmd.exe:812    IRP_MJ_CLEANUP    C:\test.txt    SUCCESS        
    А>


    А>Что мы видим? Что несмотря на то, что командному интерпретатору нужны были всего лишь права на запись и удаление, он запросил все права! А теперь представьте, что у фильтра есть правило — "для файла C:\test.txt разрешить только чтение, а любое изменение запретить". Что будет? Правильно — чтение тоже будет запрещено и операция не будет выполнена, что есть неправильно. Что мой фильтр должен делать в таких случаях? Как разрулить такую ситуацию? А никак.


    Мы видим что вы недостаточно времени затратили на исследование задачи и сразу кинулись делать хаки против проблем которых нету.

    Создаем файлик c:\test.txt В NTFS правах запрещаем всем чтение из него, оставив Allow на запись. И что мы видим:

    Чтение действительно запрещено:

    C:\WINDOWS\system32>type c:\test.txt
    Access is denied.

    C:\WINDOWS\system32>

    Лог файлмона:
    14:38:39 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Directory Access: 00100001
    14:38:39 cmd.exe:3052 IRP_MJ_DIRECTORY_CONTROL C:\ SUCCESS FileBothDirectoryInformation: test.txt
    14:38:39 cmd.exe:3052 FASTIO_QUERY_OPEN C:\test.txt SUCCESS Attributes: A
    14:38:39 cmd.exe:3052 IRP_MJ_CREATE C:\test.txt ACCESS DENIED KILLER\user
    14:38:39 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Directory Access: 00100000
    14:38:39 cmd.exe:3052 IRP_MJ_DIRECTORY_CONTROL C:\ NO MORE FILES FileBothDirectoryInformation
    14:38:39 cmd.exe:3052 IRP_MJ_CLEANUP C:\ SUCCESS
    14:38:39 cmd.exe:3052 IRP_MJ_CLOSE C:\ SUCCESS



    Теперь сделаем запись в него:

    C:\WINDOWS\system32>echo 123> c:\test.txt

    C:\WINDOWS\system32>

    Лог файлмона:
    14:38:45 cmd.exe:3052 IRP_MJ_CREATE C:\test.txt SUCCESS Options: OpenIf Access: 00120196
    14:38:45 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Directory Access: 00100000
    14:38:45 cmd.exe:3052 IRP_MJ_QUERY_INFORMATION C:\test.txt SUCCESS FileNameInformation
    14:38:45 cmd.exe:3052 IRP_MJ_QUERY_INFORMATION C:\test.txt SUCCESS FileNameInformation
    14:38:45 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Access: Read
    14:38:45 cmd.exe:3052 IRP_MJ_DIRECTORY_CONTROL C:\ SUCCESS FileBothDirectoryInformation: TEST.TXT
    14:38:45 cmd.exe:3052 IRP_MJ_CLEANUP C:\ SUCCESS
    14:38:45 cmd.exe:3052 IRP_MJ_CLOSE C:\ SUCCESS
    14:38:45 cmd.exe:3052 IRP_MJ_SET_INFORMATION C:\test.txt SUCCESS FileBasicInformation
    14:38:45 cmd.exe:3052 IRP_MJ_SET_INFORMATION C:\test.txt SUCCESS Length: 0
    14:38:45 cmd.exe:3052 IRP_MJ_WRITE C:\test.txt SUCCESS Offset: 0 Length: 5
    14:38:45 cmd.exe:3052 IRP_MJ_CLEANUP C:\test.txt SUCCESS
    14:38:45 cmd.exe:3052 IRP_MJ_CLOSE C:\test.txt SUCCESS



    Посмотрим размер файла:

    C:\WINDOWS\system32>dir c:\test.txt
    Volume in drive C has no label.
    Volume Serial Number is XXXX-XXXX

    Directory of c:\

    26.09.2007 14:38 5 test.txt
    1 File(s) 5 bytes
    0 Dir(s) 1 746 702 336 bytes free

    C:\WINDOWS\system32>

    Лог файлмона:
    14:42:49 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Directory Access: 00100001
    14:42:49 cmd.exe:3052 IRP_MJ_QUERY_INFORMATION C:\ SUCCESS FileNameInformation
    14:42:49 cmd.exe:3052 IRP_MJ_QUERY_VOLUME_INFORMATION C:\ SUCCESS FileFsAttributeInformation
    14:42:49 cmd.exe:3052 IRP_MJ_CLEANUP C:\ SUCCESS
    14:42:49 cmd.exe:3052 IRP_MJ_CLOSE C:\ SUCCESS
    14:42:49 cmd.exe:3052 FASTIO_QUERY_OPEN C:\test.txt SUCCESS Attributes: A
    14:42:49 cmd.exe:3052 FASTIO_QUERY_OPEN C:\ SUCCESS Attributes: DHS
    14:42:49 cmd.exe:3052 FASTIO_QUERY_OPEN C:\test.txt SUCCESS Attributes: A
    14:42:49 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Directory Access: 00100001
    14:42:49 cmd.exe:3052 IRP_MJ_QUERY_INFORMATION C:\ SUCCESS FileNameInformation
    14:42:49 cmd.exe:3052 IRP_MJ_QUERY_VOLUME_INFORMATION C:\ SUCCESS FileFsVolumeInformation
    14:42:49 cmd.exe:3052 IRP_MJ_CLEANUP C:\ SUCCESS
    14:42:49 cmd.exe:3052 IRP_MJ_CLOSE C:\ SUCCESS
    14:42:49 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Directory Access: 00100001
    14:42:49 cmd.exe:3052 IRP_MJ_DIRECTORY_CONTROL C:\ SUCCESS FileBothDirectoryInformation: test.txt
    14:42:49 cmd.exe:3052 IRP_MJ_DIRECTORY_CONTROL C:\ NO MORE FILES FileBothDirectoryInformation
    14:42:49 cmd.exe:3052 IRP_MJ_CLEANUP C:\ SUCCESS
    14:42:49 cmd.exe:3052 IRP_MJ_CLOSE C:\ SUCCESS
    14:42:49 cmd.exe:3052 IRP_MJ_CREATE C:\ SUCCESS Options: Open Directory Access: 00100001
    14:42:49 cmd.exe:3052 IRP_MJ_QUERY_VOLUME_INFORMATION C:\ SUCCESS FileFsFullSizeInformation
    14:42:49 cmd.exe:3052 IRP_MJ_CLEANUP C:\ SUCCESS
    14:42:49 cmd.exe:3052 IRP_MJ_CLOSE C:\ SUCCESS


    Теперь думаем ....
    Re[5]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 11:52
    Оценка:
    А>Создаем файлик c:\test.txt В NTFS правах запрещаем всем чтение из него, оставив Allow на запись. И что мы видим:

    Вот в этом-то вся и проблема. Никаких прав доступа менять нельзя. Данный фильтр должен работать при любых настроенных правах и независимо от них, правила для фильтра задаются отдельно.
    К тому же не забываем про существование FAT32.
    Re[6]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 11:56
    Оценка:
    А>Стоп, а как же тогда вообще другие драйвера-фильтры файловых систем-то работают ?!!!! Они что, просто забивают на это? Не верю!
    Никто ни на что не забивает. Чтение/запись приходят. Просто не при каждом создании view на файл.
    В модели безопасности винды принято что проверка прав доступа к объекту происходит при открытии хэндла на него. И если вы открыли хэндл то полученные права уже есть и никто их у вас уже не отнимет.
    Я подозреваю откуда у вас проблемы с ограничением прав. Просто права надо резать когда запрос приходит от user-mode кода, а если файл пытается открыть ядро то ему нужно давать все права что можно. Т.е. если ExGetPreviousMode возвращает KernelMode то права запрещать нельзя.
    Re[7]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 12:08
    Оценка:
    А>Никто ни на что не забивает. Чтение/запись приходят. Просто не при каждом создании view на файл.

    Хорошо, а если мне надо получать запросы в любом случае? Мне теперь что, ZwMapViewOfSection() сплайсить что ли?! Или NtMapViewOfSection() хучить?! Маразм ведь!
    Re[8]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 12:12
    Оценка:
    А>>Никто ни на что не забивает. Чтение/запись приходят. Просто не при каждом создании view на файл.
    А>Хорошо, а если мне надо получать запросы в любом случае? Мне теперь что, ZwMapViewOfSection() сплайсить что ли?! Или NtMapViewOfSection() хучить?! Маразм ведь!
    Зачем? Если хэндл на файл не был получен с правами на запись то NtCreateSection на этот хэндл не даст создать секцию с PAGE_WRITE, а NtMapViewOfSection в свою очередеь не позволит отобразить на запись секцию которая READONLY. Так что вполне достаточно проверки прав при получении хэндла на сам файл.
    Re[9]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 12:19
    Оценка:
    А>Так что вполне достаточно проверки прав при получении хэндла на сам файл.

    Да я бы и рад, но задача стоит другая. Об этом я писал здесь
    Автор:
    Дата: 26.09.07
    .
    Re[10]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 12:21
    Оценка: +3
    А>Да я бы и рад, но задача стоит другая. Об этом я писал здесь
    Автор:
    Дата: 26.09.07
    .

    Не вижу в чем то что там написано противоречит идее о том что права проверять надо только при открытии файла.
    Re[11]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 12:31
    Оценка:
    А>>Да я бы и рад, но задача стоит другая. Об этом я писал здесь
    Автор:
    Дата: 26.09.07
    .

    А>Не вижу в чем то что там написано противоречит идее о том что права проверять надо только при открытии файла.

    Ну как же! Я же уже писал об этом.
    Ладно, немного другой пример приведу. Смотрите. Внимательно.
    Есть файл. На томе FAT32. Допустим мы хотим запретить чтение этого файла, а запись, наоборот, разрешить.
    При выполнении командным интерпретатором следующей команды:

    C:\>echo 123 > test.txt


    ему требуются только права на запись и удаление уже существующего файл, верно?
    Вместо этого что он делает? Он запрашивает все права, которые только можно!
    И что же получается? В IRP_MJ_CREATE мы запрещаем запрос, что естественно, т.к. были запрошены в том числе и права, запрещённые правилами фильтра.
    Хотя если бы командный интерпретатор запросил бы лишь необходимые права, то операция прошла бы успешно.
    Получается, что cmd.exe банально криво написан! И из-за него и из-за ему подобных программ мне теперь приходиться городить огород, вместо того чтобы просто проверять запрашиваемые права при открытии/создании файла!
    Понимаете, что я хочу сказать?
    Re[12]: По-прежнему ничего не понимаю! Хелп!!!
    От: Аноним  
    Дата: 26.09.07 12:37
    Оценка: 1 (1) +2

    И что же получается? В IRP_MJ_CREATE мы запрещаем запрос, что естественно, т.к. были запрошены в том числе и права, запрещённые правилами фильтра.

    Тут вы ошиблись в своем предположении. Как и ошиблись в том что cmd.exe криво написан. Просто сделайте как я сказал — проверяйье права только в CREATE и только если ExGetPreviousMode() возвращает UserMode. И от файловой системы тут совсем ничего не зависит. Все спорить я устал. В конце концов вам потом самим со своими проблемами разбираться.
    Re: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 13:29
    Оценка: +1
    Никак не могу понять нафига столько извращений в попытках создать свой слой управления правами поверх имеющегося?
    Re[2]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 13:39
    Оценка:
    А>Никак не могу понять нафига столько извращений в попытках создать свой слой управления правами поверх имеющегося?

    Ха! А вы сначала скажите, что такое "уже имеющийся слой" ?
    Re[3]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:01
    Оценка: +2
    Здравствуйте, Аноним, Вы писали:

    А>>Никак не могу понять нафига столько извращений в попытках создать свой слой управления правами поверх имеющегося?


    А>Ха! А вы сначала скажите, что такое "уже имеющийся слой" ?


    ACL. То есть, имеется какая-то служба, которая по каким-то соображениям ставит и снимает разные права на интересующие вас файлы.
    То как вы хотите сделать крайне чревато глюками в самых неожиданных местах, это уже видно, хотя бы по ходу данного обсуждения.
    Re[4]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:03
    Оценка:
    А>>Ха! А вы сначала скажите, что такое "уже имеющийся слой" ?
    А>ACL. То есть, имеется какая-то служба, которая по каким-то соображениям ставит и снимает разные права на интересующие вас файлы.

    Хорошо, а как быть с FAT32 ?
    Re[5]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:06
    Оценка: 1 (1) +1
    А>Хорошо, а как быть с FAT32 ?
    Реализовать так же как это сделано в NTFS. Там проверка ACL происходит в обработчике CREATE.
    Re[5]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:08
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Хорошо, а как быть с FAT32 ?


    Сконвертировать в NTFS

    А вообще, сочувствую, если вам пришлось заниматься этим, как-то в голову не пришло про FAT-32.
    Re[5]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:15
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Хорошо, а как быть с FAT32 ?


    Может вам MS-DOS атрибутов read-only и hidden хватит. Маразм где-то, но неизвестно что вам нужно, как легкая защита "от дурака" может и прокатит.
    Re[6]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:15
    Оценка:
    А>Реализовать так же как это сделано в NTFS. Там проверка ACL происходит в обработчике CREATE.

    Вы скажите мне пожалуйста, где, ну где на FAT32 юзер может выставить права на определённый конкретный файл, ммм? А ни где! А если юзер не может выставить права, тогда как определить имеет юзверь права на этот файл или нет, а? А никак! Теперь понятно?
    Re[7]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:18
    Оценка: 2 (2) +1 :)
    А>Вы скажите мне пожалуйста, где, ну где на FAT32 юзер может выставить права на определённый конкретный файл, ммм? А ни где! А если юзер не может выставить права, тогда как определить имеет юзверь права на этот файл или нет, а? А никак! Теперь понятно?
    Причем тут юзер и где и как храняться права? Не ну йопта почему вас надо учить и просить делать как правильно. Чем меньше конкурентов — тем лучше
    Re[6]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:21
    Оценка:
    А>Может вам MS-DOS атрибутов read-only и hidden хватит. Маразм где-то, но неизвестно что вам нужно, как легкая защита "от дурака" может и прокатит.

    Неа, тут всё несколько серьёзнее.
    Re[8]: Зачем это всё ?!
    От: Аноним  
    Дата: 26.09.07 14:26
    Оценка:
    А>Причем тут юзер и где и как храняться права?

    Вы видимо не понимаете о чём я говорю.
    Хорошо, посмотрите, например, программку Files and Folders Protector — там как раз реализован похожий принцип. Вот что-то вроде такого и нужно сделать.
    Re[7]: Зачем это всё ?!
    От: Michael7 Россия  
    Дата: 26.09.07 16:56
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>>Реализовать так же как это сделано в NTFS. Там проверка ACL происходит в обработчике CREATE.


    А>Вы скажите мне пожалуйста, где, ну где на FAT32 юзер может выставить права на определённый конкретный файл, ммм? А ни где! А если юзер не может выставить права, тогда как определить имеет юзверь права на этот файл или нет, а? А никак! Теперь понятно?


    Архитектурно прямым решением было бы написать свой драйвер и добавить ACL к FAT32. (Разумеется придётся решить вопрос с местом хранения прав). Потому что, де-факто, именно это вы и пытаетесь сделать. Но если ACL для FAT32 реализовать явным образом, у вас будет куча преимуществ от такого решения, вы сможете для ограничения доступа использовать штатные функции системы, у вас будет основная логика программы отвязана от низкоуровневых вещей.
    Re[6]: По-прежнему ничего не понимаю! Хелп!!!
    От: Sergey Storozhevykh Россия  
    Дата: 27.09.07 06:33
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>>Создаем файлик c:\test.txt В NTFS правах запрещаем всем чтение из него, оставив Allow на запись. И что мы видим:


    А>Вот в этом-то вся и проблема. Никаких прав доступа менять нельзя. Данный фильтр должен работать при любых настроенных правах и независимо от них, правила для фильтра задаются отдельно.

    А>К тому же не забываем про существование FAT32.

    Этот пример с NTFS вам был приведен для того, чтоб продемонстрировать корректную работу механизма разграничения доступа, когда проверка доступа производится в момент создания/открытия файла. Как видим у NTFS с этим проблем не возникает. Тогда почему вашему фильтру понадобилось фильтровать операции чтения/записи?
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.