Драйвер виртуального диска и обработка IRP-пакетов

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

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ради академического интереса делаю драйвер "виртуального диска". Сделал свой аналог файловой системы (заголовок, сектора, данные), все работает. Сейчас стал делать обработку пакетов ввода/вывода и застрял. Я хотел сделать, чтобы с диском могли работать не только мои приложения, но и сам виндовс. Допустим, если сделать dir корню моего диска (символьной ссылке), то формируется аш 7 пакетов:
    FMajor: 0xE, FMinor: 0x0, ControlCode: 0x70000
    FMajor: 0xE, FMinor: 0x0, ControlCode: 0x70000
    FMajor: 0xE, FMinor: 0x0, ControlCode: 0x74800
    FMajor: 0xE, FMinor: 0x0, ControlCode: 0x74804
    FMajor: 0xE, FMinor: 0x0, ControlCode: 0x70024
    FMajor: 0xE, FMinor: 0x0, ControlCode: 0x70000
    FMajor: 0xE, FMinor: 0x0, ControlCode: 0x74804
    Если разбирать, то:
    0xE - IRP_MJ_DEVICE_CONTROL
    0x70000 - IOCTL_DISK_GET_DRIVE_GEOMETRY
    но как я должен ответить на этот запрос, если у меня как таковых нет треков, цилиндров и тд?... в общем такая проблема... нет ли какой-нибудь документации о том, как необходимо предоставлять информацию о виртуальном диске винде? гуглил, но чет не нашел ничего толкого...
     
  2. x64

    x64 New Member

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

    Из твоего поста я так и не понял, ты хочешь сделать виртуальный диск (уровень storage) или виртуальную файловую систему (уровень file system)? Это как бы две разные вещи. В самом сложном случае, если тебе нужно и чтобы буква у диска была выделенная и чтобы файловая система на нём была нестандартная, то придётся писать и драйвер виртуального диска типа filedisk, и файловый фильтр типа sfilter. Сначала определись с этим, потом уже формулируй конкретные вопросы.
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    сорцев же много.
    тот же TrueCrypt. Там можно глянуть драйвер виртуального диска (IOCTL_DISK_GET_DRIVE_GEOMETRY обрабатывает именно он).