Какие имеются способы заблокировать том или его часть? Например, при форматировании или дефрагментации утилиты делают нечто подобное. Может кто подсказать идею?
Гляну. Но что-то мне подсказывает, что это не то. FSCTL_* - это коды для управления драйверами файловых систем. С помощью них можно файл залочить и т.д. Мне нужно немного другое. Необходима блокировка именно тома, а не файловой системы. Например для того, чтобы я мог внести изменения на диске, не конкурируя при этом с драйвером файловой системы. Т.е. отодвинуть файловую систему в сторону, сделать свое дело, вернуть все наместо.
Great, x64 : Спасибо, похоже то, что нужно. Однако это не все. Возможно ли заблокировать том на запись, чтобы все могли читать, но не могли писать. И как быть, если нужно заблокировать только часть тома?
Forever Часть тома заблокировать нельзя. На заблокированом томе нельзя открывать никакие файлы, даже для чтения. P.S. Зачем такие извращения?
Partner Объясню. Допустим у меня исть реализация чтения файлов в обход драйвера файловой системы. Т.е. вручную разбираются структуры файловой системы. Зная расположение файла, его несложно прочитать. Однако, пока я его читаю, кто-то может в него писать. Получаем неверные данные. Все может быть еще хуже, если то же случится, когда я буду читать записи MFT, FAT, или другие важные для файловой системы структуры. Поэтому нужна блокировка. Блокировать весь том - не очень удачное решение : 1) Заблокировать не удасться, если на нем располагаются открытые файлы, 2) Блокировать диск C например вообще не думаю, что возможно. Поэтому хотелось бы, блокировать запись, либо блокировать часть тома с которым я работаю, дабы не мешать жить другим программам и самой ОС.
Если ты в ядре, что мешает поставить фильтр и не пропускать IRP-ы на запись? Таким образом ты сможешь залочить не весь диск целиком, а какие-то папки по выбору.
Twister Это можно конечно. Сам о таком думал. Вообще говоря главная часть программы может быть и не в ядре. Однако всегда можно написать драйвер, который будет делать то, что нужно. Хотелось бы знать существуют ли решения по-проще.
Как уже было сказано, выборочно залочить что-то на томе и установить режим блокировки стандартные средства не позволяют. Да и я не сказал бы, что данное решение слишком сложное. Если будет нужно, могу поделиться кодом.
Twister Да я думаю, что сам справлюсь. Хотя, если жаждешь показать, то вперед. Думаю лишним это точно не будет.
Forever Такие вещи можно делать только в драйвере-фильтре, но никак не в юзер моде. Кстати Volume Shadow Copy работает подобным образом. Но он не блокирует запись, а просто задерживает ее.
Нет. Не жажду Проект коммерческий, я бы только избранное кинул, там есть мелкие, неочевидные нюансы с предоставлением доступа ReadOnly к каталогам для доверенных приложений. В твоем случае, кажись, это не нужно.