Блокировка тома (user mode/kernel mode)

Тема в разделе "WASM.NT.KERNEL", создана пользователем Forever, 1 апр 2009.

  1. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Какие имеются способы заблокировать том или его часть? Например, при форматировании или дефрагментации утилиты делают нечто подобное. Может кто подсказать идею?
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    DeviceIoControl ( FSCTL_***
    см. msdn
     
  3. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Гляну. Но что-то мне подсказывает, что это не то. FSCTL_* - это коды для управления драйверами файловых систем. С помощью них можно файл залочить и т.д. Мне нужно немного другое. Необходима блокировка именно тома, а не файловой системы. Например для того, чтобы я мог внести изменения на диске, не конкурируя при этом с драйвером файловой системы. Т.е. отодвинуть файловую систему в сторону, сделать свое дело, вернуть все наместо.
     
  4. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
  5. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Great, x64 :
    Спасибо, похоже то, что нужно. Однако это не все. Возможно ли заблокировать том на запись, чтобы все могли читать, но не могли писать. И как быть, если нужно заблокировать только часть тома?
     
  6. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Forever
    Часть тома заблокировать нельзя.
    На заблокированом томе нельзя открывать никакие файлы, даже для чтения.

    P.S.
    Зачем такие извращения?
     
  7. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Partner
    Объясню. Допустим у меня исть реализация чтения файлов в обход драйвера файловой системы. Т.е. вручную разбираются структуры файловой системы. Зная расположение файла, его несложно прочитать. Однако, пока я его читаю, кто-то может в него писать. Получаем неверные данные. Все может быть еще хуже, если то же случится, когда я буду читать записи MFT, FAT, или другие важные для файловой системы структуры. Поэтому нужна блокировка. Блокировать весь том - не очень удачное решение : 1) Заблокировать не удасться, если на нем располагаются открытые файлы, 2) Блокировать диск C например вообще не думаю, что возможно. Поэтому хотелось бы, блокировать запись, либо блокировать часть тома с которым я работаю, дабы не мешать жить другим программам и самой ОС.
     
  8. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Если ты в ядре, что мешает поставить фильтр и не пропускать IRP-ы на запись? Таким образом ты сможешь залочить не весь диск целиком, а какие-то папки по выбору.
     
  9. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Twister
    Это можно конечно. Сам о таком думал. Вообще говоря главная часть программы может быть и не в ядре. Однако всегда можно написать драйвер, который будет делать то, что нужно. Хотелось бы знать существуют ли решения по-проще.
     
  10. Twister

    Twister New Member

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

    Да и я не сказал бы, что данное решение слишком сложное. Если будет нужно, могу поделиться кодом.
     
  11. Forever

    Forever Виталий

    Публикаций:
    0
    Регистрация:
    12 апр 2008
    Сообщения:
    244
    Twister
    Да я думаю, что сам справлюсь. Хотя, если жаждешь показать, то вперед. Думаю лишним это точно не будет.
     
  12. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Forever
    Такие вещи можно делать только в драйвере-фильтре, но никак не в юзер моде.
    Кстати Volume Shadow Copy работает подобным образом. Но он не блокирует запись, а просто задерживает ее.
     
  13. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Нет. Не жажду :)
    Проект коммерческий, я бы только избранное кинул, там есть мелкие, неочевидные нюансы с предоставлением доступа ReadOnly к каталогам для доверенных приложений. В твоем случае, кажись, это не нужно.