Сделать диск доступным только для чтения

Тема в разделе "WASM.NT.KERNEL", создана пользователем vasalvit, 31 мар 2010.

  1. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Здравствуйте.

    Сел фильтром на USB диск. Необходимо сделать его доступным только для чтения. Перехватываю команды SCSI_WRITE (отвергаю со статусом SCSI_SENSE_DATA_PROTECT и SCSI_ADSENSE_WRITE_PROTECT).

    В случае с FAT - диск доступен. Но периодически вываливается MessageBox "Ошибка отложенной записи".
    В случае с NTFS - винда ругается на то, что диск недоступен.

    Что я делаю не так ?
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Разумеется. Ты забываешь про кэшированную запись. Что такое кэшированная запись? Это операция, которая выполнена успешно ещё до того, как данные реально ушли на диск. Соответственно, если файловая система сказала наверх, что запись успешна, а дисковое устройство потом сказало менеджеру кэша "иди-ка ты в жопу", то чему же ты удивляешься? Всё, данные пропали.

    По поводу NTFS точно не скажу, но по-моему это by it's design.

    Уровень не тот, надо файловым фильтром садиться на FSD и фильтровать это там.
     
  3. vasalvit

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    А как тогда работают SD карточки с включённым переключателем Lock ?

    ps. Пытался смотреть карточки, но все карточки, которые у меня есть, не реагируют на переключатель Lock.
     
  4. x64

    x64 New Member

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

    vasalvit New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2008
    Сообщения:
    53
    Если я правильно понимаю, то при включённом Lock запрещена запись на диск.

    Проверил на телефоне - при копировании на защищённый диск выдаётся ошибка записи.

    При работе с кард-ридером система игнорирует переключатель Lock и всегда производит запись.

    Про карточки SD я для примера сказал. Есть же и флешки с переключателем (к сожалению мои не относятся к этому виду флешек :dntknw:
     
  6. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Вероятно, сие сильно зависит от драйверов устройств класса storage. Какие-то из них поддерживают lock-перемычки, какие-то нет. Драйверу достаточно выставить флаг FILE_READ_ONLY_DEVICE в поле Characteristics структуры DEVICE_OBJECT девайса-тома и завершать запросы на запись с кодом STATUS_MEDIA_WRITE_PROTECTED. Если он этого не делает, значит скорее всего lock-перемычки ему по-барабану и ничего с этим не поделаешь (ну или драйвера обновить можно попробовать). На абсолютную истину не претендую, но очень похоже на то.
     
  7. tchunya

    tchunya New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2008
    Сообщения:
    29
    Можно завершить запрос IRP_MJ_DEVICE_CONTROL с ctl code IOCTL_DISK_IS_WRITABLE со статусом STATUS_MEDIA_WRITE_PROTECTED. Только возможны некоторые особенности поведения с вышележащими файловыми системами: например, NTFS на Windows 2000 не поддерживает режим только для чтения, т.е не смонтируется.
     
  8. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да, совсем забыл про неё, это тоже важно.

    К сожалению, не только на Windows 2000.