Похоже что так =)
Написал файловый фильтр.
Создал файл C:\test123.txt (файлуха FAT32).
Хоть ты тресни, но IRP_MJ_READ не хочет приходить, если файл открывать Блокнотом. Хотя содержимое файла показывает.
А вот если через WordPad открывать, или через консоль (cmd.exe) выводить — всё приходит.
При этом все остальные запросы прекрасно ловятся — IRP_MJ_CREATE, IRP_MJ_WRITE, IRP_MJ_SET_INFORMATION и IRP_MJ_CLOSE.
Уж и FastIO весь выключил, не помогло.
Что за шутки?
Как же тогда Блокнот получает содержимое файла?
Здравствуйте, Аноним, Вы писали:
А>Похоже что так =) А>Написал файловый фильтр. А>Создал файл C:\test123.txt (файлуха FAT32). А>Хоть ты тресни, но IRP_MJ_READ не хочет приходить, если файл открывать Блокнотом. Хотя содержимое файла показывает. А>А вот если через WordPad открывать, или через консоль (cmd.exe) выводить — всё приходит. А>При этом все остальные запросы прекрасно ловятся — IRP_MJ_CREATE, IRP_MJ_WRITE, IRP_MJ_SET_INFORMATION и IRP_MJ_CLOSE. А>Уж и FastIO весь выключил, не помогло. А>Что за шутки? А>Как же тогда Блокнот получает содержимое файла?
Спасибо за статью, вроде как оно, но вроде как и не совсем.
С одной стороны, да, всё дело в 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, код самого фильтра не менял, только функционала наворотил чутка. Что это может быть, ума не приложу. А>Ещё идеи?
странно
А>Как же тогда Блокнот получает содержимое файла?
про 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.
[skip]
А>Может у меня виртуалка какая-то кривая, что ли, но ни FastIoMdlRead, ни какие-либо другие обработчики FastIO, связанные с чтением данных, для этого файла у меня не вызываются вообще .
А>Фильтр писал на основе sfilter, код самого фильтра не менял, только функционала наворотил чутка. Что это может быть, ума не приложу. А>Ещё идеи?
Вопрос — вы как определяете что идет чтение именно с нужного вам файла? Что вы используете в качестве ключа (так сказать).
... << RSDN@Home 1.2.0 alpha rev. 685>>
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[8]: Блокнот - волшебная программа ?!
От:
Аноним
Дата:
24.09.07 09:16
Оценка:
З>Вопрос — вы как определяете что идет чтение именно с нужного вам файла? Что вы используете в качестве ключа (так сказать).
Ну собственно, в каждый из обработчиков IRP_* или FastIo* передаётся указатель на FILE_OBJECT, у которого есть поле FileName. В этом поле, независимо от того, в каком обработчике мы находимся, храниться имя файла, относительное либо диска либо каталога.
Собственно, в каждом обработчике, который так или иначе связан с чтением, делаю так (к примеру):
В отладчике ставлю фильтр на нужное мне имя, например, *test*.txt*, файл C:\test123.txt. И ничего не выводиться.
А где можно почитать подробности про FastIO и MMF ? Киньте, плиз, ссылкой на статью какую-нибудь ...
З>>Вопрос — вы как определяете что идет чтение именно с нужного вам файла? Что вы используете в качестве ключа (так сказать).
+1
А>Ну собственно, в каждый из обработчиков IRP_* или FastIo* передаётся указатель на FILE_OBJECT, у которого есть поле FileName. В этом поле, независимо от того, в каком обработчике мы находимся, храниться имя файла, относительное либо диска либо каталога.
на это поле в file object можно опираться только в Create и то до тех пор, пока вниз запрос не уехал. неудивительно, что ничего не находится потом фильтрами.
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.
. Что-бы после переключится, только на вопросы по реализации, а не по архитектуре.
... << RSDN@Home 1.2.0 alpha rev. 685>>
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Здравствуйте, Аноним, Вы писали:
А>Дело в том, что мне нужно в файловом фильтре запрещать или разрешать соответствующие операции, а именно: создание, чтение и запись. При этом: А>Чтение — включает в себя открытие файла, чтение данных файла и чтение его (расширенных) атрибутов. А>Запись — включает в себя запись данных файла и запись его (расширенных) атрибутов.
если задача только запретить/разрешить, то достаточно обрабатывать только CREATE, где и анализировать запрашиваемые права доступа.
Re[4]: Блокнот - волшебная программа ?!
От:
Аноним
Дата:
24.09.07 11:55
Оценка:
SS>если задача только запретить/разрешить, то достаточно обрабатывать только CREATE, где и анализировать запрашиваемые права доступа.
Я бы с радостью так и сделал, однако многие "тупые" программы запрашивают FILE_ALL_ACCESS, даже если им нужно просто получить размер файла
Здравствуйте, Аноним, Вы писали:
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 тоже не позволит такой "тупой" программе нормально функционировать. И никто не против.
Здравствуйте, Аноним, Вы писали:
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, надеюсь вы не так проверяеете: А>
Это FileMon 7.0, настроенный на максимальный вывод всего, что связано с процессом notepad.exe. Суть в том, что, как видим, для файла C:\test123.txt не вызывается ни IRP_MJ_READ ни FastIoMdlRead ни что-либо подобное.
Файлуха FAT32, система Windows XP SP2.
Откуда же тогда беруться данные?
Неужели они действительно считываются только один раз при старте системы?
Здравствуйте, Аноним, Вы писали:
А>Вот такое может кто-нибудь объяснить:
А>Откуда же тогда беруться данные?
А почему их должен читать NOTEPAD.EXE ?
Re[3]: По-прежнему ничего не понимаю! Хелп!!!
От:
Аноним
Дата:
26.09.07 06:02
Оценка:
А>>Откуда же тогда беруться данные? DB>А почему их должен читать NOTEPAD.EXE ?
А без разницы — кто.
В мой фильтр бывает придёт 2-3 запроса на чтение, я их запрещаю, но Блокнот всё равно данные отображает!
А бывает вообще запросов на чтение не приходит и соответственно запретить не могу, блин!
Я вообще запутался! Гуру, где же вы?! Очень нужна ваша помощь!
При повторном открытии этого же файла в 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 разрешить только чтение, а любое изменение запретить". Что будет? Правильно — чтение тоже будет запрещено и операция не будет выполнена, что есть неправильно. Что мой фильтр должен делать в таких случаях? Как разрулить такую ситуацию? А никак.
А>>При повторном открытии этого же файла в 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:\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
Оценка:
А>Так что вполне достаточно проверки прав при получении хэндла на сам файл.
Да я бы и рад, но задача стоит другая. Об этом я писал здесь
. А>Не вижу в чем то что там написано противоречит идее о том что права проверять надо только при открытии файла.
Ну как же! Я же уже писал об этом.
Ладно, немного другой пример приведу. Смотрите. Внимательно.
Есть файл. На томе FAT32. Допустим мы хотим запретить чтение этого файла, а запись, наоборот, разрешить.
При выполнении командным интерпретатором следующей команды:
C:\>echo 123 > test.txt
ему требуются только права на запись и удаление уже существующего файл, верно?
Вместо этого что он делает? Он запрашивает все права, которые только можно!
И что же получается? В IRP_MJ_CREATE мы запрещаем запрос, что естественно, т.к. были запрошены в том числе и права, запрещённые правилами фильтра.
Хотя если бы командный интерпретатор запросил бы лишь необходимые права, то операция прошла бы успешно.
Получается, что cmd.exe банально криво написан! И из-за него и из-за ему подобных программ мне теперь приходиться городить огород, вместо того чтобы просто проверять запрашиваемые права при открытии/создании файла!
Понимаете, что я хочу сказать?
И что же получается? В IRP_MJ_CREATE мы запрещаем запрос, что естественно, т.к. были запрошены в том числе и права, запрещённые правилами фильтра.
Тут вы ошиблись в своем предположении. Как и ошиблись в том что cmd.exe криво написан. Просто сделайте как я сказал — проверяйье права только в CREATE и только если ExGetPreviousMode() возвращает UserMode. И от файловой системы тут совсем ничего не зависит. Все спорить я устал. В конце концов вам потом самим со своими проблемами разбираться.
Здравствуйте, Аноним, Вы писали:
А>>Никак не могу понять нафига столько извращений в попытках создать свой слой управления правами поверх имеющегося?
А>Ха! А вы сначала скажите, что такое "уже имеющийся слой" ?
ACL. То есть, имеется какая-то служба, которая по каким-то соображениям ставит и снимает разные права на интересующие вас файлы.
То как вы хотите сделать крайне чревато глюками в самых неожиданных местах, это уже видно, хотя бы по ходу данного обсуждения.
Re[4]: Зачем это всё ?!
От:
Аноним
Дата:
26.09.07 14:03
Оценка:
А>>Ха! А вы сначала скажите, что такое "уже имеющийся слой" ? А>ACL. То есть, имеется какая-то служба, которая по каким-то соображениям ставит и снимает разные права на интересующие вас файлы.
А>Хорошо, а как быть с 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 юзер может выставить права на определённый конкретный файл, ммм? А ни где! А если юзер не может выставить права, тогда как определить имеет юзверь права на этот файл или нет, а? А никак! Теперь понятно?
А>Вы скажите мне пожалуйста, где, ну где на FAT32 юзер может выставить права на определённый конкретный файл, ммм? А ни где! А если юзер не может выставить права, тогда как определить имеет юзверь права на этот файл или нет, а? А никак! Теперь понятно?
Причем тут юзер и где и как храняться права? Не ну йопта почему вас надо учить и просить делать как правильно. Чем меньше конкурентов — тем лучше
Re[6]: Зачем это всё ?!
От:
Аноним
Дата:
26.09.07 14:21
Оценка:
А>Может вам MS-DOS атрибутов read-only и hidden хватит. Маразм где-то, но неизвестно что вам нужно, как легкая защита "от дурака" может и прокатит.
Неа, тут всё несколько серьёзнее.
Re[8]: Зачем это всё ?!
От:
Аноним
Дата:
26.09.07 14:26
Оценка:
А>Причем тут юзер и где и как храняться права?
Вы видимо не понимаете о чём я говорю.
Хорошо, посмотрите, например, программку Files and Folders Protector — там как раз реализован похожий принцип. Вот что-то вроде такого и нужно сделать.
Здравствуйте, Аноним, Вы писали:
А>>Реализовать так же как это сделано в NTFS. Там проверка ACL происходит в обработчике CREATE.
А>Вы скажите мне пожалуйста, где, ну где на FAT32 юзер может выставить права на определённый конкретный файл, ммм? А ни где! А если юзер не может выставить права, тогда как определить имеет юзверь права на этот файл или нет, а? А никак! Теперь понятно?
Архитектурно прямым решением было бы написать свой драйвер и добавить ACL к FAT32. (Разумеется придётся решить вопрос с местом хранения прав). Потому что, де-факто, именно это вы и пытаетесь сделать. Но если ACL для FAT32 реализовать явным образом, у вас будет куча преимуществ от такого решения, вы сможете для ограничения доступа использовать штатные функции системы, у вас будет основная логика программы отвязана от низкоуровневых вещей.
Здравствуйте, Аноним, Вы писали:
А>>Создаем файлик c:\test.txt В NTFS правах запрещаем всем чтение из него, оставив Allow на запись. И что мы видим:
А>Вот в этом-то вся и проблема. Никаких прав доступа менять нельзя. Данный фильтр должен работать при любых настроенных правах и независимо от них, правила для фильтра задаются отдельно. А>К тому же не забываем про существование FAT32.
Этот пример с NTFS вам был приведен для того, чтоб продемонстрировать корректную работу механизма разграничения доступа, когда проверка доступа производится в момент создания/открытия файла. Как видим у NTFS с этим проблем не возникает. Тогда почему вашему фильтру понадобилось фильтровать операции чтения/записи?