Проблема с написанием RamDisk

Тема в разделе "WASM.NT.KERNEL", создана пользователем Blitskrieg, 4 май 2008.

  1. Blitskrieg

    Blitskrieg New Member

    Публикаций:
    0
    Регистрация:
    4 май 2008
    Сообщения:
    6
    Привет всем!
    В качестве курсового проекта я пишу драйвер виртуального рамдиска.
    Я создал устройство (сам диск) с именем \\Device\\HarddiskN\\DR0 (N вычисляется),
    две символьные ссылки на него: \\Device\\HarddiskN\\Partition0 и \\??GLOBAL\\PhysicalDriveN, также я зарегистрировал интерфейс
    с гуидом GUID_DEVINTERFACE_DISK и написал обработчики всех приходящих IOCTL-ов. После сих действий система увидела мой диск в
    диспетчере томов и правильно определила все его параметры. Но возникла следующая проблема - как уведомить систему о том, что
    на моем диске есть разделы? На запрос IOCTL_DISK_GET_DRIVE_LAYOUT_EX, который приходит сразу после загрузки драйвера я
    возвращаю таблицу разделов, первый из которых содержит нужные мне параметры, также я создаю объект устройство
    с именем \\Device\\HarddiskN\\DP(M)K-L+P (M, K, L вычисляются). Система в диспетчере томов видит этот раздел, как созданный, но
    не форматированный и выдает ошибку, что он не задействован - это верно, поскольку системный драйвер FtDisk не создал
    устройство \\Device\\HarddiskVolumeR. Но вот как заставить FtDisk сделать это? В Соломоне&Руссиновиче написано что-то вроде
    "PartMgr.sys" по закрытому интерфейсу должен уведомить его, когда драйвер создаст объект-устройство-раздел
    (\\Device\\HarddiskN\\DP(M)K-L+P). Но, как я понимаю, никакх уведомлений не приходит. Какие действия еще нужно выполнить?
    Какого типа должно быть это устройство? На него должны приходить какие-либо IOCTL запросы (у меня не приходят никакие)?
    Надо ли вешать на него какие-либо интерфейсы (Хотя они на него не вешаются)? И что можно почитать по такой специфичной теме?

    Заранее спасибо!
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Blitskrieg
    для курсовой очень круто!
    для кандидатской оставил бы...
     
  3. Blitskrieg

    Blitskrieg New Member

    Публикаций:
    0
    Регистрация:
    4 май 2008
    Сообщения:
    6
    Да сложностей-то особо нет с его написанием, вот только в мелочь такую уперся и уже неделю не могу сдвинуться..
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Я бы порылся в уже имеющихся исходниках http://www.wasm.ru/forum/viewtopic.php?id=18741
     
  5. Blitskrieg

    Blitskrieg New Member

    Публикаций:
    0
    Регистрация:
    4 май 2008
    Сообщения:
    6
    Four-F Из исходников я нашел там только TrueCrypt и некий GostDisk.
    Ни один из них не выполняет создания каких либо нужных устройств - все ограничивается
    созданием символьной ссылки на данную букву диска и не создается никаких устройств вида \\Device\\HarddiskN - такое мне не надо - на это есть известный пример от майкрософт.
    Мне же нужно реализовать классовый драйвер диска, создающий по правилам все директории, устройства и символьные ссылки.
    В исходниках это я не встречал, только в коммерческих продуктах (RamDiskXP, SuperSpeedLLC RamDisk и.т.д)/
     
  6. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    wsd
    Кандидатская это изыскание чего то принципиально нового либо крутое усовершенствование уже существующего. В данном случае это как раз таки тянет только на курсовую работу.
     
  7. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    k3internal
    жирно это, наверно, для курсовой.
    ну в край для дипломной оставил бы :)
    я не утверждаю, что тема сложна, а намекаю просто на то, что это перебор по
    функциональности задачи для курсовой.
     
  8. zeo

    zeo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2008
    Сообщения:
    8
    В ДДК 6000 есть хороший пример, написанный, кстати на KMDF. Пример так и называется: ramdisk.
     
  9. Blitskrieg

    Blitskrieg New Member

    Публикаций:
    0
    Регистрация:
    4 май 2008
    Сообщения:
    6
    6000? Хм..сейчас посмотрю, если это окажется не тем самым примером для винды 2000, переделанным под кмдф, которому много лет, то буду безумно рад.
     
  10. Blitskrieg

    Blitskrieg New Member

    Публикаций:
    0
    Регистрация:
    4 май 2008
    Сообщения:
    6
    Нет, чуда не произошло - это оказался все тот же старый пример рамдиска, только за счет использования KMDF сильно ужатый по размерам кода..
     
  11. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    тогда, есть другой вариант. Взять уже существующий нормальный драйвер рамдиска и разреверсить ево.